| Zeile 22: | Zeile 22: | ||
=== MS-DOS-Stub === | === MS-DOS-Stub === | ||
| − | Dieser liegt an offset 0x4F und | + | 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 === | ||
| Zeile 52: | Zeile 51: | ||
! Wert || Plattform | ! Wert || Plattform | ||
|- | |- | ||
| − | | | + | | 0x0000 || Nicht bekannt oder auf jeder Plattform lauffähig. |
|- | |- | ||
| − | | | + | | 0x01D3 || Matsushita AM33 |
|- | |- | ||
| 0x8664 || [[x64]] | | 0x8664 || [[x64]] | ||
|- | |- | ||
| − | | | + | | 0x01C0 || ARM little endian |
|- | |- | ||
| − | | | + | | 0x0EBC || EFI Bytecode |
|- | |- | ||
| − | | | + | | 0x014C || [[x86]] kompatible Prozessoren |
|- | |- | ||
| − | | | + | | 0x0200 || Intel Itanium Prozessorfamilie |
|- | |- | ||
| 0x9041 || Mitsubishi M32R little endian | | 0x9041 || Mitsubishi M32R little endian | ||
|- | |- | ||
| − | | | + | | 0x0266 || MIPS16 |
|- | |- | ||
| − | | | + | | 0x0366 || MIPS mit FPU |
|- | |- | ||
| − | | | + | | 0x0466 || MIPS16 mit FPU |
|- | |- | ||
| − | | | + | | 0x01f0 || Power PC little endian |
|- | |- | ||
| − | | | + | | 0x00f1 || Power PC mit Floating Point Support |
|- | |- | ||
| − | | | + | | 0x0166 || MIPS little endian |
|- | |- | ||
| − | | | + | | 0x01A2 || Hitachi SH3 |
|- | |- | ||
| − | | | + | | 0x01A3 || Hitachi SH3 DSP |
|- | |- | ||
| − | | | + | | 0x01A6 || Hitachi SH4 |
|- | |- | ||
| − | | | + | | 0x01A8 || Hitachi SH5 |
|- | |- | ||
| − | | | + | | 0x01C2 || ARM Thumb |
|- | |- | ||
| − | | | + | | 0x0169 || MIPS little endian WCE v2 |
|} | |} | ||
==== Flags des COFF-Headers ==== | ==== Flags des COFF-Headers ==== | ||
| Zeile 144: | Zeile 143: | ||
! Offset || Größe || Beschreibung | ! Offset || Größe || Beschreibung | ||
|- | |- | ||
| − | | | + | | 0x00 || 2 Bytes || Hier wird angegeben, ob es sich um PE32(0x10B) oder PE32+(0x20B) handelt. Bei PE32+ wird ein 64-Bit-Namensraum verwendet. Unter Windows gibt es trotzdem eine Beschränkung auf 2 GiB. Möglich ist es auch, die Datei als ROM Image( 0x107) zu kennzeichen, aber es geht nicht hervor, was die Unterschiede sind. |
|- | |- | ||
| − | | | + | | 0x02 || 1 Byte || Hauptversion des Linkers |
|- | |- | ||
| − | | | + | | 0x03 || 1 Byte || Nebenversion des Linkers |
|- | |- | ||
| − | | | + | | 0x04 || 4 Bytes || Hier soll die Größe des Quellcodes hin |
|- | |- | ||
| − | | | + | | 0x08 || 4 Bytes || Die Summe aller initialisierten Datensektionen |
|- | |- | ||
| − | | | + | | 0x0C || 4 Bytes || Die Summe aller nicht initialisierten Datensektionen (BSS) |
|- | |- | ||
| − | | | + | | 0x10 || 4 Bytes || Die Adresse des Entry Points (Einsprungpunktes) bezogen auf den Anfang der Datei. Im Fall einer Anwengung ist dies die Position des ersten Befehls, bei Gerätetreibern die Adresse der Initialisierungsfunktion. Für DLL-Dateien ist der Entrypoint optional; sollte keiner erwünscht sein, muss dieser Wert 0 sein. |
|- | |- | ||
| − | | | + | | 0x14 || 4 Bytes || Die Adresse, die relativ zum ersten Sektor der ausführbaren Datei steht |
|- | |- | ||
| − | | | + | | 0x18 || 4 Bytes || Die Adresse, die relativ zum ersten Sektor der ausführbaren Datei steht. (Nur bei PE32 nötig). |
|} | |} | ||
<bR> | <bR> | ||
| Zeile 177: | Zeile 176: | ||
! Offset || Größe || Beschreibung | ! Offset || Größe || Beschreibung | ||
|- | |- | ||
| − | | | + | | 0x00 || 8 || Ist ein 8-Byte-String auf UTF-8 Basis. Wenn genau 8-Bytes verwendet wird, dann ist kein Nullbyte nötig. |
Bei Objektdateien darf dieser länger sein, bei ausführbaren Dateien ist dies verboten. | Bei Objektdateien darf dieser länger sein, bei ausführbaren Dateien ist dies verboten. | ||
|- | |- | ||
| − | | | + | | 0x08 || 4 || Die endgültige Größe eines Sektors, wenn es geladen wird. Bei Objektdateien ist dieser Abschnitt voller Nullen. |
|- | |- | ||
| − | | | + | | 0x0C || 4 || Für ausführbare Dateien die Adresse des ersten Bytes der Sektion relativ zum Image Basis(?). |
Bei Objektdateien ist die Adresse des ersten angelegten Bytes, bevor die Verlagerung abgeschlossen ist. | Bei Objektdateien ist die Adresse des ersten angelegten Bytes, bevor die Verlagerung abgeschlossen ist. | ||
|- | |- | ||
| − | | | + | | 0x10 || 4 || Dies Feld ist gerundet. Entweder die Größe des Sektors(Objektdateien) oder die Größe des initialisierten Daten auf der Festplatte(Bei Imagedateien) Ist dieser Teil kleiner als das Offset 8, dann sind der Rest der Sektorentabelle Nullen. Wenn diese Sektion nur uninitialisierte Daten enthält, dann ist dieser Teil Null. |
|- | |- | ||
| − | | | + | | 0x14 || 4 || Der Dateipointer zur ersten Sektion innerhalb des COFF-Headers. Für Objektdateien sollte dieser Teil an einer 4-Byte-Grenze ausgerichtet sein. Enthält die Sektion nur uninitialisierte Daten, dann ist dieser Teil Null. |
| + | |- | ||
| + | | 0x18 || 4 || ''nicht verwendet (PointerToRelocations)''<sup>1</sup> | ||
| + | |- | ||
| + | | 0x1C || 4 || ''nicht verwendet (PointerToLinenumbers)''<sup>1</sup> | ||
| + | |- | ||
| + | | 0x20 || 2 || ''nicht verwendet (PointerToLinenumbers)''<sup>1</sup> | ||
| + | |- | ||
| + | | 0x22 || 2 || ''nicht verwendet (PointerToLinenumbers)''<sup>1</sup> | ||
| + | |- | ||
| + | | 0x24 || 4 || Eigenschaften der Sektion | ||
| + | |} | ||
| + | <sup>1</sup> Die Felder 0x18 bis 0x23 stammen aus Coff und haben in PE keine Bedeutung. Sie sind auf 0 zu setzten. | ||
| + | |||
| + | ==== Eigenschaften für Sektionen ==== | ||
| + | Es gibt folgende Eigneschaftflags von 0 bis 31: | ||
| + | |||
| + | {| {{Prettytable}} | ||
| + | ! Nummber || Sektionstyp | ||
| + | |- | ||
| + | | 5 || Code Sektion | ||
| + | |- | ||
| + | | 6 || Initialisierte Daten Section (.data) | ||
| + | |- | ||
| + | | 7 || Unnitialisierte Daten Section (.bss) | ||
| + | |- | ||
| + | | 26 || Sektion, kann nicht gecached werden. | ||
| + | |- | ||
| + | | 27 || nicht pagebare Sektion | ||
| + | |- | ||
| + | | 28 || gemeinsame Sektion | ||
| + | |- | ||
| + | | 29 || Ausführbare Sektion | ||
| + | |- | ||
| + | | 30 || Lesbare Sektion | ||
| + | |- | ||
| + | | 31 || Schreibbare Sektion | ||
|} | |} | ||
| − | |||
== Weblinks == | == Weblinks == | ||
* [http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx Microsoft Portable Executable and Common Object File Format Specification] | * [http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx Microsoft Portable Executable and Common Object File Format Specification] | ||
| + | * [http://www.csn.ul.ie/~caolan/publink/winresdump/winresdump/doc/pefile.html] | ||