<三>从编译器角度理解C++代码编译和链接原理( 二 )


<三>从编译器角度理解C++代码编译和链接原理

文章插图
现在我们需要将给符号分配好的地址 将指令中的这些0地址重新修正
现在我看下链接后的情况符号表情况
<三>从编译器角度理解C++代码编译和链接原理

文章插图
指令情况
<三>从编译器角度理解C++代码编译和链接原理

文章插图
所以现在我们知道 “符号是在什么时候分配地址”, 在链接第一阶段 符号解析成功后
<三>从编译器角度理解C++代码编译和链接原理

文章插图
可执行文件 a.out和 .O文件的组成方式很像,但是还是有一点区别
<三>从编译器角度理解C++代码编译和链接原理

文章插图
在a.out 可执行文件中 增加了 “program headers” , a.out 文件中不是 所有的内容都会加载到内存中的,这个"program headers"中指定了需要加载哪些到内存中
<三>从编译器角度理解C++代码编译和链接原理

文章插图
上图中的 有两个load 就是需要加载到内存中的.
下面我们再看看可执行程序加载到内存过程
<三>从编译器角度理解C++代码编译和链接原理

文章插图

经验总结扩展阅读