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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.