Forum: Compiler & IDEs Symbol in Binärdatei finden


von PhilippG (Gast)


Lesenswert?

Guten Tag,

ich möchte eine Datenstruktur aus einem von mir compilierten Programm 
aus dem Object-File herauslesen.

Sprich ich habe in meinem C-Code eine globale Variable:
myFancyType_t myFancyVariable = {bla bla inizialisierung bla};

Diese C-Datei compiliere ich mittels einem gcc-derivat zu einem 
Object-File.

Lasse ich mir dort nun mittels "nm -g" Die Symboltabelle ausgeben, dann 
wird mir das Symbol "myFancyVariable" mit einem Value von 0x00100744 
angezeigt.
Wenn ich jedoch das Object-File mit einem Hex-Editor öffne und nach dem 
(sehr leicht erkennbaren ) Muster meiner Datenstruktur suche, erscheint 
diese bei Byte 1988(dez).

Das Object-File selber ist ca. 50KB groß. Wie kommen da Symboladressen 
von 0x100744 zu Stande?
Bisher hatte ich angenommen, die Symboladressen geben den Index des 
Start-Bytes innerhalb des Object-Files an. Liege ich da falsch?

Gibt es eine andere Möglichkeit, die Position meiner Daten im 
Object-File heraus zu finden?

Danke im Voraus!

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

PhilippG schrieb:
> Guten Tag,
>
> ich möchte eine Datenstruktur aus einem von mir compilierten Programm
> aus dem Object-File herauslesen.
>
> Sprich ich habe in meinem C-Code eine globale Variable:
> myFancyType_t myFancyVariable = {bla bla inizialisierung bla};
>
> Diese C-Datei compiliere ich mittels einem gcc-derivat zu einem
> Object-File.
>
> Lasse ich mir dort nun mittels "nm -g" Die Symboltabelle ausgeben, dann
> wird mir das Symbol "myFancyVariable" mit einem Value von 0x00100744
> angezeigt.
> Wenn ich jedoch das Object-File mit einem Hex-Editor öffne und nach dem
> (sehr leicht erkennbaren ) Muster meiner Datenstruktur suche, erscheint
> diese bei Byte 1988(dez).

Die Position im Object ist was anderes, als die Adresse des Objekts zu 
Laufzeit.

Außerdem enthält ein Object nur Symbnolinformationen und nicht die 
Adresse der Objekte, die bekommst du erst nach dem (statischen) Linken 
oder nachdem ein dynamischer Linker drüber gelaufen ist.


> Das Object-File selber ist ca. 50KB groß. Wie kommen da Symboladressen
> von 0x100744 zu Stande?

> Bisher hatte ich angenommen, die Symboladressen geben den Index des
> Start-Bytes innerhalb des Object-Files an. Liege ich da falsch?

Kommt auf die Art des Symbols an.  Da macht es einem Unterschied ib es 
ein ABS Symbol ist oder einer Section zugeordnet ist.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.