判断pe文件

#include <afxdlgs.h>是为了使用CFileDialog

main.h如下:

#include <afxwin.h>

class CMyApp:public CWinApp
{
	BOOL InitInstance();
};



main.cpp如下:

#include "main.h"
#include <afxdlgs.h>

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值