在阅读重定位绝对引用,共享库和与位置无关的代码时,我很困惑。我假设我对单个处理地址空间还不够了解。
在我的书中,作者通过插入全局变量/函数的运行时地址来讨论解决绝对符号引用的链接。链接器如何知道这一点?我可以编译,链接,创建我的可执行文件,并在不同的时间运行它。我猜它每次都不会被加载到内存中的相同位置,所以链接器怎么可能知道绝对的运行时地址变量/函数?
答案 0 :(得分:1)
你是对的。通常,链接器不知道绝对地址并生成所谓的可重定位地址。在一个非常简单的模型中,可重定位地址在运行时绑定到绝对地址。
答案 1 :(得分:1)
链接器处理虚拟地址。绝对地址是绝对虚拟地址。
每个流程实例都具有完全相同的虚拟地址空间。