【PE结构】3.区段头

一、前言
二、PE整体结构
三、DOS头
四、NT头
    
4.1.文件头
    
4.2.扩展头
五、区段头
六、导出表
七、导入表
八、资源表
九、其他表


五、区段头

概念:

    区段头表存储着PE文件主体也就是区段的一些属性。
    整个区段头表,是一个结构体数组。
    数组中的每个元素,也就是每个结构体,对应着PE文件主体中的一段数据,这段数据成为段或节。
    
结构体:
    这个结构体在winnt.h中可以看到
    
typedef struct _IMAGE_SECTION_HEADER {
    BYTE    Name[IMAGE_SIZEOF_SHORT_NAME];		// 区段的名字,最长8字节
    union {
            DWORD   PhysicalAddress;			
            DWORD   VirtualSize;
    } Misc;						// 虚拟内存中,会使用的总大小,未对齐
    DWORD   VirtualAddress;				// 区段起始的相对虚拟基址RVA,VA=程序基址+VirtualAddress
    DWORD   SizeOfRawData;				// 区段在文件中的大小,进行了文件对齐
    DWORD   PointerToRawData;				// 区段的文件偏移
    DWORD   PointerToRelocations;				
    DWORD   PointerToLinenumbers;
    WORD    NumberOfRelocations;
    WORD    NumberOfLinenumbers;
    DWORD   Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
    由结构体可以看出,结构体是40个字节大小。
    那整个区段头表,是若干40个字节大小的数据块,加上一个40个字节大小的0结束
    
常见区段简介:
    .text段。一般是代码段。
    .data段。一般是数据段。
    .bss段。未初始化数据段。比如static变量,有时在函数内才初始化。
    .rdata段。只读数据段。比如字符串。
    .idata和.edata段。导入表、导出表信息。
    .rsrc段。资源段。
    .reloc段。重定位信息段。

    VC6程序: 四个区段 .text 代码段  .rdata 导入表 .data 数据段 .rsrc 资源段
    VS2008/2013: 五个区段 .text 代码段  .rdata 导入表 .data 数据段 .rsrc 资源段 .reloc
    易语言: 四个区段 .text 代码段  .rdata 导入表 .data 数据段 .rsrc 资源段
    Delphi:八个区段CODE、DATA、BSS、.idata、.tls、.rdata、.reloc、.rsrc
    VB程序:五个区段.text .data .idata .rsrc .reloc
    

猜你喜欢

转载自blog.csdn.net/chy_chenyang/article/details/80780371
今日推荐