搬迁的概念是什么意思?

时间:2013-05-05 15:00:54

标签: assembly linker relocation

我是装配新手,因此想要了解更多关于搬迁的概念。

  1. 为什么我们需要重新定位程序,数据?
  2. 究竟是怎么做到的?
  3. 如果有人能用初学者水平的例子来解释,那就太好了。

1 个答案:

答案 0 :(得分:15)

汇编程序有一个要查看的源文件。它必须基于该源文件构建存储器映像。因此,代码为0,数据为0。结果将进入目标文件。

现在,链接器出现并需要将许多目标文件组合成可执行文件(或内核映像,或其他)。它不能让所有人都在0,他们会重叠。因此,它必须重新定位地址,以将每个目标文件的数据值分配给一个唯一的范围。

然后,将图像加载到虚拟内存中,操作系统可能有充分的理由想要使用“0”以外的地址作为基本虚拟地址。因此,在运行时,它希望再次重新定位所有内容。

最后,如果涉及共享库,汇编器和链接器都不知道它们在运行环境中的位置,因此必须重新定位对它们的引用。