2009-06-05 6 views
6

Ich arbeite an einem Programm, das ein PE-Objekt für verschiedene Informationen analysieren wird.Wozu dient die MZ-Signatur in einer PE-Datei?

Das Lesen der Spezifikationen, obwohl ich nicht herausfinden kann, warum die MZ-Bytes da sind, kann ich nicht auf der Liste der Maschinentypen finden, die diese 2 Bytes darstellen sollen.

Kann jemand klären?

Antwort

12

Die MZ-Signatur ist eine Signatur, die vom 16-Bit-MSE-DOS-EXE-Format verwendet wird.

Der Grund, warum eine PE-Binärdatei einen MZ-Header enthält, ist Abwärtskompatibilität. Wenn die ausführbare Datei auf einem DOS-basierten System ausgeführt wird, wird die MZ-Version ausgeführt (was fast immer nur Stub bedeutet, dass Sie das Programm auf einem Win32-System ausführen müssen).

Natürlich ist das heute nicht mehr so ​​nützlich wie damals, als die Welt von DOS auf das überging, was danach kommen würde.

Damals gab es ein paar Programme, die tatsächlich eine DOS-Version und eine Win32-Version in einer einzigen Binärdatei zusammenbanden.

Und wie bei den meisten Dingen mit der Windows-Geschichte zu tun, hat Raymond Chen einige interessante Artikel zu diesem Thema:

+4

Für einige historische Informationen über die Ursprünge der MZ-Header (Initialen von Mark Zbikowski, ein MS-DOS-Entwickler), möchten Sie vielleicht wikipedia: http://en.wikipedia.org/wiki/DOS_executable – none

0

Es ist die "magische Zahl" von DOS ausführbar. Legacy-Zeug, das du ignorieren kannst.

Dos executable

2

Wie ich es sehe, durch die wikipedia article und Iczelion's PE Tutorial lesen, ist es da nur die Kompatibilität zu halten und ermöglichen dos oder HX DOS Extender bestimmten Code neben dem MZ-Header auszuführen.

Von devsource kann man mehr Informationen finden wie MZ steht für Mark Zbikowski, einer der MS-DOS-Entwickler. Und wie verhält sich das Betriebssystem und behandelt die Daten aus dem MZ-Header.

1

Mark Zbikowski legte seine Initialen in die ursprüngliche MS- DOS-Exe-Format. Diese Signatur war notwendig, um .EXE-Dateien vom viel einfacheren .COM-Format unter DOS zu unterscheiden.

Jede PE-Datei enthält auch ein 16-Bit-DOS-Programm und beginnt daher mit diesem .EXE-Header. Dieses DOS-Programm würde normalerweise "Dieses Programm benötigt Microsoft Windows" oder ähnliches ausdrucken. Ich weiß nicht, ob moderne Compiler immer noch den DOS-Stub erzeugen, aber der PE-Standard sagt immer noch, dass ein PE mit einem 16-Bit-EXE-Header beginnt.

+0

Wenn es keinen Dos-Stub hat, ist es kein gültiges PE/COFF, da ein Feld im DOS-Header angibt, wo der PE-Header startet. –

2

In den frühen Tagen von Microsoft® Windows gab es die Betriebssysteme Windows ™ 1.x, 2.x und 3.xx nicht nur auf den gleichen Volumes wie Microsoft® DOS, sondern auch auf einem MS-DOS OS. Es war nicht nur möglich, sondern sehr wahrscheinlich, dass ein Benutzer versucht, einige der Windows®-Programme unter DOS auszuführen. Daher stellten Microsoft®-Programmierer sicher, dass alle Windows®-Programme ein einfaches 16-Bit-DOS-Programm an der Vorderseite jeder ausführbaren Windows-Datei hatten, das den Benutzer warnte, wenn sie versuchten, ein Windows®-Programm unter DOS auszuführen.Dies ist alles DOS "Stub" Programm. Ressource: http://thestarman.pcministry.com/asm/debug/DOSstub.htm