So prüfen Sie, ob eine Binärdatei unter Windows 16-Bit ist

594
Jacob Stern

Ich habe eine .exeDatei, die ich unter Windows 10 nicht ausführen kann. Ich vermute, dass es sich um ein 16-Bit-Binärprogramm handelt. Gibt es eine einfache Möglichkeit, dies zu überprüfen? Etwas wie die Antwort von Alexander Revo wäre großartig.

4

2 Antworten auf die Frage

7
Austin Hemmelgarn

Windows hat das alte ausführbare DOS-Format mehrmals erweitert. Wenn Sie sich also eine "moderne" ausführbare Windows-Datei ansehen, wird es nahe am Anfang eine MZ(oder möglicherweise ZMdie ausführbare Datei für ein System, das die entgegengesetzte Bit-Reihenfolge verwendet). Damit wird der Header für das zweite ausführbare DOS-Format festgelegt, das einfach als MZ-Format bezeichnet wird.

Darüber hinaus sehen Sie einige offensichtliche Kauderwelsch, gefolgt von etwas wie 'Dieses Programm kann nicht im DOS-Modus ausgeführt werden'. Das Kauderwelsch ist eigentlich ein wirklich einfaches DOS-Programm, das eine Meldung ausgibt, um dem Benutzer mitzuteilen, dass dieses Programm nicht unter DOS ausgeführt werden kann.

Danach müssen Sie den Header für die eigentliche ausführbare Datei, die mit einem von vier Paaren von Buchstaben, beginnen kann NE, LX, LE, oder PE. Wenn Sie keine der oben genannten Meldungen sehen, handelt es sich um eine 16-Bit-DOS-Anwendung.

NEAusführbare Dateien (auch als "Neue ausführbare Dateien" bezeichnet) sind derzeit veraltet. Sie waren das erste erweiterte Format des neuen Formats MZ und wurden ursprünglich für Windows 1.0 entwickelt. Sie sind immer aus 16-Bit-ausführbaren Windows-Dateien und wurden offiziell mit Windows 1.0-3.x, MS-DOS 4.0 (nicht jedoch späteren Versionen), OS / 2 1.x und den OS / 2-Versionen von Windows verwendet NT 5.0 (Windows 2000). Diese können nicht nativ unter 64-Bit-Windows ausgeführt werden und zeigen ein Anwendungssymbol unter 32-Bit-Versionen von Windows seit Vista nicht ordnungsgemäß an.

LXAusführbare Dateien (eine von zwei Varianten von 'Linear Executables') sind ausführbare 32-Bit-Dateien in einem Format, das von OS / 2 2.x und neuer sowie von einigen DOS-Extendern verwendet wurde. Diese werden von keiner modernen Windows-Version unterstützt (und ich denke, sie wurden nie unterstützt, obwohl ich nicht sicher bin).

LEAusführbare Dateien (die andere Art von 'Linear Executable') sind ein ungerader Fall und können technisch sogar 64-Bit-Code enthalten. Sie wurden auch mit OS / 2 2.0 (genau wie LXausführbare Dateien) eingeführt, wurden jedoch für Hardwaretreiber entwickelt. Das in Windows 3.x und 9x verwendete VxD-Treibermodell verwendete dieses Format. Sie wurden nie für Benutzeranwendungen verwendet und werden daher in neueren Windows-Versionen überhaupt nicht unterstützt.

PEAusführbare Dateien, die allgemein als "Portable Executables" bezeichnet werden, sind das von modernen Windows-Systemen verwendete Format und wurden für 32-Bit-Code (und daher niemals 16-Bit-Code) unterstützt. Es gibt auch eine Erweiterung namens 'PE32 +', die für 64-Bit-Windows-Binärdateien, .NET-CIL-Binärdateien (die Bitbreiten-Agnostiker sind) und eine Reihe anderer Dinge verwendet werden, die verschiedene Erweiterungen verwenden (z. B. UEFI-Treiber und Anwendungen, die eine .efiErweiterung verwenden, haben das Format PE32 +.

Mithilfe dieser Informationen können Sie dieselbe allgemeine Prüfung verwenden, die in der Antwort vorgeschlagen wird, mit der Sie in Ihrer Frage verlinkt haben. Wenn Sie nur MZdie Kurznachricht und nicht die Kurzmitteilung gefolgt von einigen Kauderwelschern und dann eines der vier obigen Buchstabenpaare in den ersten 4 KB der Datei sehen, handelt es sich nur um eine ausführbare DOS-Datei. Andernfalls handelt es sich um eines dieser vier Formate. Das einzige Format, das nativ unter Windows 10 funktionieren sollte, ist das PE-Format.

Als Beispiel ist hier ein Hexdump der ersten 512 Bytes einer ausführbaren 64-Bit-Windows-Datei (insbesondere einer der Komponenten der BOINC-Clientsoftware):

00000000: 4d5a 9000 0300 0000 0400 0000 ffff 0000 MZ.............. 00000010: b800 0000 0000 0000 4000 0000 0000 0000 ........@....... 00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000030: 0000 0000 0000 0000 0000 0000 1801 0000 ................ 00000040: 0e1f ba0e 00b4 09cd 21b8 014c cd21 5468 ........!..L.!Th 00000050: 6973 2070 726f 6772 616d 2063 616e 6e6f is program canno 00000060: 7420 6265 2072 756e 2069 6e20 444f 5320 t be run in DOS  00000070: 6d6f 6465 2e0d 0d0a 2400 0000 0000 0000 mode....$....... 00000080: c88d b31c 8cec dd4f 8cec dd4f 8cec dd4f .......O...O...O 00000090: 8594 4e4f 9aec dd4f e39a 414f 88ec dd4f ..NO...O..AO...O 000000a0: 1fa2 454f 8eec dd4f e39a 434f 8eec dd4f ..EO...O..CO...O 000000b0: e39a 774f 9fec dd4f e39a 764f 89ec dd4f ..wO...O..vO...O 000000c0: 8594 5e4f 8dec dd4f 8594 594f 8dec dd4f ..^O...O..YO...O 000000d0: 9771 414f 85ec dd4f 8cec dc4f 14ed dd4f .qAO...O...O...O 000000e0: 9771 764f d0ec dd4f 9771 474f 8dec dd4f .qvO...O.qGO...O 000000f0: 9771 404f 8dec dd4f 5269 6368 8cec dd4f .q@O...ORich...O 00000100: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000110: 0000 0000 0000 0000 5045 0000 6486 0600 ........PE..d... 00000120: 4c88 ea5a 0000 0000 0000 0000 f000 2200 L..Z..........". 00000130: 0b02 0a00 00fe 0a00 0092 0b00 0000 0000 ................ 00000140: c0e4 0800 0010 0000 0000 0040 0100 0000 ...........@.... 00000150: 0010 0000 0002 0000 0500 0200 0000 0000 ................ 00000160: 0500 0200 0000 0000 0020 1b00 0004 0000 ......... ...... 00000170: 489f 1700 0300 4081 0000 1000 0000 0000 H.....@......... 00000180: 0010 0000 0000 0000 0000 1000 0000 0000 ................ 00000190: 0010 0000 0000 0000 0000 0000 1000 0000 ................ 000001a0: 0000 0000 0000 0000 8cc6 0e00 6801 0000 ............h... 000001b0: 0030 1400 9cd6 0600 00a0 1300 a884 0000 .0.............. 000001c0: 0094 1600 2019 0000 0010 1b00 2001 0000 .... ....... ... 000001d0: e01c 0b00 1c00 0000 0000 0000 0000 0000 ................ 000001e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 000001f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 

Beachten Sie zuerst das MZin den ersten beiden Bytes, gefolgt von den Daten für das DOS-Programm, die Sie darüber informieren, dass es nicht unter DOS ausgeführt werden kann, wenn Sie es dort ausführen, gefolgt von der PESignatur in den Bytes 280 und 281. Sie können dies auch tun Sehen Sie sich diese speziellen Elemente in einem Texteditor an, obwohl das Lesen viel schwieriger ist.

Beachten Sie jedoch, dass die reale Möglichkeit besteht, dass es sich überhaupt nicht um eine ausführbare Windows-Datei handelt und jemand einfach den falschen Namen angegeben hat. Windows erkennt etwas normalerweise als 16-Bit-Programm und sagt, dass es deshalb nicht ausgeführt werden kann.

"gleich am Anfang wird es eine MZ geben" wie sehen Sie das? Hex-Editor Moab vor 5 Jahren 0
@Moab Entweder einer, obwohl ein Texteditor etwas einfacher ist, da jedes System einen hat. Ich werde meine Antwort morgen mit einem Beispiel aktualisieren. Austin Hemmelgarn vor 5 Jahren 0
2
Wes Sayeed

Wenn Windows Ihre Anwendung nicht ausführen kann, weil es sich um 16-Bit handelt, wird dies explizit angegeben. Man muss nicht raten.

Windows 10 behält die gleichen Kompatibilitätsrichtlinien wie in früheren Versionen bei. Die 64-Bit-Versionen können keine 16-Bit-Software ausführen. Die 32-Bit-Version kann 16-Bit-Software ausführen. Im Gegensatz zu früheren Versionen müssen Sie jedoch die NTVDM-Unterstützung über Windows-Features hinzufügen.