Быстрый способ узнать, является ли установленное приложение 64-битным или 32-битным

107

У меня установлено стороннее приложение (в данном случае Cognos Data Manager), установленное на 64-битной Windows Server 2003.

Есть ли быстрый способ определить, было ли приложение построено / скомпилировано как 64-битное приложение или как 32-битное приложение?

По умолчанию программа хотела быть установленной в Program Files (x86). Я предполагаю, что это означает, что это 32-битная версия. Мне нужно было заставить его общаться с базой данных Oracle и заставить его работать, я в итоге переустановил его в путь к каталогу, в котором не было скобок «(» и «)», так как это вызывало проблему. Я также установил как 64-битные, так и 32-битные клиенты Oracle.

Для дальнейшего использования я хотел бы иметь возможность набрать команду «xxxx fred.exe» и попросить ее указать, потребуется ли для fred.exe 32-разрядная или 64-разрядная настройка (например, источники данных ODBC и т. Д.).

Gary
источник
1
Если приложение находится в папке Progam Files (x86), оно никоим образом не гарантирует, что приложение будет скомпилировано в 64-битной версии. Это просто соглашение, которому следуют большинство установщиков. Например, Chrome 64 bit устанавливается в папку x86 (к сожалению).
nawfal

Ответы:

92

Если вы запускаете приложение, в диспетчере задач оно должно иметь * 32, чтобы указать, что оно 32-разрядное. Я почти уверен, что они реализовали это в Server 2003, но это не очень хорошо, надеюсь, кто-то может уточнить.

Вы также можете запустить его через PEiD . PEiD не поддерживает 64-битные PE, поэтому он будет подавлен, если он 64-битный.

Существует также знаменитый файл GNU для Windows. Он расскажет вам все виды информации об исполняемом файле.

Пример:

$ file winrar-x64-392b1.exe
winrar-x64-392b1.exe: PE32+ executable for MS Windows (GUI)

$ file display.exe
display.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit</pre>

Как видите, 64-битный установщик WinRAR классифицирован как PE32 +, что означает 64-битный исполняемый файл . 32-битное приложение - это просто PE32, 32-битный исполняемый файл.

Джон Т
источник
1
Добро пожаловать :)
Джон Т
1
Альтернативой диспетчеру задач может быть Process Explorer, вы можете добавить туда столбец Image Type. Через меню «Параметры» вы можете заменить диспетчер задач на это, если хотите ... :-)
Тамара Вийсман
Что файл GNU показывает с программами, такими как Process Explorer, которые имеют 32-разрядную заглушку, которая обнаруживает, что он работает в 64-разрядной системе, и распаковывает 64-разрядное изображение для выполнения?
Раздражатель
Скачай и попробуй сам?
Джон Т
2
Чтобы установить fileиз GnuWin32, загрузите «полный пакет» (а не «двоичные файлы») с gnuwin32.sourceforge.net/packages/file.htm
полковник Panic
41

Самый простой способ, без установки другой программы или запуска файла, это просто щелкнуть файл правой кнопкой мыши, выбрать « Свойства» и перейти на вкладку « Совместимость ». Если нет неактивных параметров и предлагаются режимы Windows XP и 9x, это 32-разрядная версия. Если имеются неактивные параметры, а Vista - самый ранний из предложенных режимов, это 64-разрядная версия. Нет необходимости запускать приложение вообще.

Если приложение уже запущено, вы все равно можете использовать идею * 32, упомянутую в других ответах. Однако это недоступно в Windows 8.x и его новом диспетчере задач. К счастью, вы можете включить столбец платформы , щелкнув правой кнопкой мыши заголовки столбцов на вкладке « Сведения » и выбрав « Выбрать столбцы» . Столбец будет содержать «32-разрядный» или «64-разрядный», в зависимости от ситуации.

trlkly
источник
Звучит достаточно разумно.
ArtOfWarfare
1
Да, мне нравится этот Я хочу проверить его на один файл и не хочу загружать свой ноутбук, полный загруженного дерьма ...
Готлиб Нотшнабель
Уведомление * 32 недоступно в диспетчере задач Windows 8, но в нем есть столбец «Платформа», который по умолчанию не отображается. Смотрите 7tutorials.com/…
Пино
Спасибо @Pino. У меня никогда не было причин выяснять это, когда я использовал Windows 8. (Я вернулся к Windows 7, когда мой HD сломался, и понял, что никогда не использовал никаких приложений W8.) Я обновлю свой ответ.
15:05
25

Если у вас установлен Visual Studio или Platform SDK, вы можете использовать dumpbin /headersдля просмотра значений заголовка PE.

Пример для 64-битного исполняемого файла:

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
            8664 machine (x64)
               5 number of sections
        4987EDCA time date stamp Tue Feb 03 08:10:02 2009
               0 file pointer to symbol table
               0 number of symbols
              F0 size of optional header
              23 characteristics
                   Relocations stripped
                   Executable
                   Application can handle large (>2GB) addresses

OPTIONAL HEADER VALUES
             20B magic # (PE32+)
            8.00 linker version
           2A600 size of code
           18A00 size of initialized data
               0 size of uninitialized data
           2AE90 entry point (000000000042AE90)
            1000 base of code
               ...

И для 32 бит:

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
             14C machine (x86)
               3 number of sections
        4B0C786D time date stamp Wed Nov 25 01:21:01 2009
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
             103 characteristics
                   Relocations stripped
                   Executable
                   32 bit word machine

OPTIONAL HEADER VALUES
             10B magic # (PE32)
            9.00 linker version
           42000 size of code
            4000 size of initialized data
           6F000 size of uninitialized data
           B0EE0 entry point (004B0EE0)
           70000 base of code
               ...

Первое значение в заголовке файла говорит вам об архитектуре: 0x14C для x86 или 0x8664 для x64.

детеныш
источник
Интересный и детальный подход, мне действительно нужно снова начать программирование, +1.
Джон Т
18

Если у вас есть программа шестнадцатеричного редактора, просто откройте файл с ней и вскоре после стандартного ввода заголовка (например, «Эта программа не может быть запущена в режиме DOS ...»), вы увидите либо

"PE..L" (шестнадцатеричный код: 504500004C) = 32 бита

или же

"PE..d †" (шестнадцатеричный код: 504500006486) = 64 бита

Брайан Вейганд
источник
Я использую Total Commander в качестве моего файлового менеджера, поэтому для меня это самое простое решение. Я могу просто нажать F3, чтобы просмотреть начало файла и получить ответ мгновенно.
mivk
1
Ew, они фактически написали "64" "86" как читаемые человеком байты там, чтобы указать 64 бита. Как уродливо :)
Nyerguds
@ Nyerguds почему безобразно? это называется hexspeak и довольно часто используется, особенно. в магических числах. Например, IPv6 на Facebook*:FACE:B00C:*
phuclv
Это совсем не то же самое. Вы просто говорите о шестнадцатеричном кляре. Это буквально использует число 100 как означающее «64» только потому, что оно выглядит как 6 и 4 в шестнадцатеричном формате.
Nyerguds
@Nyerguds строка «6486» в шестнадцатеричном формате , что, очевидно, является шестнадцатеричным выражением, где вы читаете шестнадцатеричные цифры как символы. Что не так с 0xDEADBEEF, когда вы используете 0xD для D, потому что это похоже на D? Если это ужасно, то BCD также ужасен, когда вы буквально используете число 100, чтобы обозначить 64
phuclv
5

альтернативный текстПроводник EXE Проводник для
файлов OS / 2, NE, PE32, PE32 + и VxD.

Это приложение основано на MiTeC Portable Executable Reader . Он читает и отображает свойства и структуру исполняемого файла. Он совместим с типами файлов PE32 (переносимый исполняемый файл), PE32 + (64-битный), NE (новый исполняемый файл Windows 3.x) и VxD (драйвер виртуального устройства Windows 9x). Исполняемые файлы .NET также поддерживаются.

Он перечисляет введенные классы, используемые единицы и формы для файлов, скомпилированных компиляторами Borland.

Примечание: он поставляется с графическим интерфейсом и позволяет вам «исследовать» структуру двоичных файлов Windows.
К сожалению, кажется, что он даже не принимает целевой двоичный файл для открытия из командной строки. Но детали, которые он дает, могут быть полезны в некоторых случаях.

Nik
источник
3

Вы можете проверить, используя sigcheck.exeкакой из Sysinternals Suite , например,

$ sigcheck.exe some_app.exe

Sigcheck v2.51 - File version and signature viewer
Copyright (C) 2004-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

C:/Program Files (x86)/Foo App\some_app.exe:
    Verified:   Signed
    Signing date:   14:48 23/12/2015
    Publisher:  X
    Company:    X
    Description:    X
    Product:    Some App
    Prod version:   5.0.0.1241
    File version:   5.0.0.1241
    MachineType:    32-bit
kenorb
источник
1
Это также работает для DLL.
user34660 11.09.16
2

Другой простой способ - использовать PESnoop:

C:\> pesnoop photoshop.exe /pe_dh


-------------------------------------------------------------------------------
 PESnoop 2.0 - Advanced PE32/PE32+/COFF OBJ,LIB command line dumper by yoda
-------------------------------------------------------------------------------

Dump of file: photoshop.exe...
Modus:        64bit Portable Executable Image...
...

Одно из мест, где можно приобрести PESnoop: http://www.prestosoft.com/download/plugins/PESnoop.zip

- Дэйв

ViperGeek
источник
2

А для вас, энтузиастов GUI, самый простой способ - установить это расширение Explorer:

http://www.silurian.com/win32/inspect.htm

- Дэйв

ViperGeek
источник
"Установка не удалась". Ура.
ArtOfWarfare
2

Dependency Walker - полезный инструмент с графическим интерфейсом для проверки не только exe-файлов, но и DLL-файлов. 64-битный файл DLL или EXE будет иметь маленький значок 64 рядом с ним.

bobc
источник
1
filever /bad *.exe

WAMD64 или W32i или W16 будут в первом столбце.

боб
источник
1

Если вы запустите программу, вы можете использовать «Process Monitor» (ProcMon) из Sysinternal Suite .

Он портативный и дает вам много информации о ваших процессах.

yucer
источник
1
Это, вероятно, излишне.
Synetech