Microsoft Portable Executable and Common Object File Format — Änderungen 10373 → 10374

Zeile 1: Zeile 1:
 
{{Stub}}
 
{{Stub}}
 
== Aufbau ==
 
== Aufbau ==
−
=== EXE Header ===
+
=== MS-DOS-Stub ===
 +
Aus Gründen der Abwährskompatiblität, beginnt auch heute jedes Programm unter Windows mit dem sogenannten MS-DOS-Stub. Das ist ein kleines MZ-EXE Programm, das am Beginn der PE/COFF Datei steht und aufgerufen wird, wenn man versuchen sollte es unter DOS aufzurufen.
 +
 
 +
==== EXE Header ====
 
Dieser Header ist der Basisheader jeder Datei im EXE-Format (auch DLL und andere abgeleitete Dateien), worauf sich der PE/COFF-Header aufbaut. Da aber die Informationen für solche Dateien nicht mehr im EXE-Header abgelegt werden, könnte man theoretisch den EXE-Header weglassen. Leider ist dem aber nicht so, weil dieser die Offsetadresse zu unserem PE/COFF-Header enthält.
 
Dieser Header ist der Basisheader jeder Datei im EXE-Format (auch DLL und andere abgeleitete Dateien), worauf sich der PE/COFF-Header aufbaut. Da aber die Informationen für solche Dateien nicht mehr im EXE-Header abgelegt werden, könnte man theoretisch den EXE-Header weglassen. Leider ist dem aber nicht so, weil dieser die Offsetadresse zu unserem PE/COFF-Header enthält.
  
−
Die folgende Tabelle zeigt, was noch vom EXE-Header benötigt wird:
+
Die folgende Tabelle zeigt, was noch vom EXE-Header benötigt wird (Einzelheiten können in [[MZ EXE]] nachgelesen werden.)
 
{| {{Prettytable}}
 
{| {{Prettytable}}
 
!Offset||Größe||Beschreibung
 
!Offset||Größe||Beschreibung
Zeile 18: Zeile 21:
 
|0x3C||4 Bytes||Dateioffset des PE/COFF-Header
 
|0x3C||4 Bytes||Dateioffset des PE/COFF-Header
 
|}
 
|}
 +
Hierauf folgt, meist ab Offset 0x40 der eigentliche Stub. Er dient meist nur noch dazu, um unter DOS nur die Meldung "This programm cannot be run in DOS mode" auszugeben.
  
−
=== MS-DOS-Stub ===
+
Die Struktur und der Inhalt des DOS-Stubs ist bei den meisten heutigen Programmen gleich (Wer will, kann sich mal irgendein Programm im Hex Editor ansehen). Der DOS Stub ist in der Regel 216 Byte lang, wodurch die PE-Kenzeichnung dann am Offset 0x000000D8 liegt. Trozdem sollte man sich nicht darauf verlassen sondern den Wert aus 0x3C prüfen.
−
Dieser liegt an offset 0x4F und dient nur noch dazu, um unter DOS nur die Meldung "This programm cannot be run in DOS mode" auszugeben.
 
  
 
=== PE Kennzeichnung ===
 
=== PE Kennzeichnung ===