当前位置 博文首页 > KOOKNUT的博客:PE文件学习--Section头部
IMAGE_NT_HEADERS后紧跟着节表,节表中节的数量由IMAGE_FILE_HEADER.NumberOfSections来定义,它由许多个节表项IMAGE_SECTION_HEADER组成:
#define IMAGE_SIZEOF_SHORT_NAME 8
typedef struct _IMAGE_SECTION_HEADER
{
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];//8字节
union {
DWORD PhysicalAddress;//物理地址
DWORD VirtualSize;//真实长度
} Misc;
DWORD VirtualAddress;
DWORD SizeOfRawData;
DWORD PointerToRawData;
DWORD PointerToRelocations;
DWORD PointerToLinenumbers;
WORD NumberOfRelocations;
WORD NumberOfLinenumbers;
DWORD Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
Name:8字节的大小,ASCII字符串的形式,以’\0’结尾的字符串,所以比如我们要自己写一个节,要注意节区名字的命名,如果超出8个字节,会被’\0’截断。
Misc:节的数据在没有对齐前的真实尺寸。
VirtualAddress:节区的RVA。
SizeOfRawData:节在文件粒度对齐后(磁盘扇区大小0x200)的大小。
PointerToRawData:节区起始数据在文件中的偏移。
PointerToRelocations:指向重定位表的指针。
PointerToLinenumbers:行号表的位置,没怎么用过。
NumberOfRelocations:重定位表的个数。
Characteristics:节的属性,有以下属性,图来自《Windows PE权威指南》:
节表之后便是节区了,所有PE文件真正的内容都在节区存放,并且其存放是以节的起始地址来排列(一般text节是第一个节区),不是根据节区的名字的字母次序来排序。后面会细细说各个节区的内容。
“工欲善其事,必先利其器。”
参考书籍:
《Windows PE权威指南》