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
Antwort
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.
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
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)
- 1. Cross-Plattform C++ Dynamische Bibliothek Plugin Loader
- 2. HTML, um Vista Command Link zu emulieren?
- 3. Muster benötigt, um Subskriptionsdienst zu emulieren
- 4. Verknüpfen einer gemeinsamen Bibliothek mit gcc
- 5. Dynamischer "Testhost" oder Bundle Loader für iOS Unit Testing?
- 6. Balkendiagramme: Reparieren der Visualisierung
- 7. Java-Klasse-Datei-Loader-Bibliothek in C
- 8. Einen Browser emulieren, um eine Datei herunterzuladen?
- 9. Laden Sie mehrere Kopien einer gemeinsamen Bibliothek
- 10. Shell-Skript, um Warnungen als Fehler zu emulieren?
- 11. Richtiger Weg, um Gleitkommazahlen einfacher Genauigkeit in Python zu emulieren?
- 12. Wie gehe ich vor, um meine Lesedatei-Methode zu reparieren?
- 13. Was löst Entity Framework aus, um eine Navigationseigenschaft zu reparieren?
- 14. Was der wesentliche Unterschied zwischen Rahmen und dynamischer Bibliothek ist
- 15. Wie IE8-Umgebung zu emulieren?
- 16. Haskell: zu reparieren oder nicht zu beheben
- 17. Android Glide-Bibliothek funktioniert nicht mit gemeinsamen Elementübergänge
- 18. Reparieren der Tiefenstruktur in Python
- 19. Versuchen, css-loader mit Webpack zu verwenden, um unsere CSS
- 20. Namen der Systemklassen-Loader
- 21. Wie zu reparieren pip hängen bei der Deinstallation von sqlalchjemy
- 22. Kafka Connect Offsets. Holen/Setzen?
- 23. .net dll Wrapper um vorhandene .net-Bibliothek
- 24. Wie kann ich die Splash-Seite der Website reparieren, um in IE8 und darunter zu arbeiten?
- 25. Kann ich svn: externals mit mercurial emulieren?
- 26. P-Tag zu dynamischer Textbreite
- 27. Javascript-Bibliothek, um Abhängigkeitsdiagramm zu zeichnen
- 28. Wie kann ich eine ältere Version einer gemeinsamen Bibliothek verknüpfen
- 29. Ist es möglich, Zeiger im Shared Memory zu speichern, ohne Offsets zu verwenden?
- 30. Richtige Verwendung von Offsets/Push
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
@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
@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