📑 Table of Contents

Portable Executable beschreibt ein Binärformat ausführbarer Programme, sogenannte PE-Dateien. Es ist das Dateiformat, das bei Win32- und Win64-Systemen für ausführbare Dateien verwendet wird. Außerdem ist es das Format für ausführbare Dateien in EFI-Umgebungen. Es basiert auf dem COFF-Binärformat.[1]

Mögliche Dateiendungen sind zum Beispiel:

  • .exe – executable, ein alleinstehendes Programm oder das Hauptmodul
  • .dll – Dynamic Link Library
  • .sys – system, grundlegende Systemsoftware mit besonderer Behandlung durch das Betriebssystem
  • .drv – driver, ein Treiber
  • .scr – screensaver, ein Bildschirmschoner
  • .cpl – control panel applet, ein Plugin der Windows-Systemsteuerung
  • .ocx – activex control, ein ActiveX-Steuerelement
  • .ax – ein DirectShow-Filter
  • .efi – ein EFI-Modul

Außer der Erweiterung .exe, die eine Datei als eigenständiges Programm identifiziert, ist das PE-Format nicht an eine Erweiterung gebunden. Programmiertechnisch kann das System dazu gebracht werden, Code in jeder im PE-Format vorliegenden Datei auszuführen. DLL-Dateien können beispielsweise Funktionen exportieren, die von anderen Programmen aufgerufen werden. Bei DRV- und SYS-Dateien handelt es sich in der Regel um Gerätetreiber, welche von Windows verwendet werden, um die Hardware anzusteuern.

Neben Windows verwendet auch ReactOS das PE-Dateiformat und ermöglicht so (zurzeit nur sehr beschränkt) die Ausführung von Windows-Programmen. Frühe Versionen von BeOS sowie SkyOS verwendeten ebenfalls das PE-Dateiformat für ihre ausführbaren Programme. Da sie aber eine andere Binärschnittstelle (ABI) verwendeten, waren sie nicht binärkompatibel zu Windows und beabsichtigten dies auch gar nicht. SkyOS verwendet inzwischen das verbreitete ELF-Format, welches zuvor mit dem Betriebssystem Linux populär wurde, da es dort das Standardformat für Binärprogramme ist.

Windows-Dateien im PE-Format lassen sich unter Linux mit Hilfe von WINE und unter DOS teilweise mit Hilfe des HX DOS Extenders ausführen.

Aufbau

Bearbeiten

Jede PE-Datei beginnt mit dem aus DOS-Zeiten bekannten MZ-Header. Dieser dient hier in erster Linie dazu, ein EXE-Programm, das nicht für ein DOS-Betriebssystem bestimmt ist, mit einer Fehlermeldung (z. B. „This program cannot be run in DOS Mode“) zu beenden, falls versucht wird, es doch unter DOS zu starten. Am Anfang einer PE-Datei sind daher, wie bei jeder EXE-Datei von MS-DOS, die zwei Buchstaben „MZ“ zu finden, die Initialen von Mark Zbikowski, dem Entwickler des DOS-Programmformats. Technisch gesehen handelt es sich bei dem Code, der die Fehlermeldung ausgibt, um ein vollständiges DOS-Programm, das entsprechend programmiert unter DOS auch andere Funktionen als eine Fehlermeldung haben kann.

Das letzte Feld im DOS-Header verweist auf die Position des PE-Headers, der dann auch mit der ASCII-Kennung „PE“ und zwei Null-Bytes beginnt.[2]

Der eigentliche PE-Header besteht aus zwei Teilen, dem IMAGE_FILE_HEADER, der die Anzahl der Segmente, den erforderlichen CPU-Typ und weitere Flags enthält, sowie dem IMAGE_OPTIONAL_HEADER (der für lauffähige Programmdateien trotz des Namens nicht optional ist). Dieser enthält unter anderem die Größe der einzelnen Code- und Datensegmente in der Datei sowie weitere Angaben über die benötigten Ressourcen (Speicher, Betriebssystemversion).

Nachfolgender Hexdump veranschaulicht den Beginn eines EXE-Programms für Windows (32 Bit). Die Leerzeile ist zur Verdeutlichung des Stub-Endes eingefügt. Danach beginnt ab Adresse 00000100h der PE-Header. Die DOS-Fehlermeldung der als Stub eingefügten, nur 256 Byte großen MZ-Datei lautet in diesem Fall „This program must be run under Win32“.

00000000:   4D 5A 50 00 02 00 00 00 04 00 0F 00 FF FF 00 00    MZP.............
00000010:   B8 00 00 00 00 00 00 00 40 00 1A 00 00 00 00 00    ........@.......
00000020:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00000030:   00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00    ................
00000040:   BA 10 00 0E 1F B4 09 CD 21 B8 01 4C CD 21 90 90    ........!..L.!..
00000050:   54 68 69 73 20 70 72 6F 67 72 61 6D 20 6D 75 73    This program mus
00000060:   74 20 62 65 20 72 75 6E 20 75 6E 64 65 72 20 57    t be run under W
00000070:   69 6E 33 32 0D 0A 24 37 00 00 00 00 00 00 00 00    in32..$7........
00000080:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00000090:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000000A0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000000B0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000000C0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000000D0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000000E0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
000000F0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

00000100:   50 45 00 00 4C 01 06 00 19 5E 42 2A 00 00 00 00    PE..L....^B*....
00000110:   00 00 00 00 E0 00 8E 81 0B 01 02 19 00 38 01 00    .............8..
00000120:   00 88 06 00 00 00 00 00 F0 45 01 00 00 10 00 00    .........E......
...
...

Einzelnachweise

Bearbeiten
  1. Microsoft KB Archive/121460 - BetaArchive Wiki. Abgerufen am 11. Dezember 2021.
  2. Karl-Bridge-Microsoft: PE Format - Win32 apps. Abgerufen am 11. Dezember 2021 (amerikanisches Englisch).
Bearbeiten

📚 Artikel Terkait di Wikipedia

Liste der Abkürzungen in der Informationstechnik

Threat AR: Augmented Reality ARP: Address Resolution Protocol ASCII: American Standard Code for Information Interchange Ass.-Dev.: Assistant Developer AWS:

Atari-Heimcomputer

Verbindung mit dem Schnittstellenmodul 850 arbeiten, der den geeigneten 7-Bit ASCII-Code mit den entsprechenden Leerzeichen erstellen kann. Akustikkoppler 830

Hex-Editor

Zeichensatz) dargestellt. Im Beispiel werden die Bytes als ASCII interpretiert, dem gebräuchlichsten 1-Byte-Code (das erste Byte 4816 entspricht dem Buchstaben H)

Abandonware

available, for non-commercial use only, snapshots of Alto source code, executables, documentation, font files, and other files from 1975 to 1987.“  Bo

Liste von Hallo-Welt-Programmen/Sonstige

HP41-spezifische Anfangszeichen einer Zeichenkette steht. component HalloWelt export Executable run(args:String...) = print "Hallo Welt!" end wtb 0,"Hallo Welt",13,10

Liste von Dateinamenserweiterungen/E

exc Source-Code Datei Rexx VM/CMS .exe application/octet-stream Executable Ausführbare Datei (DOS, OS/2, Windows) .exe vms/exe Executable Ausführbare

Liste von Dateinamenserweiterungen/I

Sign-up-Datei X-Internet .int Interfaced units Borland .int Intermediate executable code Produced when a source program is syntax-checked .int Hilfsdatei für

Liste von Dateinamenserweiterungen/P

.plx application/x-pixclscript Perl Ausführbares Perl-Programm (Perl Executable) .ply text/plain Polygon File Format Einfache Objektbeschreibung für polygonale