Mam .exe
plik, którego nie mogę uruchomić w systemie Windows 10. Podejrzewam, że jest tak, ponieważ plik binarny ma 16 bitów. Czy istnieje prosty sposób sprawdzenia? Coś w rodzaju odpowiedzi Alexandra Revo byłoby świetne.
Mam .exe
plik, którego nie mogę uruchomić w systemie Windows 10. Podejrzewam, że jest tak, ponieważ plik binarny ma 16 bitów. Czy istnieje prosty sposób sprawdzenia? Coś w rodzaju odpowiedzi Alexandra Revo byłoby świetne.
Odpowiedzi:
Windows wiele razy rozszerzał stary format pliku wykonywalnego DOS, więc jeśli spojrzysz na „nowoczesny” plik wykonywalny Windows, na samym początku będzie MZ
(lub ewentualnie ZM
jeśli plik wykonywalny jest dla systemu, który używa odwrotnej kolejności bitów). Oznacza to nagłówek drugiego formatu wykonywalnego DOS, znanego po prostu jako format MZ.
Poza tym zobaczysz jakiś pozorny bełkot, a po nim coś w stylu „Ten program nie może być uruchomiony w trybie DOS”. Ten bełkot jest w rzeczywistości bardzo prostym programem DOS, który drukuje komunikat informujący użytkownika, że tego programu nie można uruchomić w DOS.
Po tym, masz nagłówek rzeczywistego pliku wykonywalnego, który może rozpocząć się z jednym z czterech par liter, NE
, LX
, LE
, lub PE
. Jeśli nie widzisz żadnego z tych i wyżej wspomnianego komunikatu, jest to 16-bitowa aplikacja DOS.
NE
Pliki wykonywalne (znane jako „Nowe pliki wykonywalne”) są obecnie nieaktualne. Były to pierwsze „nowe” rozszerzone formaty MZ i zostały pierwotnie opracowane dla systemu Windows 1.0. Są one zawsze niezmiennie 16-bitowymi plikami wykonywalnymi Windows i zostały oficjalnie używane z Windows 1.0-3.x, MS-DOS 4.0 (ale nie późniejszymi wersjami), OS / 2 1.x i wersjami OS / 2 systemu Windows do NT 5.0 (Windows 2000). Nie można ich uruchamiać natywnie w 64-bitowym systemie Windows i nie wyświetla poprawnie ikony aplikacji w 32-bitowych wersjach systemu Windows od czasu Vista.
LX
pliki wykonywalne (jedna z dwóch odmian „plików liniowych”) to 32-bitowe pliki wykonywalne w formacie używanym przez OS / 2 2.x i nowsze oraz niektóre DOS Extendery. Nie są one obsługiwane w żadnej nowoczesnej wersji systemu Windows (i myślę, że nigdy nie były obsługiwane, choć nie jestem pewien).
LE
pliki wykonywalne (inny typ „liniowego pliku wykonywalnego”) są nieparzystym przypadkiem i mogą nawet technicznie zawierać kod 64-bitowy. Zostały również wprowadzone w systemie OS / 2 2.0 (podobnie jak LX
pliki wykonywalne), ale zostały zaprojektowane do użycia ze sterownikami sprzętowymi. Model sterownika VxD stosowany w systemach Windows 3.xi 9x wykorzystywał ten format. Nigdy nie były używane w aplikacjach użytkownika, dlatego nie są w ogóle obsługiwane w nowszych wersjach systemu Windows.
PE
Pliki wykonywalne, bardziej znane jako „Przenośne pliki wykonywalne” to format używany przez nowoczesne systemy Windows i zostały zaprojektowane dla kodu 32-bitowego (a zatem nigdy nie były obsługiwane 16-bitowy kod). Istnieje również rozszerzenie o nazwie „PE32 +”, które jest używane dla 64-bitowych plików binarnych systemu Windows, plików binarnych .NET CIL (które są niezależne od szerokości bitów) oraz wielu innych rzeczy, które używają różnych rozszerzeń (na przykład sterowniki UEFI i aplikacje korzystające z .efi
rozszerzenia mają format PE32 +).
Korzystając z tych informacji, możesz skorzystać z tej samej ogólnej kontroli sugerowanej w odpowiedzi, do której podałeś link w swoim pytaniu. Jeśli zobaczysz tylko MZ
krótką wiadomość, a po niej bełkot, a następnie jedną z czterech powyższych liter w pierwszych 4 kB pliku, jest to po prostu plik wykonywalny DOS, w przeciwnym razie jest to jeden z tych czterech formatów. Jedynym z tych formatów, który powinien działać natywnie w systemie Windows 10, jest format PE.
Na przykład oto zrzut heksowy pierwszych 512 bajtów 64-bitowego pliku wykonywalnego systemu Windows (w szczególności jednego ze składników oprogramowania klienta BOINC):
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 ................
Zauważ najpierw MZ
dwa pierwsze bajty, a następnie dane programu DOS, które informują, że nie można go uruchomić w systemie DOS, jeśli spróbujesz go tam uruchomić, a następnie PE
podpis w bajtach 280 i 281. Możesz także zobacz te konkretne elementy w edytorze tekstów, choć dużo trudniej je przeczytać.
Zauważ jednak, że istnieje również bardzo realna możliwość, że wcale nie jest to plik wykonywalny systemu Windows, a ktoś po prostu nadał mu niewłaściwą nazwę. Windows zwykle rozpoznaje coś jako 16-bitowy plik wykonywalny i mówi, że dlatego nie może go uruchomić.
Jeśli system Windows nie może uruchomić aplikacji, ponieważ jest 16-bitowa, poinformuje o tym wprost. Nie trzeba zgadywać.
Windows 10 zachowuje tę samą zasadę zgodności, co poprzednie wersje; wersje 64-bitowe nie mogą uruchamiać oprogramowania 16-bitowego. Wersja 32-bitowa może obsługiwać oprogramowanie 16-bitowe, ale w przeciwieństwie do poprzednich wersji, musisz dodać obsługę NTVDM za pośrednictwem funkcji systemu Windows.