一、前言
二、PE整体结构
三、DOS头
四、NT头
4.1.文件头
4.2.扩展头
四、NT头
4.1.文件头
4.2.扩展头
五、区段头
六、导出表
七、导入表
八、资源表
九、其他表
五、区段头
概念:
区段头表存储着PE文件主体也就是区段的一些属性。
整个区段头表,是一个结构体数组。
数组中的每个元素,也就是每个结构体,对应着PE文件主体中的一段数据,这段数据成为段或节。
结构体:
这个结构体在winnt.h中可以看到
typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; // 区段的名字,最长8字节 union { DWORD PhysicalAddress; DWORD VirtualSize; } Misc; // 虚拟内存中,会使用的总大小,未对齐 DWORD VirtualAddress; // 区段起始的相对虚拟基址RVA,VA=程序基址+VirtualAddress DWORD SizeOfRawData; // 区段在文件中的大小,进行了文件对齐 DWORD PointerToRawData; // 区段的文件偏移 DWORD PointerToRelocations; DWORD PointerToLinenumbers; WORD NumberOfRelocations; WORD NumberOfLinenumbers; DWORD Characteristics; } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
由结构体可以看出,结构体是40个字节大小。
那整个区段头表,是若干40个字节大小的数据块,加上一个40个字节大小的0结束
常见区段简介:
.text段。一般是代码段。
.data段。一般是数据段。
.bss段。未初始化数据段。比如static变量,有时在函数内才初始化。
.rdata段。只读数据段。比如字符串。
.idata和.edata段。导入表、导出表信息。
.rsrc段。资源段。
那整个区段头表,是若干40个字节大小的数据块,加上一个40个字节大小的0结束
常见区段简介:
.text段。一般是代码段。
.data段。一般是数据段。
.bss段。未初始化数据段。比如static变量,有时在函数内才初始化。
.rdata段。只读数据段。比如字符串。
.idata和.edata段。导入表、导出表信息。
.rsrc段。资源段。
.reloc段。重定位信息段。
VC6程序: 四个区段 .text 代码段 .rdata 导入表 .data 数据段 .rsrc 资源段
VS2008/2013: 五个区段 .text 代码段 .rdata 导入表 .data 数据段 .rsrc 资源段 .reloc
易语言: 四个区段 .text 代码段 .rdata 导入表 .data 数据段 .rsrc 资源段
Delphi:八个区段CODE、DATA、BSS、.idata、.tls、.rdata、.reloc、.rsrc
VB程序:五个区段.text .data .idata .rsrc .reloc
上一篇: 【PE结构】2.NT头、文件头、扩展头
下一篇:
【PE结构】4.导入表