逆向工程之PE文件结构

本文详细介绍了PE文件格式,包括DOS头、PE头、COFF文件头、可选PE头和区块表(节表)的内容。重点讲解了PE头中的数据目录,特别是导出表和导入表的结构及其在程序执行中的作用。同时,讨论了区块(节)的内存映射属性,如内存页属性、节的偏移地址和尺寸。文章适合对逆向工程和PE文件结构感兴趣的读者。
摘要由CSDN通过智能技术生成

一、 典型的PE文件格式

 1 .1 PE文件布局如下:

       文件开头是一个DOS stub程序它非常简单,用于在DOS里运行应用程序,主要是向后兼容,对于逆向而言最重要的部分是一个指向PE头部的偏移量,从文件头开始向后偏移0x3c处就是这个偏移量(DOS头共64个字节最后4个字节为PE头偏移量),指示了从文件开头偏移多少是pe头(下图中0x0100为PE头开始的地方)。

       DOS 头部本身只存在于映像文件里,不会出现在其他文件里,如目标文件等。 DOS 文件头的一个特性是其开始的2个字节是“魔术”字节,一般是字符 M和Z ,表明它是 DOS 映像。受此及其他因素启发,我们可以识别一个文件是否是 PE 。跳过 DOS 头(实际上它对我们没有什么用处)就是 PE 头,DOS头和PE头中间的空余位置是一些垃圾值以及编译器填充的一些“is program cannot be run in DOS mode.”或“This program must be run under Win32”等信息 。

    PE头以另外的字段标识 PE 文件的开始,通常是 PE\0\0 (这里的\0 是二进制的 0 ) ,在此之后是COFF 文件头。PE头+COFF文件头称为标准PE头共24个字节

 

     

      COFF文件头第一个字段是机器类型,它有 2 字节长,几乎总是 0x8664( AMD64 )或 0x14c ( IA32 ) ,很少是 0x200 ( IA64 , 安腾处理器)。之后是又一个 2 字节的字段,指示这个文件有多少个区段。按微软的说法,它的最大值为 96 。紧接着是4字节的时间戳,下一个字段比较有趣,是一个指向 COFF 符号表的文件偏移 。作为一名逆向工程师,几乎可以肯定碰到的文件并没有符号表,因此,这个字段为 0 ,表示没有符号表。然而,如果有符号表的话,它的偏移将在此指定。在这个字段之后是一个 4 字节的字段,指示有多少符号。最后是两个标准的 COFF 字段.都是 2 个字节,一个指示可选头部的大小(只在映像中存在上图中的可选头部大小为0x00E0共224个字节),另一个字段称为特性,定义文件中特殊的属性。  

1.1.1 可选PE头

    可选PE头紧接着COFF文件头,其大小在COFF文件头中给出:大小为E0H即224字节

    可选头部的布局:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值