| Zeile 10: | Zeile 10: | ||
Der ELF-Header ist wie folgt aufgebaut. | Der ELF-Header ist wie folgt aufgebaut. | ||
| − | {| | + | {| {{Prettytable}} |
! Name || Offset || Größe || Beschreibung | ! Name || Offset || Größe || Beschreibung | ||
|- | |- | ||
| Zeile 45: | Zeile 45: | ||
Das Feld e_ident ist 16 Byte groß und enthält Werte zur Identifikation der ELF-Datei. | Das Feld e_ident ist 16 Byte groß und enthält Werte zur Identifikation der ELF-Datei. | ||
Dies sind die Indizes: | Dies sind die Indizes: | ||
| − | {| | + | {| {{Prettytable}} |
! Name || Wert || Beschreibung | ! Name || Wert || Beschreibung | ||
|- | |- | ||
| Zeile 69: | Zeile 69: | ||
===== EI_MAG0 bis EI_MAG3 ===== | ===== EI_MAG0 bis EI_MAG3 ===== | ||
Diese Bytes werden zur Datei-Identifikation benutzt. | Diese Bytes werden zur Datei-Identifikation benutzt. | ||
| − | {| | + | {| {{Prettytable}} |
! Name || Wert || Position | ! Name || Wert || Position | ||
|- | |- | ||
| Zeile 83: | Zeile 83: | ||
===== EI_CLASS ===== | ===== EI_CLASS ===== | ||
Die Klasse gibt unter anderen an, wie viel Bits zur Adressierung verwendet werden. Also eine 32Bit-Maschine sollte überprüfen, ob der Code auch wirklich auf 32Bit-Maschinen geht. | Die Klasse gibt unter anderen an, wie viel Bits zur Adressierung verwendet werden. Also eine 32Bit-Maschine sollte überprüfen, ob der Code auch wirklich auf 32Bit-Maschinen geht. | ||
| − | {| | + | {| {{Prettytable}} |
! Name || Wert || Beschreibung | ! Name || Wert || Beschreibung | ||
|- | |- | ||
| Zeile 96: | Zeile 96: | ||
Das Byte e_ident[EI_DATA] gibt an, in welchen Format Daten gespeichert werden, Little-Endian oder Big-Endian | Das Byte e_ident[EI_DATA] gibt an, in welchen Format Daten gespeichert werden, Little-Endian oder Big-Endian | ||
| − | {| | + | {| {{Prettytable}} |
! Name || Wert || Beschreibung | ! Name || Wert || Beschreibung | ||
|- | |- | ||
| Zeile 114: | Zeile 114: | ||
===== Architektur-Identifikation ===== | ===== Architektur-Identifikation ===== | ||
Für einen 32bit Intel-Prozessor sollten folgende Felder folgende Werte haben: | Für einen 32bit Intel-Prozessor sollten folgende Felder folgende Werte haben: | ||
| − | {| | + | {| {{Prettytable}} |
! Feld || Wert | ! Feld || Wert | ||
|- | |- | ||
| Zeile 126: | Zeile 126: | ||
==== e_type ==== | ==== e_type ==== | ||
Dieses Feld beschreibt, welches ELF-Format benutzt wird: | Dieses Feld beschreibt, welches ELF-Format benutzt wird: | ||
| − | {| | + | {| {{Prettytable}} |
! Name || Wert || Beschreibung | ! Name || Wert || Beschreibung | ||
|- | |- | ||
| Zeile 147: | Zeile 147: | ||
==== e_machine ==== | ==== e_machine ==== | ||
Wie oben schonmal erwähnt, steht hier der Prozessor-Typ drin. | Wie oben schonmal erwähnt, steht hier der Prozessor-Typ drin. | ||
| − | {| | + | {| {{Prettytable}} |
! Name || Wert || Beschreibung | ! Name || Wert || Beschreibung | ||
|- | |- | ||
| Zeile 169: | Zeile 169: | ||
==== e_version ==== | ==== e_version ==== | ||
Beschreibt die Aktuelle ELF-Version | Beschreibt die Aktuelle ELF-Version | ||
| − | {| | + | {| {{Prettytable}} |
! Name || Wert || Beschreibung | ! Name || Wert || Beschreibung | ||
|- | |- | ||
| Zeile 210: | Zeile 210: | ||
Der Programm-Header besteht aus e_phnum Einträgen, wobei jeder e_phentsize groß ist. Der Programm-Header ist also insgesamt e_phnum*e_phentsize Bytes groß. Im Programm-Header stehen z.B der Text- oder Daten-Teil eines Programms. | Der Programm-Header besteht aus e_phnum Einträgen, wobei jeder e_phentsize groß ist. Der Programm-Header ist also insgesamt e_phnum*e_phentsize Bytes groß. Im Programm-Header stehen z.B der Text- oder Daten-Teil eines Programms. | ||
Ein Eintrag im Programm-Header ist wie folgt aufgebaut: | Ein Eintrag im Programm-Header ist wie folgt aufgebaut: | ||
| − | {| | + | {| {{Prettytable}} |
! Name || Offset || Größe || Beschreibung | ! Name || Offset || Größe || Beschreibung | ||
|- | |- | ||
| Zeile 234: | Zeile 234: | ||
Die folgenden Beschreibungen sind auf PT_LOAD bezogen (es kann sein, dass sie auch auf andere Typen zutreffen). | Die folgenden Beschreibungen sind auf PT_LOAD bezogen (es kann sein, dass sie auch auf andere Typen zutreffen). | ||
| − | {| | + | {| {{Prettytable}} |
! Name || Wert || Beschreibung | ! Name || Wert || Beschreibung | ||
|- | |- | ||
| Zeile 251: | Zeile 251: | ||
| PT_PHDIR || 6 || Gibt Position und Größe des Programm-Headers an. | | PT_PHDIR || 6 || Gibt Position und Größe des Programm-Headers an. | ||
|- | |- | ||
| − | | PT_LOPROC || 0x70000000 || Reserviert | + | | PT_TLS || 7 || Thread-Local Storage |
| − | |- | + | |- bgcolor='#bbb' |
| − | | PT_HIPROC || 0x7fffffff | + | | PT_LOOS || 0x60000000 || rowspan='2' | Reserviert für Betriebssystem spezifische Erweiterungen |
| + | |- bgcolor='#bbb' | ||
| + | | PT_HIOS || 0x6fffffff | ||
| + | |- bgcolor='#bbb' | ||
| + | | PT_LOPROC || 0x70000000 || rowspan='2' | Reserviert für Prozessor spezifische Erweiterungen | ||
| + | |- bgcolor='#bbb' | ||
| + | | PT_HIPROC || 0x7fffffff | ||
|} | |} | ||
| − | Außerdem habe ich noch diese (anscheinend | + | Außerdem habe ich noch diese (anscheinend inoffiziellen) Werte in Linux-Header-Dateien (http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/elf.h#L35) gefunden. |
| − | {| | + | {| {{Prettytable}} |
! Name || Wert | ! Name || Wert | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
|- | |- | ||
| PT_GNU_EH_FRAME || 0x6474e550 | | PT_GNU_EH_FRAME || 0x6474e550 | ||
| Zeile 288: | Zeile 288: | ||
==== p_flags ==== | ==== p_flags ==== | ||
Beschreibt Flags, z.B Zugriffsrechte. | Beschreibt Flags, z.B Zugriffsrechte. | ||
| − | {| | + | {| {{Prettytable}} |
! Name || Wert || Beschreibung | ! Name || Wert || Beschreibung | ||
|- | |- | ||