无题
在系统上运行程序
链接
- gcc编译链接程序:cpp预处理器预处理源文件,cc1编译器编译.i文件为.S文件,as汇编器将.S文件变为可重定位目标文件.o,最后运行ld链接器,创建一个可执行程序
- 执行./a.out,shell调用加载器函数,将可执行文件的.text和.data复制到内存并跳转到该程序开头
解析多重定义的全局符号
- 规则
- 不允许多个同名的强符号
- 如果有一个强符号和多个弱符号同名,选择弱符号
- 如果有多个弱符号同名,选择其中任意一个
- 链接器不会表示检测到符号的多重定义
- 未初始化的全局变量交给COMMON段,将可能存在多重定义的变量交给链接器进行裁决
- 未初始化的静态变量,初始化为0的静态或全局变量在.bss段;全局变量初始化为0是一个强符号
与静态链接库链接
- 链接器将只复制被程序引用的目标模块
动态链接共享库
- 链接器复制了.so文件的重定位和符号表信息
- 在可执行文件加载后,存在.interp节,加载动态链接器(ld-linux.so);动态链接器本身不能依赖任何动态库,所有它是静态链接的
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LZY的Code生活!