Forum: Mikrocontroller und Digitale Elektronik Liste aller Variablen aus ELF-Datei


von Martin S. (drunkenmunky)


Lesenswert?

Hallo zusammen,

gibt es ein Tool das basierend aus einer ELF-Datei mit Debug-Info eine 
Liste aller Variablen (globale Variablen und Klassenvariablen aller 
Objekte) erstellt inklusive Adresse und Datentyp?

Also ungefähr in folgedem Format:
1
GlobalVariableName  Address  DataType
2
ObjectName.ClassVariableName  Address  DataType

von Sebastian W. (wangnick)


Lesenswert?

Geht das nicht mit objdump?

LG, Sebastian

von Dirk S. (dirkst)


Lesenswert?

Auch zu erwähnen
 readelf und elfdump,
 im zusammenhang mit
  gcc auch -g (flag oder
   option 1 2 3), gdb,
  man elf(.. 5)

 aber bitte ...

Dirk St

: Bearbeitet durch User
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Sebastian W. schrieb:
> Geht das nicht mit objdump?

Ja, das funktioniert ganz ausgezeichnet, und zwar schon seit wirklich 
zig Jahren. Aber wahrscheinlich ist der TE einfach zu faul oder zu 
ignorant, sich mit solchen Standardwerkzeugen zu beschäftigen. Oder das 
ganze soll schön klicki-bunti-mäßig sein, am besten noch als Webservice 
oder Smartphone-App, damit es nicht nur lokale Ressourcen nutzt, sondern 
alles ins Netz hinausposaunt.

von Martin S. (drunkenmunky)


Lesenswert?

Vielen Dank Dirk und Sebastian für die Antworten!

Über objdump und readelf bin ich auch schon gestolpert, aber wenn ich es 
richtig sehe, ist es nur die Hälfte der Lösung. Ich müsste den Output 
(in meinem Fall Dwarf v4) noch parsen um an das gewünschte Ergebnis zu 
kommen. Um das Rad nicht jedes Mal neu zu erfinden hatte ich eben 
gedacht zu fragen ob es da schon etas gibt.

Zum Beispiel bräuchte ich folgende Infos aus der Dwarf Info:
1
 <1><b3540>: Abbrev Number: 13 (DW_TAG_variable)
2
    <b3541>   DW_AT_name        : (indirect string, offset: 0x2f0a0): SystemCoreClock
3
    <b3545>   DW_AT_decl_file   : 4
4
    <b3546>   DW_AT_decl_line   : 58
5
    <b3547>   DW_AT_decl_column : 17
6
    <b3548>   DW_AT_type        : <0xb3379>
7
    <b354c>   DW_AT_external    : 1
8
    <b354c>   DW_AT_declaration : 1
9
10
 <1><b37d5>: Abbrev Number: 14 (DW_TAG_variable)
11
    <b37d6>   DW_AT_specification: <0xb3540>
12
    <b37da>   DW_AT_decl_file   : 6
13
    <b37db>   DW_AT_decl_line   : 135
14
    <b37dc>   DW_AT_decl_column : 12
15
16
 <1><14cfe>: Abbrev Number: 30 (DW_TAG_variable)
17
    <14cff>   DW_AT_abstract_origin: <0xb37d5>
18
    <14d03>   DW_AT_location    : 5 byte block: 3 0 0 0 20   (DW_OP_addr: 20000000)
19
  
20
 <1><b3379>: Abbrev Number: 3 (DW_TAG_typedef)
21
    <b337a>   DW_AT_name        : (indirect string, offset: 0x3e2c): uint32_t
22
    <b337e>   DW_AT_decl_file   : 2
23
    <b337f>   DW_AT_decl_line   : 48
24
    <b3380>   DW_AT_decl_column : 20
25
    <b3381>   DW_AT_type        : <0xb3334>
26
  
27
 <1><b3334>: Abbrev Number: 3 (DW_TAG_typedef)
28
    <b3335>   DW_AT_name        : (indirect string, offset: 0x3e2a): __uint32_t
29
    <b3339>   DW_AT_decl_file   : 1
30
    <b333a>   DW_AT_decl_line   : 79
31
    <b333b>   DW_AT_decl_column : 25
32
    <b333c>   DW_AT_type        : <0xb3340>
33
  
34
 <1><b3340>: Abbrev Number: 2 (DW_TAG_base_type)
35
    <b3341>   DW_AT_byte_size   : 4
36
    <b3342>   DW_AT_encoding    : 7  (unsigned)
37
    <b3343>   DW_AT_name        : (indirect string, offset: 0x363ec): long unsigned int

Um damit die gewünschten Informationen für eine globale Variable zu 
bekommen:
1
SystemCoreClock 0x20000000 long unsigned int

Noch komplizierter wird es dann bei Klassenvariablen...

Kennt ihr hierfür einen zuverlässigen Parser?
(Ich habe hierfür wenig brauchbare Ansätze gefunden)

: Bearbeitet durch User
von Dirk S. (dirkst)


Lesenswert?

Als Posaune hätte ich bei Cpp,
 cpp check, depend und pattern,
 wenn's denn cpp wäre.
  Die Hyphe will ich jetzt nicht
  erwähnen.

ELF ... ? so reverse ?

Parser, geht ja auch, wenn man einen
 hat. Üblich sind eher Filter mit
 grep, awk und sed,
 als gebräuchliche Werkzeuge.
Die Thematik, hier, wurde in mehreren Stackoverflow Beiträgen schon 
abgehandelt.

Sorry für die Posaune.

 stackoverflow
! re ad able composed attention -print

und noch einen schönen Tag

Dirk St

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Dirk S. schrieb:
> Posaune
> Hyphe

?

von Sebastian W. (wangnick)


Lesenswert?

Martin S. schrieb:
> Kennt ihr hierfür einen zuverlässigen Parser?
> (Ich habe hierfür wenig brauchbare Ansätze gefunden)

Leider nein. Eventuell ctags, aber auch dass scheint nicht wirklich 
zielführend ...

LG, Sebastian

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

GDB … ELF file laden, dann "info variables"

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.