exe中需要重定位

问题描述 投票:2回答:3

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

windows operating-system executable exe virtual-address-space
3个回答
2
投票

关键是代码无法通过RVA或历史记录访​​问全局变量(全局变量和函数地址)。通过其absolute地址访问它们。如果未将可执行文件加载到其首选地址,则应更改此地址。

重定位表正是由这些位置组成。这是一张所有表的表,应根据实际基址与首选地址的差额来调整。

BTW,EXE,与通常do n't的DLL相反,它包含重定位表。这是因为它们是要映射到地址空间的第一个模块,因此它们可能始终会加载到其首选地址。 DLL的情况有所不同,DLL通常确实包含重定位表。

P.S。在Windows 7中,EXE可能包含重定位表,以防它们倾向于在随机地址处加载。这是一项安全功能(可怜的恕我直言)

编辑:

应该提到的是,函数地址并不总是通过其绝对值来访问。在x86上,分支指令(例如jmpcall等)具有“短”格式,可用于相对偏移量。在重新定位表中无需提及这些地方。


1
投票

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


0
投票

抱歉,有些困惑。我以为只有“ com”文件总是加载在它们的首选位置。

© www.soinside.com 2019 - 2024. All rights reserved.