Как определить, что данный PE-файл (exe или dll) является 64-битным или 32-битным - PullRequest
7 голосов
/ 20 июля 2009

Мне нужно определить, является ли данный файл .dll или .exe 32-битным или 64-битным

На данный момент у меня есть только одно решение: прочитать заголовок PE из указанного файла и взять оттуда поле «Машина».

(Спецификация: Спецификация формата исполняемого файла Microsoft Common и файла общего объекта (файл .docx) в разделе "3.3. Заголовок файла COFF (объект и изображение)")

Это поле может принимать до 20 значений. Три из них:

IMAGE_FILE_MACHINE_I386  ( == 32bit )

IMAGE_FILE_MACHINE_IA64  ( == 64bit )

IMAGE_FILE_MACHINE_AMD64 ( == 64bit )

Мои вопросы:

1) Правильно ли построено отображение «машина» на битность, или я что-то упустил? Есть ли другие предостережения?

2) Есть ли более простой способ определения битности 32/64 (вероятно, какое-то конкретное поле в формате PE, которое я не заметил, или какая-то специальная системная функция)?

Ответы [ 2 ]

16 голосов
/ 20 июля 2009

GetBinaryType (...) возвращает SCS_32BIT_BINARY для 32-разрядного приложения для Windows и SCS_64BIT_BINARY для 64-разрядного приложения для Windows.

2 голосов
/ 12 ноября 2011

Проверьте это: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680339%28v=vs.85%29.aspx Ищите элемент «Magic» - вы можете узнать, является ли PE-заголовок 32-битным (PE32) или 64-битным (PE32 +).

...