C/C++ 您当前所在位置:首页 > C/C++ > PE结构节表解析

PE结构节表解析

陈成 陈成 2020-07-21 20:53:18 C/C++ 170人已围观

简介 在PE结构关键字段说明中介绍了DOS头、标准PE头和可选PE头中的部分字段,但这还不够,这里再介绍一下节表。节表在可选PE头的后面,也就是从开始位置加上DOS头、标准头和可选头就是节表的信息。节表说明了各个节的信息,比如名字、大小、位置等等信息。

在PE结构关键字段说明中介绍了DOS头、标准PE头和可选PE头中的部分字段,但这还不够,这里再介绍一下节表。节表在可选PE头的后面,也就是从开始位置加上DOS头、标准头和可选头就是节表的信息。节表说明了各个节的描述信息,比如名字、大小、位置等等信息。

先看看下面的结构

#define IMAGE_SIZEOF_SHORT_NAME     8
typedef struct _IMAGE_SECTION_HEADER {
    BYTE    Name[IMAGE_SIZEOF_SHORT_NAME];
    union {
            DWORD   PhysicalAddress;
            DWORD   VirtualSize;
    } Misc;
    DWORD   VirtualAddress;
    DWORD   SizeOfRawData;
    DWORD   PointerToRawData;
    DWORD   PointerToRelocations;
    DWORD   PointerToLinenumbers;
    WORD    NumberOfRelocations;
    WORD    NumberOfLinenumbers;
    DWORD   Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

1、Name,占8个字节,ASCII码来标识定义节的名称,以'\0'结尾,内容可以随便改。但要注意,该名称并不一定是'\0'结尾,如果是这样的话系统会截取8个字节来处理。

2、Misc,是一个联合体,占四个字节,里面两个属性用哪个都行,这里设定两个属性只是为了可读性更好一些。这个成员表示的意思是该节在内存中对齐前的大小,这个值可以改。

3、VirtualAddress,节区在内存中的偏移,真实地址还要再加上ImageBase,换句话说就是与ImageBase相差的距离。

4、SizeOfRawData,该节在文件对齐后的大小。

5、PointerToRawData,节区在文件中的偏移,也就是说这个节离文件开始有多远。

6、PointerToRelocations,在obj文件中使用,对exe无意义。

7、PointerToLinenumbers,行号表的位置,调试的时候使用。

8、NumberOfRelocations,在obj文件中使用,对exe无意义。

9、NumberOfLinenumbers,行号表中行号的数量,调试的时候使用。

第6到第9个属性不重要,不用管。

10、Characteristics,节的属性,四个字节,32位,根据每位的信息来说明该节不同的信息,具体可查看相关资料。

文章评论

发送

站点信息

  • 上线时间:2020年05月30日
  • 网站程序:自建框架
  • 博客模板:今夕何夕
  • 文章统计43篇文章
  • 评论统计0条评论
  • 留言统计0条留言
  • 统计数据:百度统计