MZ-Datei

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Eine ausführbare Datei mit der Datei-Endung „EXE“ für das Betriebssystem MS-DOS wird auch als MZ-Datei bezeichnet.

Der Begriff ist eher im Hobby-Bereich geläufig und wird im professionellen Bereich kaum verwendet. Er leitet sich von einer Magischen Zahl in den Verwaltungsdaten am Dateibeginn (Header) ab. Es handelt sich um eine Byte-Folge mit den hexadezimalen Werten 4D und 5A, die den Buchstaben „M“ und „Z“ entspricht. Dies sind die Initialen von Mark Zbikowski, eines langjährigen Softwareentwicklers von Microsoft, der u.a. an MS-DOS mitgewirkt hat. Der MZ-Header beinhaltet Verwaltungsinformationen über das EXE-Programm, die das Betriebssystem zum Laden und Starten des Programms benötigt.

Die Buchstabenfolge „MZ“ ist auch am Anfang neuerer EXE-Formate unter OS/2 und Windows sowie in DLLs (Dynamischen Linkbibliotheken) zu finden. Dies rührt daher, dass diese späteren Programme der Einfachheit halber generell ein EXE-Programm im alten DOS-Format als sog. Stub am Dateianfang beinhalten. Damit wird verhindert, dass unter MS-DOS ein EXE-Programm zu starten versucht wird, das nicht für DOS geeignet ist. In diesem Fall wird lediglich der Stub ausgeführt, der im Regelfall so programmiert ist, dass er nur eine einfache Fehlermeldung ausgibt, beispielsweise „This program cannot be run in DOS mode", und dann endet.

Stattdessen waren auch andere Stub-Varianten in Gebrauch:

  • Bei kleineren Programmen wurde vereinzelt eine reine DOS-Version als Stub im Real Mode realisiert, während eine zweite Version für den Protected Mode unter OS/2 den Hauptteil des EXE-Programms bildete.
  • Zur Überwindung der Speichergrenze bei PCs unter MS-DOS wurden sog. DOS-Extender eingebunden, über die im Protected Mode auf mehr RAM zugegriffen werden konnte.
  • Zudem war es möglich, Programme für den Textmodus mittels sogenanntem Family Application Mode sowohl unter DOS als auch unter OS/2 lauffähig zu machen. In diesem Fall wurde über den Header mit MZ-Kennung eine Bibliothek von Microsoft (Family Application Program Interface, FAPI) eingebunden, die OS/2-Systemaufrufe auf entsprechende DOS-Funktionen umleitete. Es stand zwar nicht der gesamte Funktionsumfang von OS/2 zur Verfügung; erlaubte jedoch diesen „DOS-Programmen“ die Nutzung der Vorteile des modernen Betriebssystems.

In DOS-Programmen mit der Endung „COM“ findet man den MZ-Header nicht. Sie werden - abstammend von CP/M - mit maximal 64 KiB Größe in den Speicher geladen, wie sie in der Datei vorliegen.

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......
...
...

Siehe auch[Bearbeiten]

Weblinks[Bearbeiten]