pe中的基址重定位问题

朽木可雕 2013-09-16 08:41:26
pe中的基址重定位

typedef struct {
DWORD virtualAddress;
DWORD sizeOfBlock;
WORD typeOffset;
}IMAGE_BASE_RELOCATION;
为什么要用virtualAddress和typeOffset相加的方式来确定要改变的地址在exe文件中的file offset,而不直接指向file offset 或者只用一个RVA不就可以了么?





demo:

.......
call dword ptr [40200E]
......

如果dll默认被转载在0x400000地址,想在windows决定将它加载到0x870000,windows将如何转换这条指令到指定的内存,在内存中的dump中这条指令会发生变化么,如果变了是如何变的,讲解下原理。
...全文
270 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
朽木可雕 2013-10-09
  • 打赏
  • 举报
回复
引用 3 楼 u012213421 的回复:
未重定位前是call dword ptr [200E]
哦明白了
狠人大帝_ 2013-09-23
  • 打赏
  • 举报
回复
未重定位前是call dword ptr [200E]
朽木可雕 2013-09-18
  • 打赏
  • 举报
回复
引用 1 楼 zara 的回复:
这样做通常情况下比较节省重定位数据的空间吧,尤其是导入函数,将它们集中在一起时,基本上一个项就一个 word 表示了,否则一个项要有一个 dword 即两个 word 了
明白了。确实是
zara 2013-09-17
  • 打赏
  • 举报
回复
这样做通常情况下比较节省重定位数据的空间吧,尤其是导入函数,将它们集中在一起时,基本上一个项就一个 word 表示了,否则一个项要有一个 dword 即两个 word 了

9,506

社区成员

发帖
与我相关
我的任务
社区描述
Windows专区 安全技术/病毒
社区管理员
  • 安全技术/病毒社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧