首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在可执行文件中需要重新定位

在可执行文件中需要重新定位
EN

Stack Overflow用户
提问于 2012-03-15 00:36:40
回答 2查看 1.7K关注 0票数 3

为什么当exe中的每个元素都位于与镜像底部的相对偏移量时,还需要重定位表?我的意思是,即使镜像被0X60000的正偏移量打乱,为什么要有重定位表,因为我们无论如何都会使用相对于新基址的RVA?

EN

回答 2

Stack Overflow用户

发布于 2012-03-15 00:51:15

关键是代码不会通过RVA或whats- or -ever访问全局变量(全局变量和函数地址)。它们通过它们的绝对地址进行访问。并且在可执行文件未被加载到其优选地址的情况下,该地址应该被改变。

重定位表正是由这些位置组成的。这是一个表,其中列出了应该根据实际基址和首选基址的差异进行调整的所有位置。

,EXEs,与DLL相比,DLL通常不包含重定位表。这是因为它们是映射到地址空间的第一个模块,因此它们可能总是在它们的首选地址加载。DLL的情况则不同,它通常包含重定位表。

P.S.在Windows 7EXE中,可能包含重定位表,以防它们被加载到随机地址。这是一个安全特性(可怜的IMHO)

编辑:

值得一提的是,函数地址并不总是通过其绝对值来访问的。关于x86分支指令(如jmpcall等)使用相对偏移量的“短”格式。这样的地方不需要在移位表中提到。

票数 3
EN

Stack Overflow用户

发布于 2012-03-15 04:36:58

对于EXE文件,不需要重定位表,因为可执行映像始终在其首选地址加载。可以安全地剥离重定位表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9706099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档