2009-07-20 18 views
6

necesito para detectar si un determinado .dll o .exe es de 32 bits o 64 bitsCómo detectar que un archivo PE dado (EXE o DLL) es de 64 bits o 32 bits

Por el momento tengo solo una solución: lea el encabezado PE del archivo especificado y tome el campo 'Máquina' desde allí.

(Especificación: Microsoft Portable Executable and Common Object File Format Specification (.docx) en la sección "3.3 COFF archivo de cabecera (Objeto e imagen)")

Este campo puede tomar hasta unos 20 valores. Tres de ellos son:

IMAGE_FILE_MACHINE_I386 (== 32bit) 

IMAGE_FILE_MACHINE_IA64 (== 64bit) 

IMAGE_FILE_MACHINE_AMD64 (== 64bit) 

Mis preguntas:

1) es 'Máquina' a bitness asignación correcta o me he perdido algo? ¿Hay alguna otra advertencia?

2) ¿Hay una manera más fácil de detectar bits de 32/64 (probablemente algún campo específico en formato PE que no noté o alguna función especial del sistema)?

+0

dup: http://stackoverflow.com/questions/971689/win32-api-to-tell-whether-a-given-binary-exe-or-dll-is-x86-x64-or-ia64/971715 # 971715 –

+0

Esa otra pregunta es acerca de la arquitectura, esta pregunta sobre el tamaño de la palabra. – Draemon

+0

La documentación se ha actualizado de v8 a v11 a partir de ahora en 2017: http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx –

Respuesta

15

GetBinaryType(...) rendimientos SCS_32BIT_BINARY para una aplicación basada en Windows de 32 bits y SCS_64BIT_BINARY para una aplicación basada en Windows de 64 bits.

+0

Desafortunadamente, esto devuelve 0 al analizar una DLL. – Benoit

+0

Hecho en Python: importar archivo win32; imprime win32file.GetBinaryType ("myfile.exe"). Esto devuelve 0 para 32bits exe o 6 para archivos de 64 bits. –

Cuestiones relacionadas