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

标签 c++ winapi x86 64-bit

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

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

(规范:Microsoft Portable Executable and Common Object File Format Specification(.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 格式中的某些特定字段或某些特殊的系统函数)?

最佳答案

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

关于c++ - 如何检测给定的 PE 文件(exe 或 dll)是 64 位还是 32 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1153090/

相关文章:

c++ - Boost序列化数据标准

c++ - 奇怪的错误: undefined reference to `class::class()'

windows - 事件 ID 与事件查看器中显示的内容不匹配

c++ - 如何显示来自另一个进程的模态对话框窗口?

assembly - Intel 列出的 "throughput"是按线程还是按核心?

c++ - 如何在 VS C++ 中使用 IA32 指令 'fabs'?

c++ - 如何使用 openssl/sha.h 对文本文件进行 SHA256 哈希处理

c++ - 带有 lambda 捕获的 EXC_BAD_ACCESS

winapi - 在 Windows 中等待孙子进程

c - ret指令后面的lea指令是什么意思?