一、 PE头概述
磁盘文件与内存 的映射关系
PE为什么要分节?
1、节省硬盘空间.(这个不是决定的,由编译器决定)
2、一个应用程序多开
3、理解FileBuffer和ImageBuffer
DOC头
标准PE头
可选PE头
二、PE格式结构图(详细)
注:区块就是节表
三、打印PE头部信息
打印PE头部信息:
PE头包含:DOS头+4字节PE标识符+NT头(标准PE头+可选PE头)+节表信息。
#include "stdafx.h"
#include "string.h"
#include <malloc.h>
#include <windows.h>
FILE* open_file(char* file_path,char* open_mode);
int compute_file_size(FILE* file_address);
char* allocate_buffer(int file_size);
char* readfile2memory(char* file_buffer,int file_size,FILE* file_address);
void analysis_PE_head(char* File_buffer);
VOID PrintNTHeaders()
{
// 初始化
char file_path[] = "C:\\Windows\\System32\\notepad.exe";
char open_mode[] = "rb";
// 打开文件,返回文件指针
FILE* file_address = open_file(file_path,open_mode);
// 计算文件长度
int file_size = compute_file_size(file_address);
// 分配内存
char* File_buffer = allocate_buffer(file_size);
// 写入内存,返回内存地址
File_buffer = readfile2memory(File_buffer,file_size,file_address);
// 打印PE头部信息
analysis_PE_head(File_buffer);
// 释放内存、关闭文件流