pe字段总结(持续更新中...)

pe字段总结(持续更新中...)

首先放一张pe文件结构图

pe文件结构大致分为以下几个部分

DOS头是用来兼容MS-DOS操作系统的NT头包含windows PE文件的主要信息节表:是PE文件后续节的描述节:每个节实际上是一个容器,可以包含代码、数据等等,每个节可以有独立的内存权限,比如代码节默认有读/执行权限,节的名字和数量可以自己定义。在学习pe文件结构中,熟悉文件结构图非常重要,下面我们就来一起学习一下。

DOS头

typedef struct _IMAGE_DOS_HEADER { // DOS .EXE headerWORD e_magic; // 一个WORD类型,值是一个常数0x4D5A,用文本编辑器查看该值位‘MZ’,可执行文件必须都是’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; //Offset to start of PE header 指向PE文件头 } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

PE文件头

IMAGE_NT_HEADERS STRUCTDWORD Signature PE文件标识IMAGE_FILE_HEADER FileHeader pe标准文件头IMAGE_OPTIONAL_HEADER32 OptionalHeaderIMAGE_NT_HEADERS ENDS

pe标准文件头

typedef struct_IMAGE_FILE_HEADER{WORD Machine; //可以运行在什么cpu上,任意: 0 Intel 386以及后续: 14C x86: 8864WORD NumberOfSections; //表示节的数量(一共有多少个节)DWORD TimeDataStamp; //编写器填写的时间戳 与文件属性里面(创建时间、修改时间)无关DWORD PointerToSymbolTable //调试相关DWORD PointerOfSymbols; //调试相关WORD SizeOfOptionalHeader //可选PE头的大小(32位PE文件; 0xE0 64位PE文件: 0xF0)WORD Characteristics; //文件属性}IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

pe可选文件头

//32位的可选pe头长度为E0, 64位的可选pe头长度为F0

WORD Magic; * 说明文件类型:10B 32位下的PE文件 20B 64位下的PE文件BYTE MajorLinkerVersion;BYTE MinorLinkerVersion;DWORD SizeOfCode;* 所有代码节的和,必须是FileAlignment的整数倍 编译器填的 没用DWORD SizeOfInitializedData;* 已初始化数据大小的和,必须是FileAlignment的整数倍 编译器填的 没用DWORD SizeOfUninitializedData;* 未初始化数据大小的和,必须是FileAlignment的整数倍 编译器填的 没用DWORD AddressOfEntryPoint;* 程序入口DWORD BaseOfCode;* 代码开始的基址,编译器填的 没用DWORD BaseOfData;* 数据开始的基址,编译器填的 没用DWORD ImageBase;* 内存镜像基址DWORD SectionAlignment;* 内存对齐DWORD FileAlignment;* 文件对齐WORD MajorOperatingSystemVersion;WORD MinorOperatingSystemVersion;WORD MajorImageVersion;WORD MinorImageVersion;WORD MajorSubsystemVersion;WORD MinorSubsystemVersion;DWORD Win32VersionValue;DWORD SizeOfImage;* 内存中整个PE文件的映射的尺寸,可以比实际的值大,但必须是SectionAlignment的整数倍DWORD SizeOfHeaders;* 所有头+节表按照文件对齐后的大小,否则加载会出错DWORD CheckSum;* 校验和,一些系统文件有要求.用来判断文件是否被修改.WORD Subsystem;WORD DllCharacteristics;DWORD SizeOfStackReserve;* 初始化时保留的堆栈大小DWORD SizeOfStackCommit;* 初始化时实际提交的大小DWORD SizeOfHeapReserve;* 初始化时保留的堆大小DWORD SizeOfHeapCommit;* 初始化时实践提交的大小DWORD LoaderFlags;DWORD NumberOfRvaAndSizes;* 目录项数目,剩余结构体的数量

相关推荐

linux 两个炸服务器的恐怖指令(避坑)
在哪个应用商店能下载365

linux 两个炸服务器的恐怖指令(避坑)

📅 06-30 👁️ 1953
中超第13轮 浙江队vs武汉三镇
在哪个应用商店能下载365

中超第13轮 浙江队vs武汉三镇

📅 07-01 👁️ 8034