Как определить, что данный PE-файл (exe или dll) является 64 бит или 32 бит

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

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

( спецификация: Microsoft Portable исполняемый и общий формат объектного файла спецификация (.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 ответов


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


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