0x01 PE文件结构学习总结

Windows下有PE(Portable Executable):可执行文件

COFF(Common Object File Format):通用模板文件格式文件

其中,PE文件结构十分重要。典型结构如下:

Figure 1 illustrates the Microsoft PEexecutable format.


具体在看雪论坛有中文翻译版Microsoft PECOFF规范v8和v8.1中文版

一:MS—DOS占位程序

    只要关注0x3C处,这里存放PE文件签名的偏移地址(相对于该文件的初始地址)

二:PE文件头

   这里存放着该文件的重要信息

   1.签名

      存放四个字节的数据 PE\0\0 (一般从0x3c处就可以索引到)在F0处


  2.PE文件头
  3,PE可选头

    主要注意的是可选文件头中的DataDirectory,其中包含了各个表的信息。几个比较重要的如下

这里可以找到idata的RVA(就是虚拟偏移地址),是从PE文件头结束位置开始算起偏移了104  即(F4H) 244 + 20 +204 =  170(H)

可见,导入表地址为0001A1D8

三:节表

   这里存放节的十分详细的信息,需要十分关注

这里就是一个节表idata

查文档就可以知道 VirtualSize = 0001A00 H 明显导入表落在idata内 PointerToRawData: 7400

这样就可以算导入表的文件中地址了 0001A1D8 - 0001A000 + 7400 = 75D8H

idata节如下


四:各个节

   idata节:这里存放导入到文件里的函数的信息 每5x4个作为一个导入目录表,最后以5x4个空字节结束

    在上面的一个图中 可以知道Import Address Table RVA (Thunk Table) = 0001A098 经计算可以知道 实际的地址在 7498H处。

它的高位是0 所以直接表示RVA

最后得到 一个函数的地址 1A414-1A000+7400=7814H

(一个MessageBox)

导出表和资源目录表其实都类似,结构不同罢了。接下来准备用C++写一个PE分析,知道有python的pefile库十分方便,但是感觉自己对PE还是理解不够,所以自己写一个来深入了解PE。

具体参考 PE文件结构详解(一)基本概念

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值