我是装配新手,因此想要了解更多关于搬迁的概念。
如果有人能用初学者水平的例子来解释,那就太好了。
答案 0 :(得分:15)
汇编程序有一个要查看的源文件。它必须基于该源文件构建存储器映像。因此,代码为0,数据为0。结果将进入目标文件。
现在,链接器出现并需要将许多目标文件组合成可执行文件(或内核映像,或其他)。它不能让所有人都在0,他们会重叠。因此,它必须重新定位地址,以将每个目标文件的数据值分配给一个唯一的范围。
然后,将图像加载到虚拟内存中,操作系统可能有充分的理由想要使用“0”以外的地址作为基本虚拟地址。因此,在运行时,它希望再次重新定位所有内容。
最后,如果涉及共享库,汇编器和链接器都不知道它们在运行环境中的位置,因此必须重新定位对它们的引用。