Как определить, что данный 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+).