Symbol in Binärdatei finden

Gast #5008691
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!
Persönliche Seite
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.