如何检测给定的PE文件(exe或dll)是64位还是32位

时间:2009-07-20 11:45:14

标签: c++ winapi x86 64-bit

我需要检测给定的.dll或.exe文件是32位还是64位

目前我只有一个解决方案:从指定文件中读取PE标头并从那里取出“机器”字段。

(规范:Microsoft Portable Executable and Common Object File Format Specification(。dococ文件)“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 个答案:

答案 0 :(得分:16)

对于32位基于Windows的应用程序,

GetBinaryType(...)返回SCS_32BIT_BINARYSCS_64BIT_BINARY用于64位基于Windows的应用程序。

答案 1 :(得分:2)

检查一下:http://msdn.microsoft.com/en-us/library/windows/desktop/ms680339%28v=vs.85%29.aspx 寻找“魔术”成员 - 你可以看出PE头是32位(PE32)还是64位(PE32 +)。