Das Problem mit der Identifizierung von ausführbaren MS-DOS-Dateien ist, dass technisch ausführbare Dateien von Windows PECOFF auch gültige ausführbare MS-DOS-Dateien sind. PECOFF-Executables werden mit einem "MS-DOS-Stub" vorangestellt, einem vollständigen MS-DOS-Programm, das in den meisten ausführbaren Dateien eine Meldung wie "Dieses Programm kann nicht im DOS-Modus ausgeführt werden" ausgibt.
Also ist das erste, was zu tun ist, den ausführbaren MS-DOS-Header zu sehen, und ob es gültig ist. Es sieht wie folgt aus (von Ralf Browns Interrupt List):
00h 2 BYTEs .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
(see also #01593)
02h WORD number of bytes in last 512-byte page of executable
04h WORD total number of 512-byte pages in executable (includes any
partial last page)
06h WORD number of relocation entries
08h WORD header size in paragraphs
0Ah WORD minimum paragraphs of memory required to allocate in addition
to executable's size
0Ch WORD maximum paragraphs to allocate in addition to executable's size
0Eh WORD initial SS relative to start of executable
10h WORD initial SP
12h WORD checksum (one's complement of sum of all words in executable)
14h DWORD initial CS:IP relative to start of executable
18h WORD offset within header of relocation table
40h or greater for new-format (NE,LE,LX,W3,PE,etc.) executable
1Ah WORD overlay number (normally 0000h = main program)
Die Schlüsselwerte bei Versetzungen 00h und 18h sind zu überprüfen. Die zwei Bytes am Anfang der Datei, die Signatur, müssen "MZ" oder 54ADh sein. Während "ZM" auch für MS-DOS-Programme funktioniert, erfordert Windows, dass PECOFF-Programme die gebräuchlichere "MZ" -Signatur verwenden. Als nächstes muss der 16-Bit-Wert bei Offset 18h überprüft werden. Es muss größer oder gleich 40h sein, damit PECOFF ausführbar ist.
Wenn die Werte bei den Offsets 00h und 18h ausgecheckt werden, dann ist das nächste, was zu tun ist, den 32-Bit-Wert bei Offset 3Ch zu lesen. Dieser enthält den Offset des aktuellen PECOFF-Headers. Sie müssen dann die Header-Sterne mit der Signatur "PE \ 0 \ 0" überprüfen, dh die zwei Zeichen "P" und "E", gefolgt von zwei 0 Bytes.
Beachten Sie, dass es möglich ist, andere Buchstaben an der Stelle zu finden, die bei Offset 3Ch angegeben wurde, wie "NE", "LE", "LX", die für 16-Bit-Windows-Programme, VxDs und 32-Bit-OS/verwendet wurden. 2 ausführbare Dateien. Diese anderen ausführbaren Formate verfügen ebenfalls über MS-DOS-Stubs und suchen ihre echten Header auf die gleiche Weise.
http://delphidabbler.com/articles?article=8 –