5

На Windows, как:

is64 abc.exe  
1  

а также

is32 def.exe  
1  

В то время как abc.exe скомпилирован 64-битным, а def.exe - 32-битным в Windows.

3 ответа3

6

Есть ли инструмент командной строки для проверки 32-битного или 64-битного exe-файла?

да

c:\Program Files (x86)\GnuWin32\bin>file file.exe
file.exe; PE32 executable for MS Windows (console) Intel 80386 32-bit

c:\Program Files (x86)\GnuWin32\bin>cd ..\..\evernote\evernote   
c:\Program Files (x86)\Evernote\Evernote>file evernote.exe
evernote.exe; PE32 executable for MS Windows (GUI) Intel 80386 32-bit

c:\Program Files (x86)\Evernote\Evernote>cd c:\Program Files\Internet Explorer    
c:\Program Files\Internet Explorer>file iexplore.exe
iexplore.exe; PE32+ executable for MS Windows (GUI) Mono/.Net assembly

Формат PE32 расшифровывается как Portable Executable 32-bit, а PE32+ - Portable Executable 64-bit.

См. Http://gnuwin32.sourceforge.net/packages/file.htm.

лайк:

is64 abc.exe
1

Не совсем так.

Вы можете использовать опцию -b чтобы исключить имя файла из выходных данных, тогда вам просто нужно некоторое кунг-фу командной строки, чтобы извлечь первое слово (PE32 или PE32+), сравнить его с PE32+ и использовать это в вашем выражении «f».


Windows 10

В Windows 10, если у вас есть юбилейное обновление, если вы включаете оболочку bash, вы можете открыть оболочку bash и использовать команду file подобную этой

rgb@MYPCNAME:/mnt/c$ file install.exe
install.exe: PE32 executable (GUI) Intel 80386, for MS Windows

или же

rgb@MYPCNAME:/mnt/c/Program Files/Internet Explorer$ file ieinstal.exe
ieinstal.exe: PE32+ executable (GUI) x86-64, for MS Windows
4

Я написал пару программ, строго выполняющих то, что вы просили (с добавлением сообщений об ошибках на ошибках и так далее.) (И на самом деле, это одна программа с определением, которое меняет свое поведение, чтобы быть абсолютно точным, но это не имеет значения.)

Вы можете найти их в моем Dropbox здесь. Исходный код включен в пакет, но вы можете отказаться от него, если он не нужен. Это в основном только в том случае, если вы не доверяете моим двоичным файлам.

Пример использования:

>is32 C:\Windows\System32\taskmgr.exe
1

>is64 C:\Windows\System32\taskmgr.exe
0

По сути, программа работает, сначала отображая двоичный файл в памяти, затем находя заголовок PE и, наконец, просто сравнивая поле Machine со значением для любой архитектуры, которую вы запрашиваете. По сути, очень простой процесс.

1
$  file access-client-win32.exe 

access-client-win32.exe: PE32 executable for MS Windows (console) Intel 80386 32-bit


$ file access-client-win64.exe

access-client-win64.exe: PE32+ executable for MS Windows (console) Mono/.Net assembly

win32.exe -> PE32

win64.exe -> PE32+

PS: PE -> Портативный исполняемый файл

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .