2012-11-16 7 views
11

Ich habe eine interessante Situation bei der Arbeit, die ich versuche, eine gute Lösung für zu finden. Wir haben Code, der auf einem Multi-Core-MIPS-Bare-Metal (kein Kernel) läuft. Wir haben die Anforderung, mit Code von Drittanbietern zu integrieren, der aktualisierbar sein muss. Ich dachte daran, den 3rd-Party-Code als PIC zu kompilieren und dann die GOT für die Code-/Datensymbole zu ändern, wenn ich diesen Code herunterlade (ich habe die Kontrolle darüber, wo der Code liegen wird). Nehmen Sie außerdem an, dass sich die Schnittstellen in den 3rd-Party-Code nicht ändern, so dass es keine neuen PLT/GOT-Einträge gibt. Wird das funktionieren ?. Welche anderen Dinge sollte ich beachten?Emulieren dynamischer Loader, um Offsets der gemeinsamen Bibliothek zu reparieren

+1

muss ich während ich denke, dass dies im sehr tiefen Ende einer sehr lokalisierten Frage schwimmt, kann ich mich einfach nicht dazu herablassen, es abzustimmen (und tatsächlich stattdessen gewählt zu werden), da es einfach viel zu verblüffend ist Idee und Neugier haben mich (und anscheinend auch andere) überzeugt. Viel Glück! – WhozCraig

+0

@vamsi Die Frage ist mir etwas unklar. Meinen Sie, ändern Sie die GOT jedes Mal, wenn Sie eine neue Version der 3rd Party laden (Upgrade)? Fragen Sie, wie man einen Lader selbst schreibt? – selalerer

+0

@selalerer Ja, ich meine, ändere die GOT jedes Mal, wenn ich eine neue 3rd Party Version lade. Ja, was ich am Ende hätte, ist ein leichter Lader. Ich möchte keinen vollen Ladebalken implementieren. Ich möchte nur die GOT/PLT-Tabellen reparieren und den neuen Code aktivieren. – vamsi

Antwort

1

Ist die richtige Antwort länger als "einen dynamischen Linker/Loader einbetten"? Ihr Problem scheint das selbe zu sein, das von ld.so und den Likes gelöst wurde. Es ist das Thema von Büchern wie Linkers and Loaders von John Levine, all die Dinge zu beschreiben, die ein dynamischer Linker/Lader berücksichtigen muss.

+1

Ich suche nach etwas einfacherem, als meinen eigenen Embedded Loader zu schreiben. Ich habe das oben erwähnte Buch gelesen. Wenn ich mit der Bearbeitung meines Problems fertig bin, werde ich posten, was ich getan habe. Vielen Dank!. – vamsi

0

Wäre das Linux/Unix binutils objcopy, was Sie suchen. Angenommen, Sie erstellen alle Ihre Binärdateien auf einmal, anstatt sie zur Laufzeit in zufälliger Reihenfolge dynamisch laden zu wollen [und Sie haben nicht genug Speicher, um sie über diesen Speicher zu verteilen], dann würde das meiner Meinung nach funktionieren.

Natürlich, wenn Sie nur den GOT reparieren müssen, dann sehe ich nicht, warum Sie das nicht einfach tun können - es ist nicht so schwierig, eine Aufgabe zu schreiben, was das tut. Aber objcopy ist bereits geschrieben und kann einiges an binärem/ausführbarem "Unsinn" machen (ich habe es benutzt, um Boot-ROMs für verschiedene Systeme zu erstellen, einschließlich BIOS-ROMs für PCs und Ähnliches) [Nicht dass ich auftauchte mit der Idee, mehr wie ich jemanden Makefile nahm, die zufällig objcopy drin hatte - ich sah nur, was es getan hat zu verstehen, wie es die rom gemacht, wenn etwas an der einen oder anderen Stelle schief gelaufen ist)

Verwandte Themen