C++判断pe文件实例
本文实例讲述了C++判断pe文件的方法。分享给大家供大家参考。
具体实现方法如下:
#include 是为了使用CFileDialog
main.h如下:
#include
class CMyApp:public CWinApp
{
BOOL InitInstance();
};
main.cpp如下:
#include "main.h"
#include
CMyApp theApp;
BOOL CMyApp::InitInstance()
{
CFileDialog dlg(TRUE);
if (dlg.DoModal() != IDOK)
{
return FALSE;
}
//打开文件
HANDLE hFile = ::CreateFile(dlg.GetPathName(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
return FALSE;
}
IMAGE_DOS_HEADER dosHeader;
IMAGE_NT_HEADERS32 ntHeader;
DWORD dwReturn;
BOOL bIsPe=FALSE;
::ReadFile(hFile, &dosHeader, sizeof(IMAGE_DOS_HEADER), &dwReturn, NULL);
if (dwReturn == sizeof(IMAGE_DOS_HEADER))
{
if (dosHeader.e_magic == IMAGE_DOS_SIGNATURE) //mz
{
if (-1 != ::SetFilePointer(hFile, dosHeader.e_lfanew, NULL, FILE_BEGIN))
{
::ReadFile(hFile, &ntHeader, sizeof(IMAGE_NT_HEADERS32), &dwReturn, NULL);
if (dwReturn == sizeof(IMAGE_NT_HEADERS32))
{
if (ntHeader.Signature == IMAGE_NT_SIGNATURE) //pe
{
bIsPe = TRUE;
}
}
}
}
}
::CloseHandle(hFile); //与上面的CreateFile区对写
if (bIsPe)
{
MessageBoxA(NULL, "is a pe file", "", MB_OK);
}
else
{
MessageBoxA(NULL, "not a pe file", "", MB_OK);
}
return FALSE;
}
希望本文所述对大家的C++程序设计有所帮助。相关阅读:
JSON无限折叠菜单编写实例
javascript Array.prototype.slice的使用示例
深入学习C语言中memset()函数的用法
Win8关闭游戏时提示虚拟内存不足是什么原因如何解决
jquery easyui中treegrid用法的简单实例
php实现文件下载(支持中文文名)
SQL Server中删除重复数据的几个方法
asp.net连接数据库读取数据示例分享
winXP系统电脑打印文字字体出现乱码的解决办法
js判断是否为ie的方法小结
php/js获取客户端mac地址的实现代码
javascript实现了照片拖拽点击置顶的照片墙代码
Java编程实现遍历两个MAC地址之间所有MAC的方法
C#调用Rar文件及获取Rar返回值的方法