Windows下判断PE文件是32位还是64位程序

这段代码展示了如何在Windows下使用C语言判断一个PE文件是32位还是64位程序。通过打开文件,读取IMAGE_DOS_HEADER和IMAGE_NT_HEADERS结构,特别是IMAGE_FILE_HEADER中的Machine字段,可以确定文件的运行环境。返回值32表示32位程序,64表示64位程序。实现需包含windows.h或WinNT.h头文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

int __stdcall get_file_machine_bit(const WCHAR * pwszFullPath)
{
FILE * peFile = NULL;
_wfopen_s(&peFile, pwszFullPath, L"rb");
if (peFile == NULL)
{
fclose(peFile);
return -1;
}

IMAGE_DOS_HEADER imageDosHeader;
fread(&imageDosHeader, sizeof(IMAGE_DOS_HEADER), 1, peFile);
if (imageDosHeader.e_magic != IMAGE_DOS_SIGNATURE)
    {
    fclose(peFile);
    return -1;
    }

IMAGE_NT_HEADERS imageNtHeaders;
fseek(peFile, imageDosHeader.e_lfanew, SEEK_SET);
fread(&imageNtHeaders, sizeof(IMAGE_NT_HEADERS), 1, peFile);
fclose(peFile);
if (imageNtHeaders.Signature != IMAGE_NT_SIGNATURE)
    {
    return -1;
    }

if (imageNtHeaders.FileHeader.Machine == IMAGE_FILE_MACHINE_I386)
    {
    return 32;
    }
if (imageNtHeaders.FileHeader.Machine == IMAGE_FILE_MACHINE_IA64 ||
    imageNtHeaders.FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64)
    {
    return 64;
    }

return -1;
}

上述程序当文件为32位可执行文件的时候返回32,财神网www.973949.com并为64位可执行文件时返回64。需要包含头文件windows.h或WinNT.h

其中

IMAGE_DOS_HEADER中的e_lfanew是IMAGE_NT_HEADERS的偏移量。

IMAGE_NT_HEADERS 结构定义: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680336(v=vs.85).aspx

IMAGE_FILE_HEADER 结构定义: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680313(v=vs.85).aspx

IMAGE_FILE_HEADER 中的Machine定义了PE文件的运行环境,因此判断该变量就可以获取其可运行的环境。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值