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,进程得到“写入”访问节内存。
转自:https://www.cnblogs.com/IMyLife/p/4826090.html