Win32 API to tell whether a given binary (EXE or DLL) is x86, x64, or ia64

后端 未结 3 821
花落未央
花落未央 2020-12-17 01:31

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 thir

3条回答
  •  情书的邮戳
    2020-12-17 01:57

    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

    // 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 );
    

提交回复
热议问题