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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: image_section_header是指PE文件中的一个数据结构,用于描述可执行文件中的一个节(section)的属性和位置信息。它包含了节的名称、大小、起始位置、属性等信息,是PE文件格式中非常重要的一个部分。 ### 回答2: image_section_header是PE文件中的一个数据结构,用于描述每个节区(Section)的属性和信息。它的作用是让操作系统、可执行文件加载器和调试器等工具能够正确地理解和处理PE文件中的各个节区。 image_section_header结构包含多个字段,其中一些重要的字段包括: 1. Name:节区的名称,一般是一个8字节的字符串,用于标识节区的含义,如代码段、数据段等。 2. VirtualSize:虚拟内存中的节区大小,即在内存中占用的空间大小。 3. VirtualAddress:节区在虚拟内存中的起始地址。 4. SizeOfRawData:节区在文件中的大小,即占用的磁盘空间大小。 5. PointerToRawData:节区在文件中的偏移量,指示该节区的数据在文件的什么位置。 6. Characteristics:节区的特征标志,用于描述该节区的属性,如是否可执行、可写、可读等。 通过image_section_header,操作系统可以根据文件中的各个节区的位置和大小来正确加载PE文件的内存布局,保证程序能够正确运行。可执行文件加载器可以根据节区的属性来设置对应的内存区域的访问权限,如只读、读写等。调试器可以根据节区的信息来正确解析可执行文件,定位和调试程序中的错误。 总之,image_section_header是PE文件中重要的数据结构之一,它提供了关于节区的各种属性和信息,让操作系统、可执行文件加载器和调试器能够正确地解析和处理PE文件,保证程序的正确运行和调试。 ### 回答3: image_section_header是一种数据结构,用于描述可执行文件或者DLL文件中的节(section)的属性和信息。 它通常包含以下字段: 1. 节名称(Name):指定该节的名称,如.text、.data等。 2. 节大小(VirtualSize):指定该节在内存中的大小。 3. 节的虚拟地址(VirtualAddress):指定该节在进程的虚拟地址空间中的起始地址。 4. 节的数据地址(PointerToRawData):指定该节在文件中的起始位置的偏移量。 5. 节的数据大小(SizeOfRawData):指定该节在文件中的大小。 6. 节的属性(Characteristics):通常是一个标志位的集合,用于描述该节的特性,如可执行代码、只读数据、已初始化数据等。 image_section_header的作用是让操作系统和加载器能够准确地定位和加载可执行文件或者DLL文件中的节。通过解析image_section_header中的字段,操作系统和加载器可以了解每个节的大小、位置以及属性等信息,从而正确地将节映射到进程的虚拟地址空间中。 在运行时,程序可以通过访问image_section_header中的字段来获取和修改节的属性和信息。例如,可以根据节的名称来定位和修改特定节的内容,也可以通过修改节的属性来改变节的行为,如修改代码节的属性为只读,从而防止恶意代码的注入。 总之,image_section_header是一种重要的数据结构,用于描述可执行文件或DLL文件中的节的属性和信息,为操作系统和加载器提供了必要的信息以正确地加载和执行可执行文件或者DLL文件中的各个节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值