Executable and Linking Format — Änderungen 4375 → 4423

Zeile 10: Zeile 10:
 
Der ELF-Header ist wie folgt aufgebaut.
 
Der ELF-Header ist wie folgt aufgebaut.
  
−
{| border="1"
+
{| {{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:
−
{| border="1"
+
{| {{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.
−
{| border="1"
+
{| {{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.
−
{| border="1"
+
{| {{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
  
−
{| border="1"
+
{| {{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:
−
{| border="1"
+
{| {{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:
−
{| border="1"
+
{| {{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.
−
{| border="1"
+
{| {{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
−
{| border="1"
+
{| {{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:
−
{| border="1"
+
{| {{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).
  
−
{| border="1"
+
{| {{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 || Reserviert
+
| 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 unoffiziellen) Werte in Linux-Header-Dateien (http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/elf.h#L35) gefunden.
+
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.
−
{| border="1"
+
{| {{Prettytable}}
 
! Name            || Wert
 
! Name            || Wert
−
|-
 
−
| PT_TLS          || 7
 
−
|-
 
−
| PT_LOOS        || 0x60000000
 
−
|-
 
−
| PT_HIOS        || 0x6fffffff
 
 
|-
 
|-
 
| 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.
−
{| border="1"
+
{| {{Prettytable}}
 
! Name || Wert || Beschreibung
 
! Name || Wert || Beschreibung
 
|-
 
|-