Есть ли простой способ проверить, является ли двоичный файл 32-разрядным или 64-разрядным в Windows? Мне нужно проверить, прежде чем переместить программу на 32-битную машину и испытать впечатляющий сбой.
windows
binary-files
32-vs-64-bit
Septagram
источник
источник
Ответы:
Изучив значения заголовков из ответа Ричарда , я нашел решение, которое является быстрым, простым и требует только текстового редактора. Даже Windows по умолчанию notepad.exe будет работать.
Откройте исполняемый файл в текстовом редакторе. Возможно, вам придется перетащить или использовать
Open...
диалоговое окно редактора , потому что Windows не показываетOpen with...
опцию в контекстном меню для исполняемых файлов.Проверьте первые печатные символы после первого появления
PE
. Эта часть, скорее всего, будет окружена хотя бы некоторым пробелом (может быть много), поэтому это можно легко сделать визуально.Вот что вы найдете:
x86:
x64:
Предупреждение: использование Блокнота по умолчанию для больших файлов может быть очень медленным, поэтому лучше не использовать его для файлов размером более мегабайта или немногих. В моем случае для отображения файла размером 12 МБ потребовалось около 30 секунд. Однако Notepad ++ смог отобразить исполняемый файл размером 120 МБ практически мгновенно.
Это решение может быть полезно в случае, если вам нужно проверить файл на компьютере, на котором вы не можете установить дополнительное программное обеспечение.
Дополнительная информация:
Если у вас есть HEX-редактор, смещение PE Signature находится в смещении
0x3C
. ПодписьPE\0\0
(буквы «P» и «E», за которыми следуют два нулевых байта), за которыми следует двухбайтовый тип машины в Little Endian.Соответствующие значения
0x8664
для исполняемого файла x64 и0x14c
для x86. Возможных значений гораздо больше, но вы, вероятно, никогда не столкнетесь ни с одним из них или не сможете запустить такие исполняемые файлы на вашем ПК с Windows.Полный список типов компьютеров, а также остальные спецификации .exe можно найти в разделе « Типы машин» в Microsoft PE и COFF .
источник
Microsoft PE and COFF Specification
, которая является настолько документированным контрактом, насколько это возможно, а также инструкции по поиску точного адреса PE-заголовка. в любом.exe
файле. Если у вас есть более надежный источник, чем официальная спецификация Microsoft по собственному исполняемому формату Microsoft, я хотел бы знать, что это такое.Инструмент SDK
dumpbin.exe
с/headers
опцией включает эту информацию, сравните эти два (я добавил жирный шрифт для ключевой информации)а также
источник
dumpbin /headers | findstr "machine"
значительно упрощает представление того, что ищет QA ...C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
Если у вас нет или вам не нужен весь Windows SDK или Visual Studio, вы можете использовать
sigcheck.exe
из SysInternals :Выход:
источник
Я могу подтвердить, что
file
утилита (например, из cygwin) будет различать 32- и 64-битные исполняемые файлы. Они выглядят следующим образом:Как видите, очень очевидно, что есть что. Кроме того, он различает исполняемые файлы консоли и графического интерфейса, что также очевидно.
источник
MZ
вместоPE
?Простой способ - запустить его (если вы доверяете ему) и взглянуть на вкладку процесса в диспетчере задач. 32-битные процессы покажут «* 32» в конце имени процесса. Если вы не хотите запускать его на своем компьютере, попробуйте EXE Explorer . Он покажет целую кучу информации об исполняемых файлах, включая 32-разрядную или 64-разрядную.
источник
main
точки входа и поэтому не будет выполняться как отдельный процесс. Существует функция инициализации, которая вызывается при загрузке, но это не «главная» функция.У многих людей установлен отличный 7-zip , и они добавили в него папку 7-Zip
PATH
. 7-zip понимает форматы файлов, отличные от ZIP и RAR, такие как файлы MSI и исполняемые файлы PE. Просто используйте командную строку7z.exe
в рассматриваемом PE-файле (Exe или DLL):Вывод будет включать в себя строки следующим образом, со
CPU
строкой, читающей либо,x86
либоx64
, что задается здесь:источник
file
реализацию внутри?64-разрядная версия Process Explorer может сказать вам. Просто запустите исполняемый файл и откройте окно свойств процесса. На главной вкладке есть запись с надписью «Изображение: 32-разрядная» или «Изображение: 64-разрядная».
источник
Simply run the executable
А что если вы не хотите запускать программу?Самый простой способ (когда данные не являются конфиденциальными)
Я считаю, что Virustotal
File detail
- это самый простой способ узнать, является ли двоичный файл 32-разрядным или 64-разрядным.Additional information
Вариант предусматривает в дополнении много полезных информации о файле.источник
Метод запуска исполняемого файла и последующей проверки в проводнике процессов или аналогичном инструменте имеет некоторые очевидные недостатки:
Метод Dumpbin.exe может решить цель возможно.
Другой альтернативой может быть использование команды file в cygwin . Тем не менее, я не проверял это на Windows. Это хорошо работает на Linux.
РЕДАКТИРОВАТЬ: Только что протестировал file.exe в окне. работает отлично. :)
источник
cygwin
пакета, могут получитьfile
пакет gnuwin32 .file
просто читает данные с диска в двоичном формате и проверяет их на наличие магических чисел, сравнивая их с базой данных. 32-битные программы Windows выпускаются как PE32, а 64-битные и .NET программы - PE32 +. Сама поfile
себе разрядность делает абсолютно нулевую разницу - и 32-разрядные, и 64-разрядные приложения могут считывать данные с диска, и это все, что ему нужно.Вот решение Powershell, никаких внешних зависимостей или чего-либо еще. Откройте Powershell, вставьте туда функцию (дважды нажмите Enter, чтобы вернуться к приглашению), затем используйте ее, как в моих примерах ниже функции:
Вот пример вывода:
источник
$stream.dispose();
после закрытия? Должен освободить файловые дескрипторы. ( stackoverflow.com/questions/1999858/… )Даже исполняемый файл, помеченный как 32-битный, может работать как 64-битный, если, например, это исполняемый файл .NET, который может работать как 32- или 64-битный. Для получения дополнительной информации см. Https://stackoverflow.com/questions/3782191/how-do-i-determine-if-a-net-application-is-32-or-64-bit , в котором есть ответ, что Утилита CORFLAGS может использоваться для определения того, как будет работать приложение .NET.
Вывод CORFLAGS.EXE
Для 32-битного исполняемого файла:
Для 64-битного исполняемого файла:
Для исполняемого файла, который может работать как 32- или 64-разрядный и будет работать как 64-разрядный, когда это возможно:
Для исполняемого файла, который может работать как 32- или 64-разрядный, но будет работать как 32-разрядный, если не загружен в 64-разрядный процесс:
источник
corflags : error CF008 : The specified file does not have a valid managed header
)Вы также можете использовать
file
инструмент из пакета Mysw от msys . Это работает как команда unix. Аналогично работаетfile
инструмент от GNUwin32 .источник
Если вы работаете в Windows 7, в проводнике Windows щелкните правой кнопкой мыши исполняемый файл и выберите «Свойства». В окне свойств выберите вкладку «Совместимость». Если в разделе «Режим совместимости» вы видите Windows XP, это 32-битный исполняемый файл. Если вы видите Windows Vista, она 64-битная.
источник
Windows 8
Windows XP SP2
но другие показывают какVista
илиWindows 8
. Так что этот метод не является правильным.Как добавить 32/64 битный тест в ваше контекстное меню
Создайте текстовый файл с именем exetest.reg и содержащий этот код:
Создайте текстовый файл с именем,
x86TestStart.bat
содержащим только эту строку кода, и сохраните его в C: \ temp:Создайте текстовый файл с именем,
x86or64.vbs
содержащим этот код, и сохраните его в C: \ temp:Дважды щелкните файл exetest.reg: новый ключ будет добавлен в реестр Windows:
Он будет отображаться как « 32/64 битный тест » в контекстном меню после щелчка правой кнопкой мыши по исполняемому файлу.
Нажатие на элемент приведет к запуску пакетного файла
c:\\temp\\x86TestStart.bat\
, который запускает файл VBscriptx86or64.vbs
, который читает exe-подпись и показывает результат.Если вы не можете или не хотите вмешиваться в реестр, просто скопируйте файл .vbs на панель быстрого запуска и перетащите исполняемый файл поверх него.
источник
Мои два цента будут просто скачать обходчик зависимостей и проверить, что за архитектура использовалась в одном из исполняемых файлов.
Как это использовать:
Просто загрузите приложение, запустите его, нажмите на значок «Открыть» → найдите файл * .exe → выберите и внизу после сканирования отражений вы увидите сетку с данными, в которой один столбец содержит детали «архитектуры» (x86, x64)
Откройте исполняемый файл и посмотрите архитектуру сборки
источник
Я не видел это упоминалось. Существует программа просмотра PE под названием CFF Explorer от NTCore , которая может предоставить вам эту информацию. Его можно скачать и запустить как переносной, но вы также можете установить его, если хотите.
Щелкните правой кнопкой мыши двоичный файл (
.exe
и.dll
т. Д.) И выберите «Открыть с помощью CFF Explorer». Перейдите к Nt Headers -> File Header -> В поле «Характеристики» нажмите «Нажмите здесь»Если это 32-битная программа, будет установлен флажок «32-битное слово». Например, я установил 32-битную версию Notepad ++, как вы можете видеть на изображении ниже. В противном случае это 64 бит.
источник
.DMP
дамп в Visual Studioисточник
два моих цента: как разработчик C ++, обходчик зависимостей ( http://www.dependencywalker.com/ ) очень информативен, отображает не только 64/32 бита, но и каждый участвующий Dll:
Вы можете увидеть 64 слева от каждого имени файла ...
источник
Тем не менее, WSL «s
file
команда очень работает.file /mnt/c/p/bin/rg.exe
будет выводить:file /mnt/c/p/bin/u.exe
будет выводить:источник
Столбец платформы в диспетчере задач Windows 10
Windows 7 не имеет столбца платформы. Таким образом, диспетчер задач Windows 7 не будет показывать это.
В Windows 10 выбор столбцов больше не находится под «видом». В Windows 10, когда вы находитесь на вкладке сведений, вы щелкаете правой кнопкой мыши заголовок столбца, а затем выбираете столбцы. Затем установите флажок «платформа».
источник