首页
社区
课程
招聘
[求助]学习PE文件格式,被RVA给难住了。(已解决)
发表于: 2006-7-26 06:30 4325

[求助]学习PE文件格式,被RVA给难住了。(已解决)

2006-7-26 06:30
4325
看了一整通宵,看的头晕眼花,结果还是没弄明白。按照《“PE文件格式”1.9版 完整译文》上说的。我打开一个程序,易语言编写非独立编译。
我想找在反汇编窗口中地址栏显示0x40345E这行代码在WinHex中显示的位置。对照着文章上说的开始算。后面附摘原文。
已知优先载入地址0x400000,开始处理RVA 0x345E。该行代码所在区段的地址OD中显示0x403000大小1000,文件中按照0x200字节边界对齐,这个段在文件中开始于偏移0x2800(不知道这里我理解错了没),计算文件中的位置。公式:0x2800+0x345E-0x3000=0x2C5E
可是不对,用WinHex跳到2C5E,提示不包含这个偏移。我自己在WinHex里搜索到的实际对应地址是0xE5E.我那里算错了?正确的计算公式是什么?
Stud_PE中显示如下信息
入口点rva:00001000
入口点raw:00000400
映像 基址:00400000
映像 大小:00005000
区段 对齐:00001000
文件 对齐:00000200
取段 个数:00000004
头文件大小:00000400
这些够了吧...
---------------------------------------------------------------------

下面是文章该部分原文。

PE格式大量地使用所谓的RVA(相对虚拟地址)。一个RVA,亦即一个“Relative Virtual Addresses(相对虚拟地址)”,是在你不知道基地址时,被用来描述一个内存地址的。它是需要加上基地址才能获得线性地址的数值。基地址就是PE映象文件被装入内存的地址,并且可能会随着一次又一次的调用而变化。

例如:假若一个可执行文件被装入的地址是0x400000,并且从RVA 0x1560处开始执行,那么有效的执行开始处将位于0x401560地址处。假若它被装入的地址为0x100000,那么执行开始处就位于0x101560地址处。

因为PE-文件中的各部分(各节)不需要像已载入的映象文件那样对齐,事情变得复杂起来。例如,文件中的各节常按照512(十六进制的0x200----译者注)字节边界对齐,而已载入的映象文件则可能按照4096(十六进制的0x1000----译者注)字节边界对齐。参见下面的“SectionAlignment(节对齐)”和“FileAlignment(文件对齐)”。

因此,为了在PE文件中找到一个特定RVA地址的信息,你得按照文件已被载入时的那样来计算偏移量,但要按照文件的偏移量来跳过。

试举一例,假若你已知道执行开始处位于RVA 0x1560地址处,并且想从那里开始的代码处反汇编。为了从文件中找到这个地址,你得先查明在RAM(内存)中各节是按照4096字节对齐的,并且“.code”节是从RVA 0x1000地址处开始,有16384字节长;然后你才知道RVA 0x1560地址位于此节的偏移量0x560处。你还要查明在文件中那节是按512字节边界对齐,且“.code”节在文件中从偏移量0x800处开始,然后你就知道在文件中代码的执行开始处就在0x800+0x560=0xd60字节处。

然后你反汇编它并发现访问一个变量的线性地址位于0x1051d0处。二进制文件的线性地址在装入时将被重定位,并常被假定使用的是优先载入地址。因为你已查明优先载入地址为0x100000,因此我们可开始处理RVA 0x51d0了。因数据节开始于RVA 0x5000处,且有2048字节长,所以它处于数据节中。又因数据节在文件中开始于偏移量0x4800处,所以该变量就可以在文件中的0x4800+0x51d0-0x5000=0x49d0处找到。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
求各位师傅、师兄、师姐,帮我做个详细的解释吧。感觉上这个东西必须掌握。。。。。
2006-7-26 07:35
0
雪    币: 44229
活跃值: (19965)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
原理看看这帖:
http://bbs.pediy.com/showthread.php?s=&threadid=18022

平时一般都是用工具转换的,如LordPE等
2006-7-26 09:14
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
坛主出手相助,感激感激,谢谢谢谢。
2006-7-26 11:25
0
游客
登录 | 注册 方可回帖
返回
//