考虑下列生成二进制的过程,编译器被用来生成单个单元的目标代码,链接器被用来将多个目标单元合并成一个程序二进制,链接器如何改变指令和数据到内存地址的绑定?需要什么信息从编译器传递给链接器,以协助完成链接

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010833547/article/details/64129176

考虑下列生成二进制的过程,编译器被用来生成单个单元的目标代码,链接器被用来将多个目标单元合并成一个程序二进制,链接器如何改变指令和数据到内存地址的绑定?需要什么信息从编译器传递给链接器,以协助完成链接器的内存绑定



百度了好多个个个都不写答案

那就由我来表态吧:


答案:编译器需要传递每个编译后的二进制代码的段表,链接器将所有二进制文件的段表合并,这就是链接过程!!!
之后链接器连接后的可执行文件怎么在内存里面完成实际的内存地址绑定呢?(这里说的实际内存可能是物理内存地址,也可能只是页虚拟地址)

这很简单,只要将分配到的内存地址把段表(一张内存映射表)的value补全可以了。这就是内存绑定过程。

展开阅读全文