Win32 API,用于判断给定的二进制文件(EXE或DLL)是x86,x64还是ia64

use*_*071 6 windows 64-bit winapi 32-bit

我试图找到一种编程方式来判断二进制文件是x86,x64还是ia64.

平台:Windows.语言:c/c ++.

背景:在尝试加载第三方dll之前,我需要找出它的位数.

感谢任何指针.

Sha*_*men 13

对于EXE

使用GetBinaryType(...)

这是 manged exe的同一个问题.

对于DLL(和EXE)

使用ImageNtHeader(...)获取文件的PE数据,然后检查IMAGE_FILE_HEADER.Machine字段.

以下是我使用Google代码搜索找到的一些代码

没有清理并且没有错误检查

// map the file to our address space
// first, create a file mapping object
hMap = CreateFileMapping( 
  hFile, 
  NULL,           // security attrs
  PAGE_READONLY,  // protection flags
  0,              // max size - high DWORD
  0,              // max size - low DWORD      
  NULL );         // mapping name - not used

// next, map the file to our address space
void* mapAddr = MapViewOfFileEx( 
  hMap,             // mapping object
  FILE_MAP_READ,  // desired access
  0,              // loc to map - hi DWORD
  0,              // loc to map - lo DWORD
  0,              // #bytes to map - 0=all
  NULL );         // suggested map addr

peHdr = ImageNtHeader( mapAddr );
Run Code Online (Sandbox Code Playgroud)