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