IMAGE_SECTION_HEADER
typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; union { DWORD PhysicalAddress;//不用关心,始终是NULL DWORD VirtualSize; //指出实际的、被使用的区块的大小(也就是区块的数据没有对齐处理的实际大小)16H个 } Misc; DWORD VirtualAddress; //该块装载到内存中的RVA DWORD SizeOfRawData; //该块在磁盘文件中所占的大小 DWORD PointerToRawData;//该块在磁盘文件中的偏移 DWORD PointerToRelocations;//在EXE文件中无意义 DWORD PointerToLinenumbers; WORD NumberOfRelocations;//由pointerToRelocations指向的重定位的数目 WORD NumberOfLinenumbers; DWORD Characteristics; //块属性 }; BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; 8个字节大小 .text 2E74657874000000 直接输入不用管大端小端序 .rdata 2E72646174610000 直接输入不用管大端小端序 .data 264617461000000 直接输入不用管大端小端序 DWORD VirtualSize .text 一种方法是填入默认的 1000H对齐 一种是直接指定大小00000016H .rdata 一种方法是填入默认的 1000H对齐 一种是直接指定大小00000052H .data 一种方法是填入默认的 1000H对齐 一种是直接指定大小0000000BH =HELLO WORLD 11个字节 DWORD VirtualAddress; //该块装载到内存中的RVA: 我们知道整个PE结构映射到内存中因为内存对齐为1000H大小,那么.text跟着PE结构 那么值就是 .text 00001000H .rdata 00002000H .data 00003000H DWORD SizeOfRawData; //该块在磁盘文件中所占的大小: 因为映射到内存中的区块对齐默认是200H 所以这个值是 00000200H DWORD PointerToRawData;//该块在磁盘文件中的偏移: 因为PE结构大小是220H 但是因为区块对齐所以要400H大小来装载PE结构,所以 .text 00000400H 开始 .rdata 00000600H 开始 .data 00000800H 开始 DWORD Characteristics; 各二进制位表示的意义如下: .text 20000060H 直接输入不用管大端小端序 .rdata 40000040H 直接输入不用管大端小端序 .data C0000040H 直接输入不用管大端小端序 bit 5 (IMAGE_SCN_CNT_CODE),置1,节内包含可执行代码。 bit 6 (IMAGE_SCN_CNT_INITIALIZED_DATA)置1,节内包含的数据在执行前是确的。 bit 7 (IMAGE_SCN_CNT_UNINITIALIZED_DATA) 置1,本节包含未初始化的数据,执行前即将被初始化为0。一般是BSS. bit 9 (IMAGE_SCN_LNK_INFO) 置1,节内不包含映象数据除了注释,描述或者其他文档外,是一个目标文件的一部分,可能是针对链接器的信息。比如哪个库被需要。 bit 11 (IMAGE_SCN_LNK_REMOVE) 置1,在可执行文件链接后,作为文件一部分的数被清除。 bit 12 (IMAGE_SCN_LNK_COMDAT) 置1,节包含公共块数据,是某个顺序的打包的数。 bit 15 (IMAGE_SCN_MEM_FARDATA) 置1,不确定。 bit 17 (IMAGE_SCN_MEM_PURGEABLE) 置1,节的数据是可清除的。 bit 18 (IMAGE_SCN_MEM_LOCKED) 置1,节不可以在内存内移动。 bit 19 (IMAGE_SCN_MEM_PRELOAD)置1, 节必须在执行开始前调入。 Bits 20 to 23指定对齐。一般是库文件的对象对齐。 bit 24 (IMAGE_SCN_LNK_NRELOC_OVFL) 置1, 节包含扩展的重定位。 bit 25 (IMAGE_SCN_MEM_DISCARDABLE) 置1,进程开始后节的数据不再要。 bit 26 (IMAGE_SCN_MEM_NOT_CACHED) 置1,节的 数据不得缓存。 bit 27 (IMAGE_SCN_MEM_NOT_PAGED) 置1,节的 数据不得交换出去。 bit 28 (IMAGE_SCN_MEM_SHARED) 置1,节的数据在所有映象例程内共享,如DLL的初始化数据。 bit 29 (IMAGE_SCN_MEM_EXECUTE) 置1,进程得到“执行”访问节内存。 bit 30 (IMAGE_SCN_MEM_READ) 置1,进程得到“读出”访问节内存。 bit 31 (IMAGE_SCN_MEM_WRITE)置1,进程得到“写入”访问节内存。