-
编译驱动程序包括
- 预处理器(cpp)
- 将程序从ASCII源文件翻译成 .i 文件
- 编译器(ccl)
- 翻译成 .s ASCII汇编语言文件
- 汇编器(as)
- 翻译成 .o 可重定位目标文件
- 链接器(ld)
- 翻译成可执行文件
- 预处理器(cpp)
-
链接器主要任务
- 符号解析
- 将函数,全局变量,静态变量(static)的定义和引用(使用)关联起来
- 重定位
- 汇编器生成从地址0开始的代码和数据(产生相对地址),链接器将这些定义和内存位置关联起来(产生绝对地址)
- 这里的绝对地址是对于这个程序内部而言的绝对位置,并不是整个PC内的绝对位置
- 汇编器生成从地址0开始的代码和数据(产生相对地址),链接器将这些定义和内存位置关联起来(产生绝对地址)
- 符号解析
-
可重定位目标文件格式(ELF)
-
局部变量是在运行时保存在栈中,链接器不知道其存在
- 所以ELF文件的符号表中没有局部变量的条目
- 而编译器的符号表中是有的
- 所以ELF文件的符号表中没有局部变量的条目
-
全局符号分为强符号和弱符号
- 强符号为函数或者已经初始化的全局变量
CMU CSAPP笔记 第七章
最新推荐文章于 2025-01-13 17:48:47 发布