首页
论坛
课程
招聘
[求助]基址重定位表的RVA和导入表的RVA都比PE文件大是怎么回事?
2019-11-13 19:03 1540

[求助]基址重定位表的RVA和导入表的RVA都比PE文件大是怎么回事?

2019-11-13 19:03
1540
基址重定位表的RVA和导入表的RVA都比PE文件大是怎么回事,文件大小只有9216bytes,就不能通过RVA,也就是文件偏移来找到导入表的位置和重定位表了,有人能解释一下吗?非常感谢了。

[2022夏季班]《安卓高级研修班(网课)》月薪两万班招生中~

收藏
点赞1
打赏
分享
最新回复 (4)
雪    币: 3896
活跃值: 活跃值 (1148)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
htpidk 活跃值 2019-11-13 22:34
2
0
找出这两个表在哪个区段然后计算出相对于区段的偏移,这个偏移加上这两个表所属区段在文件中的位置就是你想要的了,内存里映像大小比文件大小要大很正常
雪    币: 247
活跃值: 活跃值 (148)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
youngseaz 活跃值 2019-11-13 22:58
3
0
htpidk 找出这两个表在哪个区段然后计算出相对于区段的偏移,这个偏移加上这两个表所属区段在文件中的位置就是你想要的了,内存里映像大小比文件大小要大很正常
我看书和别人的参考是这样的:IMAGE_BASE_RELOCATION数据的位置位于PE文件DataDirectory[5]的RVA记录的文件偏移处,这样对吗?这里实在不是很懂,还请多多指教一下。或者我这样问:怎么在PE文件中确定IMAGE_BASE_RELOCATION结构体的位置。谢谢你了。
雪    币: 3896
活跃值: 活跃值 (1148)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
htpidk 活跃值 2019-11-13 23:13
4
0
就以这个dll为例,重定位表的RVA是0x44120,再看文件的区段信息

很明显0x44120 是在.rsrc区段,而且相对于这个区段的偏移是44120-44000=120,而这个区段在文件中的偏移是0x8000,因此重定位表在文件中的偏移是8000+120=8120
雪    币: 3896
活跃值: 活跃值 (1148)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
htpidk 活跃值 2019-11-13 23:17
5
0
因为对齐原因,所以文件在硬盘的大小比在内存中的大小要小很正常。RVA和FOA互相转换时,只要找到该表所属的区段即可,表相对于区段的偏移不管是在内存里还是文件里都是一样的
游客
登录 | 注册 方可回帖
返回