主要涉及,PE文件的两种状态->文件对齐和内存对齐。
节表由n(在标准PE头中有属性标明数量)个IMAGE_SECTION_HEADER结构体(40bytes)组成:
结构如下:
1 typedef struct _IMAGE_SECTION_HEADER { 2 BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; //名字(可改):8bytes的ascii数组 3 union { //当前节的真实大小是多少(对齐前的大小) 4 DWORD PhysicalAddress; 5 DWORD VirtualSize; 6 } Misc; 7 DWORD VirtualAddress; //在内存中的偏移地址 需要加上ImageBase 8 DWORD SizeOfRawData; //在文件中对齐后的大小 可能比Misc大或小,涉及到全局变量有没有初始值的问题,谁大取谁 9 DWORD PointerToRawData; //节区在文件中的偏移 10 DWORD PointerToRelocations; //调试相关 11 DWORD PointerToLinenumbers; //调试相关 12 WORD NumberOfRelocations; //调试相关 13 WORD NumberOfLinenumbers; //调试相关 14 DWORD Characteristics; //节的属性-读 写 执行等等 15 } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
over。