用于判断给定二进制文件(EXE 或 DLL)是否为 x86、x64 或 ia64 的 Win32 API
我正在尝试找到一种编程方式来判断二进制文件是 x86、x64 还是 ia64。
平台:Windows。 语言:c/c++。
背景:在尝试加载第三方dll之前,我需要找出它的位数。
感谢任何指点。
I am trying to find a programmatic way to tell if a binary is x86, x64, or ia64.
Platform: Windows.
Language: c/c++.
Background: Before trying to load a third-party dll, I need to find out its bitness.
Appreciate any pointers.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我在 Github 上开源了一个专门检查 VC++ 可再发行 DLL 的项目,并且有一个代码我根据 Shay 的答案中的函数创建的代码段 成功查找、加载并检查 DLL 的 x86 / x64 兼容性。
下面是完整的代码片段:
这个问题和 Shay 的回答在我创建这个时对我很有帮助,所以我想我应该在这里发布该项目。
I open-sourced a project on Github that checks for VC++ redistributable DLLs specifically and there's a code snippet I created based off of the function in Shay's answer that successfully finds, loads, and inspects DLLs for x86 / x64 compatibility.
Full code snippet below:
This question and Shay's answer were helpful to me while I was creating this, so I thought I'd post the project here.
您可以自己检查PE头来读取
IMAGE_FILE_MACHINE
字段。 这是一个 C# 实现适应 C++ 应该不会太难。You can check the PE header yourself to read the
IMAGE_FILE_MACHINE
field. Here's a C# implementation that shouldn't be too hard to adapt to C++.对于 EXE,
请使用 GetBinaryType(...)
这是同样的问题对于受管理的 exe。
对于 DLL(和 EXE),
请使用 ImageNtHeader(... ) 获取文件的PE数据,然后检查IMAGE_FILE_HEADER.Machine字段。
这是我使用 Google 代码搜索发现的一些代码
无清理且无错误检查
For EXEs
use GetBinaryType(...)
Here is same question for manged exe.
For DLLs (and EXEs)
Use the ImageNtHeader(...) to get the PE data of the file and then check the IMAGE_FILE_HEADER.Machine field.
Here is some code I found using Google Code Search
No Cleanup and NO error checking