搬迁的概念是什么意思?

Shi*_*ale 14 assembly linker relocation

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

  1. 为什么我们需要重新定位程序和数据?
  2. 究竟是怎么做到的?

如果有人可以用初学者级别的例子来解释,那将会很棒.

bma*_*ies 16

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

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

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

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