PE结构详解
转载自小甲鱼视频
第一讲:
1.序言:
从某种意义上来讲,可执行文件的格式是操作系统本身执行机制的反应。
虽然研究可执行文件格式并不是程序员的首要任务,但这又处于对操作系统的理解。
2.必备知识:
exe文件 dll文件都是用完全相同的PE格式, 唯一的不同就是用一个字段表示这个文件是exe 文件还是dll文件(exe文件双击就能打开, dll文件是动态链接库,需要exe文件调用)
pe格式定义的主要地方位于我们的头文件winnt.h。
第二讲
每一个PE文件都是以一个DOS程序开始的,这样,一旦程序在DOS下执行,DOS才能识别出这是有效的执行体。
PE文件的第一个字节起始于一个传统的MS-DOS头部,被称作为IMAGE_DOS_HEADER, 这其实是一个结构。
IMAGE_DOS_HEADER结构讲解:
typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header
WORD e_magic; // Magic number
WORD e_cblp; // Bytes on last page of file
WORD e_cp; // Pages in file
WORD e_crlc; // Relocations
WORD e_cparhdr; // Size of header in paragraphs
WORD e_minalloc; // Minimum extra paragraphs needed
WORD e_maxalloc; // Maximum extra paragraphs needed
WORD e_ss; // Initial (relative) SS value
WORD e_sp; // Initial SP value
WORD e_csum; // Checksum
WORD e_ip; // Initial IP value
WORD e_cs; // Initial (relative) CS value
WORD e_lfarlc; // File address of relocation table
WORD e_ovno; // Overlay number
WORD e_res[4]; // Reserved words
WORD e_oemid; // OEM identifier (for e_oeminfo)
WORD e_oeminfo; // OEM information; e_oemid specific
WORD e_res2[10]; // Reserved words
LONG e_lfanew; // File address of new exe header
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
重点讲解(第一个跟最后一个
e_magic //Majic DOS signature(4Dh 5Ah)
DOS可执行文件标记
一般存放两个字节 4D 和 5A
e_lfanew //offset to start of PE header
指向PE文件头的32位指针
PE文件头(PE Header) 紧挨着DOS stub
PE Header是PE相关结构NT映像头(IMAGE_NT_HEADER)的简称,里面包含着许多PE装载器用到的重要字段