资源简介
判断一个文件是否是合法的PE文件
IsValidPEFile.cpp
代码片段和文件信息
#include “stdafx.h“
#include
#include
#include
/*
Code From Internet Web.
This file IS PROVIDED by: hustwing@qq.com
QQ:10196739
MSN:hustwing@hotmail.com
*/
BOOL IsValidPEFile(LPTSTR tszFullFileName)
{
HANDLE hFile = INVALID_HANDLE_VALUE;
HANDLE hMapping = INVALID_HANDLE_VALUE;
LPVOID pvMem = NULL;
BOOL bIsPE = FALSE;
if (!PathFileExists(tszFullFileName))
{
return bIsPE;
}
// 根据 PE 签名判断当前文件是否是合法的 PE 文件
hFile = CreateFile( tszFullFileName GENERIC_READ FILE_SHARE_READ
NULL OPEN_EXISTING FILE_ATTRIBUTE_NORMAL NULL );
if ( hFile == INVALID_HANDLE_VALUE )
{
::_tprintf_s(_T(“CreateFile failed.\r\n“));
goto __cleanup;
}
hMapping = CreateFileMapping( hFile NULL PAGE_READONLY 0 0 NULL );
if ( hMapping == INVALID_HANDLE_VALUE )
{
::_tprintf_s(_T(“CreateFileMapping failed.\r\n“));
goto __cleanup;
}
pvMem = MapViewOfFile( hMapping FILE_MAP_READ 0 0 0 );
if (NULL == pvMem)
{
::_tprintf_s(_T(“MapViewOfFile failed.\r\n“));
goto __cleanup;
}
// 是否包含有 DOS 签名
if ( *( USHORT* ) pvMem != IMAGE_DOS_SIGNATURE )
{
::_tprintf_s(_T(“无DOS签名.\r\n“));
goto __cleanup;
}
// 是否包含有 NT 签名
if ( *( ( DWORD* ) ( ( PBYTE ) pvMem + ( ( PIMAGE_DOS_HEADER ) pvMem )->e_lfanew ) ) != IMAGE_NT_SIGNATURE )
{
::_tprintf_s(_T(“无NT签名.\r\n“));
goto __cleanup;
}
bIsPE = TRUE;
__cleanup:
if (pvMem != NULL)
{
UnmapViewOfFile(pvMem);
}
if (hMapping != INVALID_HANDLE_VALUE)
{
CloseHandle(hMapping);
}
if (hFile != INVALID_HANDLE_VALUE)
{
CloseHandle(hFile);
}
return bIsPE;
}
BOOL IsWindowsApp(LPTSTR tszFullFileName)
{
HANDLE hFile = INVALID_HANDLE_VALUE;
HANDLE hMapping = INVALID_HANDLE_VALUE;
LPVOID pvMem = NULL;
BOOL bIsWinApp = FALSE;
if (!PathFileExists(tszFullFileName))
{
return bIsWinApp;
}
// 根据 PE 签名判断当前文件是否是合法的 PE 文件
hFile = CreateFile( tszFullFileName GENERIC_READ FILE_SHARE_READ
NULL OPEN_EXISTING FILE_ATTRIBUTE_NORMAL NULL );
if ( hFile == INVALID_HANDLE_VALUE )
{
::_tprintf_s(_T(“CreateFile failed.\r\n“));
goto __cleanup;
}
hMapping = CreateFileMapping( hFile NULL PAGE_READONLY 0 0 NULL );
if ( hMapping == INVALID_HANDLE_VALUE )
{
::_tprintf_s(_T(“CreateFileMapping failed.\r\n“));
goto __cleanup;
}
pvMem = MapViewOfFile( hMapping FILE_MAP_READ 0 0 0 );
if (NULL == pvMem)
{
::_tprintf_s(_T(“MapViewOfFile failed.\r\n“));
goto __cleanup;
}
// 是否包含有 DOS 签名
if ( *( USHORT* ) pvMem != IMAGE_DOS_SIGNATURE )
{
::_tprintf_s(_T(“无DOS
- 上一篇:后缀表达式求值
- 下一篇:C语言经典讲义!华科密文
相关资源
- qTox (基于 peer-to-peer )
- 安卓c语言开发SDL2+opengles
- QT视频播放器(基于FFmpeg)
- 人脸识别(opencv_facedetect_v4l2)
- 颜色识别形状识别STM103嵌入式代码
- openwrt深入学习笔记
- PE文件操作代码
- 基于opencv的模板匹配代码
- 交互式计算机图形学 第六版 OpenGL源代
- VC++基于OpenGL模拟的一个3维空间模型
- opencv图片扫描以及校正
- opencv手部轮廓识别以及轨迹识别
- opencv2 3D标定.cpp
- 基于opencv漫水填充算法综合
- canape教程(ape.docx)
- Voice Process(基于speex的回声消除)
- opengl绘制汽车.cpp
- 自洽SU3手性夸克-孤子模型中单重子的
- 使用 IBM Rational Systems Developer 和 Rati
- opencv激光中心线的提取
- 手性摄动理论中双迷人重子的辐射衰
- 自协变重子手性扰动理论中自旋1/2双
- ffmpeg推流视频文件到rtmp服务器
- OpenCV Computer Vision Application Programming
- 基于图割的图像分割OpenCV+MFC实现
- 识别魔方颜色
- ffmpeg2.8录像+录音
- opencv版俄罗斯方块源码
- c++使用ffmpeg把h264/h265和mp3写入mp4文件
- 可解码所有jpeg格式图片的开源JPEG解码
评论
共有 条评论