Forum: Mikrocontroller und Digitale Elektronik .elf explorer


von Andreas (Gast)


Lesenswert?

Hallo zusammen,

ich möchte aus einer .elf Datei folgende Informationen zu globalen 
Variablen extrahieren:

 - Variablenname
 - Adresse
 - Datentyp

Ähnlich, wie es das STMStudio bei STM32 oder Freemaster bei ihren 
Mikrocontrollern macht.

Mit dem Tool 'readelf' lassen sich im grunde genommen all diese 
Informationen aus einer .elf Datei exportieren.
Wenn die Strukturen in der Firmware allerdings komplexer werden, (ein 
struct hat einen weiteren struct usw.) wird es sehr aufwendig, die 
Strukturen zu rekonstruieren.

Hat jemand schon mal etwas ähnliches gemacht oder kennt ein open source 
Projekt, in dem so ein elf explorer implementiert wurde?

Gruß

von Sven B. (scummos)


Lesenswert?

Ich weiß nicht was du konkret machen willst, aber wenn das so eine Art 
Metadatenspeicher sein soll, kann man das auch in das elf einbetten als 
JSON oder so, das ist vielleicht sauberer als es sich da wieder 
rauszufrickeln ... und dann auch sehr leicht mit externem Tooling 
lesbar.

von Andreas (Gast)


Lesenswert?

Das hört sich interessant an, muss dafür ein bestimmter Compiler oder 
Linker Befehl verwendet werden?

von Sven B. (scummos)


Lesenswert?

Ich hab's selber noch nie gemacht, aber Qt benutzt das seit längerem für 
seine Plugin-Metadaten, also im ELF-Header ist ein Stück JSON wo die 
Plugin-Version, die implementierten Interfaces etc. drinsteht. Wenn man 
ein bisschen googelt, findet man meist diese zwei Lösungen hier wie man 
sowas macht:
https://csl.name/post/embedding-binary-data/

Also ja, ist ein bisschen rumgetrickse mit dem Linker. Ich glaube du 
kannst die Daten auch in eine extra Section (.mymetadata oder so) bauen 
mit dem richtigen Flag.

von Andreas (Gast)


Lesenswert?

Hallo zusammen,

in den letzten Wochen hatte ich kaum Zeit und bin bei diesem Problem 
immer noch nicht weiter gekommen.

Wie oben beschrieben, suche ich ein Tool, mit dem ich aus einer .elf 
Datei die Bezeichner aller globalen Variablen, ihre Adressen und die 
rekursiv aufgelösten Datentypen extrahieren kann.

Beispielcode:
1
typedef struct {
2
  int real;
3
  int imag;
4
} complex;
5
6
typedef struct {
7
  complex value1;
8
  complex value2;
9
  float phi;
10
} container;
11
12
container c1;
13
float omega;

Nachdem dieser Code für STM32 kompiliert wurde, möchte ich aus der 
generierten .elf Datei folgenden Output extrahieren können:

c1.value1.real;int;0x2000..
c1.value1.imag;int;0x2000..
c1.value2.real;int;0x2000..
c1.value2.imag;int;0x2000..
c1.phi;float;0x2000..
omega;float;0x2000..

Diese Information ist in der .elf Datei (im Dwarf Teil) auf jeden Fall 
enthalten, da STM Studio und Freemaster es interpretieren können.
Kennt jemand einen Interpreter, welcher diese Informationen aus der .elf 
Datei exportieren kann?

Viele Grüße

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.