【发布时间】:2013-04-29 10:42:00
【问题描述】:
我是组装新手,因此想更多地了解搬迁的概念。
- 为什么我们需要重新定位程序、数据?
- 具体是怎么做的?
如果有人能用初学者级别的例子来解释,那就太好了。
【问题讨论】:
-
你的实际编程问题是什么?您的程序是否因为重定位问题而无法运行?
-
What do linkers do?的可能重复
标签: assembly linker relocation
我是组装新手,因此想更多地了解搬迁的概念。
如果有人能用初学者级别的例子来解释,那就太好了。
【问题讨论】:
标签: assembly linker relocation
汇编器有一个源文件可供查看。它必须基于该源文件构建内存映像。所以它以 0 开头的代码,也以 0 开头的数据。结果进入目标文件。
现在,链接器出现了,它需要将许多目标文件组合成一个可执行文件(或内核映像,或其他)。它不能让每个人都处于 0,它们会重叠。因此它必须重新定位地址以将每个目标文件的数据价值分配到一个唯一的范围。
然后,图像被加载到虚拟内存中,操作系统可能有充分的理由想要使用“0”以外的地址作为基本虚拟地址。因此,在运行时,它想再次重新定位所有内容。
最后,如果涉及到共享库,汇编器和链接器都不知道它们在运行环境中的位置,因此必须重新定位对它们的引用。
【讨论】: