【2021.01.14】PE节表

IMAGE_SECTION_HEADER

#define IMAGE_SIZEOF_SHORT_NAME              8

typedef struct _IMAGE_SECTION_HEADER {
    BYTE    Name[IMAGE_SIZEOF_SHORT_NAME];    //ASCII字符串,节名称,可以自定义,只截取8个
    union {                                   //Misc,是该节在没有对齐前的真实尺寸,该值可以不准确
            DWORD   PhysicalAddress;
            DWORD   VirtualSize;
    } Misc;
    DWORD   VirtualAddress;                   //在内存中的起始位置,加上ImageBase才是在内存中的真正地址
    DWORD   SizeOfRawData;                    //节在文件中对齐后的尺寸
    DWORD   PointerToRawData;                 //节在文件中的偏移,在文件中的起始位置
    DWORD   PointerToRelocations;             //调试相关
    DWORD   PointerToLinenumbers;             //调试相关
    WORD    NumberOfRelocations;              //调试相关
    WORD    NumberOfLinenumbers;              //调试相关
    DWORD   Characteristics;                  //节的属性
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

注意:

Misc 可能比 SizeOfRawData 要大,也可能比它小。在内存中展开时,哪个值大就按照哪个来展开。

IMAGE_SECTION_HEADER->Characteristics

数据位 常量符号 为1时的含义
5 IMAGE_SCN_CNT_CODE 或 00000020h 节中包含代码
6 IMAGE_SCN_CNT_INITIALIZED_DATA 或 00000040h 节中包含已初始化数据
7

IMAGE_SCN_CNT_UNINITIALIZED_DATA 或 00000080h

节中包含未初始化数据
8 IMAGE_SCN_LNK_OTHER 或 00000100h 保留
25 IMAGE_SCN_MEM_DISCARDABLE 或 02000000h 节中的数据在进程开始以后被丢弃,如:.reloc
26 IMAGE_SCN_MEM_NOT_CACHED 或 04000000h 节中的数据不会经过缓存
27 IMAGE_SCN_MEM_NOT_PAGED 或 08000000h 节中的数据不会被交换到硬盘
28 IMAGE_SCN_MEM_SHARED 或 10000000h 节中的数据将被不同的进程所共享
29 IMAGE_SCN_MEM_EXECUTE 或 20000000h 映射到内存后的页面包含可执行属性
30 IMAGE_SCN_MEM_READ 或 40000000h 映射到内存后的页面包含可读属性
31 IMAGE_SCN_MEM_WRITE 或 80000000h 映射到内存后的页面包含可写属性

猜你喜欢

转载自blog.csdn.net/qq_18120361/article/details/112616065