方法一:通过OptionalHeader.Magic判断
//传参为文件完整路径
int SeIsX64PEFile(WCHAR* ProcessFullPath)
{
Wow64EnableWow64FsRedirection(FALSE); //禁止重定位!(禁止系统修改文件路径)
HANDLE FileHandle = CreateFile(ProcessFullPath, GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
PIMAGE_DOS_HEADER ImageDosHeader = NULL;
PIMAGE_NT_HEADERS ImageNtHeaders = NULL;
if (FileHandle == INVALID_HANDLE_VALUE)
{
return 0;
}
char FileData[PAGE_SIZE] = { 0 };
DWORD ReturnLength = 0;
if (ReadFile(FileHandle, FileData, PAGE_SIZE, &ReturnLength, NULL) == FALSE)
{
CloseHandle(FileHandle);
return 0;
}
else
{
CloseHandle(FileHandle);
ImageDosHeader = (PIMAGE_DOS_HEADER)FileData;
if (ImageDosHeader->e_magic != 0x5a4d)
{
return 0;
}
ImageNtHeaders = (PIMAGE_NT_HEADERS)((UINT8*)FileData + ImageDosHeader->e_lfanew);
if (ImageNtHe
通过解析PE格式来判断程序是x86或x64
最新推荐文章于 2022-09-17 15:43:31 发布
本文详细介绍了如何通过分析PE(Portable Executable)文件格式的特定字段,来确定程序是32位(x86)还是64位(x64)架构。内容涵盖PE头信息、节区表以及重要的IMAGE_NT_HEADERS结构,阐述了关键判断依据。
摘要由CSDN通过智能技术生成