一、前言
二、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.导入表
本文详细介绍了PE文件中的区段头,包括其在PE结构中的位置、作用和重要属性。区段头存储了PE文件主体的属性,如代码段(.text)、数据段(.data)、未初始化数据段(.bss)、只读数据段(.rdata)等。文章还列举了不同编译器生成的PE文件中常见的区段配置。

617

被折叠的 条评论
为什么被折叠?



