5 节(section)头
从图3可以看出,PE文件的NT头之后就是节(section)头,每个节头的大小是40字节。在“4.2 IMAGE_FILE_HEADER”中提到,本PE文件包含9个节,可以从图3中找到这9个节对应的节头。表1列出了各节头的对应节的内容。
表1 节头对应节的内容
节名 | 内容 | 节名 | 内容 |
.bss | 未初始化的数据 | .data | 代码节 |
.edata | 导出表 | .idata | 导入表 |
.pdata | 异常信息 | .rdata | 只读的已初始化数据(常量) |
.reloc | 重定位信息 | .rsrc | 资源目录 |
.sbss | 与GP相关的未初始化数据 | .sdata | 与GP相关的已初始化数据 |
.text | 默认代码节 | .idlsym | 包含已注册的SEH,以支持IDL |
5.1 节头的格式
在PEview左侧的树形控件中选择IAMGE_SECTION_HEADER.text,即默认代码节的节头,在右侧可以看到默认代码节的节头格式,如图11所示。
图11 IAMGE_SECTION_HEADER.text结构
其中,Name表示节头的名称,其大小为8个字节;Virtual Size表示节头对应的节的大小,其大小为4个字节;RVA是Relative Virtual Address的简称,即相对虚拟地址,指定了节头对应节的RVA,其大小为4个字节;Size of Raw Data指的是磁盘文件中已经初始化数据的大小,其大小为4个字节;Pointer to Raw Data、Pointer to Relocations和Pointer to Line Numbers分别保存了节中数据起始地址、重定位项起始地址和行号信息数量的地址,大小均为4个字节;Number of Relocations和Number of Line Numbers分别表示节中重定位项的数量和行号信息的数量,大小均为2个字节,Characteristics是描述节特征的标志,大小为4个字节。
5.2 Characteristics节特征格式
在“5.1 节头的格式”中提到,Characteristics是描述节特征的标志,其大小为4个字节,共32位,每位的含义如表2所示。
表2 Characteristics各位含义
位数 | 含义 | 位数 | 含义 |
1-5 | 未使用 | 26 | 此节可以在需要时被丢弃 |
6 | 此节包含可执行代码 | 27 | 此节不能被缓存 |
7 | 此节包含已初始化的数据 | 28 | 此节不能被交换到页面文件中 |
8 | 此节包含未初始化的数据 | 29 | 此节可以在内存中共享 |
9-15 | 未使用 | 30 | 此节可以作为代码执行 |
16 | 此节包含通过全局指针来引用的数据 | 31 | 此节可读 |
17-24 | 未使用 | 32 | 此节可写 |
25 | 此节包含扩展的重定位信息 |
|
|
从图11可以看出,该PE文件的Characteristics的值是0x20000060,即10 0000 0000 0000 0000 0000 0110 0000,对应表2可以看出,该PE文件的默认代码节中包含了可执行代码、已初始化数据,并且该节可以作为代码执行。