ELF File Program Header Frage.

OP #2907242
Lesenswert?

Hallo zusammen,

als ich mir gerade ein ELF File angeschaut habe das mit gcc und binutils 
erzeugt wurde ist mir aufgefallen das dort das erste Segment im programm 
header bei Wert p_offset eine 0 stehen hat. Der eigentliche Code geht 
aber im File erst ab Adresse 0x100 los. Bei anderen, nicht mit gcc/ld 
erzeugten elf Files (zB mit GreenHills Toolkette) steht dort eigentlich 
immer der tatsächliche Offset im File drin.
Jetzt frage ich mich warum ist das so? Mit einem Offset von 0 würde ja 
das Segment auch den ganzen Elf-Header mit enthalten. Wenn ich aber mit 
objcopy ein Binär-Image erzeuge beginnt dies aber korrekt mit den Daten 
die ab 0x100 stehen also ohne den ELF-Header. Wiso kommt er den zu der 
Erkenntniss das trotz p_offset = 0 die Daten erst am der 0x100 beginnen.
Die Frage ist doch bestimmt schon öfter aufgetaucht, leider hab ich im 
Web keine verständliche Antwort gefunden.

Grüße,
Thomas
Moderator Persönliche Seite #2907264
Lesenswert?

Ich habe dich noch nicht ganz bis zu Ende verstanden, aber mich
letztens (für AVRDUDE) auch mal mit sowas auseinander setzen müssen.

Bei der GNU-Toolchain musst du berücksichtigen, dass diese aus dem
Unix-Umfeld kommt und in erster Linie dafür konzipiert ist, dass man
die resultierenden ELF-Dateien unter einem Unix möglichst effektiv
geladen bekommt.  Das Laden erfolgt dabei durch simples Zuordnen
einer Speicherseite zu einem Dateiblock (memory mapping), weil man
auf diese Weise das VM-Subsystem (virtual memory) 1:1 benutzen kann.

Daraus ergibt sich aber, dass die ganzen ELF-Headers dann im Speicher
noch vor den ausführbaren Daten zu finden sind und nur durch die
entsprechenden Offsets ausgeblendet werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren