Ich suche nach einer einfachen Möglichkeit, die ELF-Dateiabschnitte neu anzuordnen. Ich habe eine Sequenz von benutzerdefinierten Abschnitten, die alle in einer bestimmten Reihenfolge ausgerichtet werden sollen.Einfache Möglichkeit, ELF-Dateiabschnitte neu zu ordnen
Der einzige Weg, wie ich es gefunden habe, ist ein Linker-Skript zu verwenden. Die Dokumentation weist jedoch darauf hin, dass das Angeben eines benutzerdefinierten Linkerskripts den Standardwert überschreibt. Das Standard-Linker-Skript enthält eine Menge Inhalt, den ich nicht in meinem benutzerdefinierten Skript duplizieren möchte, nur um drei Abschnitte immer in einer bestimmten Reihenfolge zusammen zu bekommen. Es scheint nicht sehr flexibel zu sein, das Linker-Verhalten so zu codieren.
Warum möchte ich das tun? Ich habe einen Bereich von Daten, die ich den Laufzeitspeicherort von (Anfang und Ende) kennen muss. Also habe ich zwei zusätzliche Abschnitte erstellt und Sentinel-Variablen darin eingefügt. Ich möchte dann die Speicherplätze dieser Variablen verwenden, um das Ausmaß des unbekannten Abschnitts im Speicher zu kennen.
.markerA
int markerA;
.targetSection
... Lots of variables ...
.markerB
int markerB;
Im obigen Beispiel würde ich wissen, dass die Daten in .targetSection zwischen der Adresse markerA und markerB ist.
Gibt es einen anderen Weg, dies zu erreichen? Gibt es Bibliotheken, mit denen ich das aktuell ausgeführte ELF-Bild einlesen und den Standort und die Größe des Abschnitts bestimmen kann?
Was ist Ihre Werkzeugkette (Compiler/Linker)? Sie könnten das Standardlinkerskript in eine andere Datei kopieren und einfügen und nur das ändern, was Sie wollen ... –
Ich benutze gcc. Ich weiß, ich kann das aktuelle Linker-Skript exportieren, ändern und verwenden. Es kann jedoch Hunderte von diesen Anwendungen geben, die nicht alle von unserem Team entwickelt wurden, und ich würde es hassen, wenn sie alle an eine "alte" Version des Linker-Skripts gebunden wären. Ich hatte gehofft, dass es einen Weg gäbe, einige Abschnitte zu ordnen, ohne sich in das restliche Linker-Verhalten einzumischen. – MrSlippers
Gibt es einen Grund, warum Sie Linker-Skripte verwenden? Vielleicht können Sie Ihre Variablen in die Frame-Datenstruktur (struct, class, ...) platzieren und eine statische Variable zuweisen. – Uhli