概述
PE文件是指某一种格式的文件,可执行文件(.exe),动态链接ku(.dll),驱动文件(.sys)等等....
PE文件整体的格式图:
DOS头
IMAGE_DOS_HEADER头格式 为了兼容DOS程序而设立 中间字段对现在来说没有作用
typedef struct _IMAGE_DOS_HEADER {
WORD e_magic; //PE的标志 解析是作为是否为PE文件的第一个标志 值为0X5A4D "MZ"
WORD e_cblp;
WORD e_cp;
WORD e_crlc;
WORD e_cparhdr;
WORD e_minalloc;
WORD e_maxalloc;
WORD e_ss;
WORD e_sp;
WORD e_csum;
WORD e_ip;
WORD e_cs;
WORD e_lfarlc;
WORD e_ovno;
WORD e_res[4];
WORD e_oemid;
WORD e_oeminfo;
WORD e_res2[10];
LONG e_lfanew; //指向新PE的偏移
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
DOS头二进制
代码解析-DOS头
int main()
{
// 先打开文件
HANDLE file_handle = CreateFileA(
PATH,
GENERIC_READ,
NULL,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
// 获取文件大小
DWORD file_size = GetFileSize(file_handle, NULL);
// 申请空间保存文件内容, 如果读取成功就申请空间
char* file_buff = new char[file_size];
// 读取文件
DWORD read_size = 0;
ReadFile(file_handle, file_buff, file_size, &read_size, NULL);
// 关闭文件
CloseHandle(file_handle);
PIMAGE_DOS_HEADER dos_head = PIMAGE_DOS_HEADER(file_buff);
}