PE节表
每一个节表里都是一个结构体数组
#define IMAGE_SIZEOF_SHORT_NAME 8
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; //ASCLL字符串,可以自定义,只截取8个 (当前节的名字)
union { //Misc 双字是该节在没有对齐前的真实尺寸,该值可以不准确
DWORD PhysicalAddress;
DWORD VirtualSize;
} Misc;
DWORD VirtualAddress; //在内存中的偏移地址,加上lmageBase才是在内存中的真正地址
DWORD SizeOfRawData; //节在文件中对齐后的尺寸
DWORD PointerToRawData; //节在文件中的偏移
DWORD PointerToRelocations; //调试相关
DWORD PointerToLinenumbers; //调试相关
WORD NumberOfRelocations; //调试相关
WORD NumberOfLinenumbers; //调试相关
DWORD Characteristics; //节的属性
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
DWORD Characteristics 值的属性
5 IMAGE_SCN_CODE //节中包含代码
6 IMAGE_SCN_CNT_INTIALIZED_DATA //节中包含已初始化数据
7 IMAGE_SCN_CUT_UNINITIALIZED_DATA //节中包含未初始化数据
8 IMAGE_SCN_LNK_OTHER //保留供将来使用
25 IMAGE_SCN_MEM_DISCARDABLE //节中的数据在进程开始以后将被丢弃,如.reloc
26 IMAGE_SCN_MEM_NOT_CACHED //节中的数据不会经过缓存
27 IMAGE_SCN_MEM_NOT_PAGED //节中的数据不会被交换到磁盘
28 IMAGE_SCN_MEM_SHARED //表示节中的数据将被不同的进程所共享
29 IMAGE_SCN_MEM_EXECUTE //映射到内存后的页面包含可执行的属性
30 IMAGE_SCN_MEM_READ //映射到内存后的页面包含可读属性
31 IMAGE_SCN_MEM_WRITE //映射到内存后的页面包含可写属性
节的属性
60000020(转成二进制)
0110 0000 0000 0000 0000 0000 0010 0000
第六位为1:节中包含已初始化数据
第三十位为1:映射到内存后的页面包含可读属性
第三十一位为1:映射到内存后的页面包含可写属性