CSAPP笔记

  1. 链接器符号:用于符号解析时使用,全局符号(书上讲的全局符号,常指的是静态符号,比如初始化全局变量区。),本地符号。(除了堆,库的变量之外的符号,都是静态的,主要两类:函数符号FUNC,数据符号OBJ)
  2. 符号定义:指的是静态符号的定义,静态变量和函数(函数一定是静态的,所以static修饰的函数符号,反而变成局部的意思)
  3. 静态:在未执行的可执行文件中占空间,静态变量或者函数。
  4. 头文件:头文件是为了方便其他模块方便引用外部符号,其他模块也可以手工书写,但是麻烦。所以程序员遵循这样的一种规则,将需要public的变量,函数原型,放入头文件,供其他目标模块include,事实上,其他模块即使不include,通过声明,也可以访问该模块定义的供其他模块访问的符号。所以为了安全,所有供外部访问的符号要放入头文件。
  5. 找到定义叫解析。
  6. 声明:帮助编译器编译出正确的指令。 定义:对符号定义具体内容。  引用:对于定义出的符号进行引用。
  7. 在目标重定位文件中,链接时,声明定义(的全局符号)用来产生符号表。
  8. 声明不会被编译成指令,而引用和定义会。
  9. 重定位节和符号定义: 符号定义,使符号在程序中位置。
  10. 连接器生成可执行文件分3步:1.符号解析。 2.节和符号重定位。 3.重定位节中(节中,即静态的)的符号引用。
  • 符号解析:好像就是检查符号引用和符号定义是有对应,是否重复定义等问题。可能会更新新的符号表(已去除重复定义的符号),使引用的重定位计算不会出错(如对应错符号表)。
  • 节和符号重定位:即将所有重定位目标文件,相同的节聚合,并生成新节和所定义符号的新地址(可能是新的符号表,节地址被替换为新的节绝对地址)。
  • 重定位节中的符号引用:利用重定位条目表和      (这可能就是新的符号表)新的节地址,符号地址替换引用的值(值是地址)。
  • PS:重定位条目表示汇编器生成的。包含:引用在节中偏移,符号——这就是引用符号相联系,重定位类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值