深入理解计算机系统 第七章:链接

深入探讨计算机系统的链接机制
本文介绍了链接的静态和动态两种方式,详细讲解了连接器的任务、符号解析、重定位过程,以及静态库连接和动态链接的区别。在静态链接中,连接器负责处理全局符号的重定义,并将目标文件合并成可执行文件。动态链接则允许程序在运行时加载共享库,节省内存资源。重点介绍了位置无关代码(PIC)的概念和实现机制。

链接(static & dynamic)

具体实现方法见《深入理解计算机系统 第三版》 仅仅整理一些思路

静态连接

连接器的任务
  • 符号解析
  • 重定位:汇编器生成的代码和数据节都是从地址0开始,需要将每个符号定义与一个内存位置管理,从而重定位 这些节,并修改对这些符号的引用。
三种目标文件:
  • 可重定位目标文件:与其他可重定位目标文件结合,创建一个可执行文件
  • 可执行目标文件
  • 共享目标文件
可重定位文件格式

在这里插入图片描述

部分说明:

.rodata 只读数据 .symtab 符号表

.rel.text 一个.text节的位置列表,组合时需要修改

.rel.data 被模块引用或定义的所有全局变量重定位信息

符号与符号表

符号表包含该文件(m)定义和引用的符号信息

  • m定义的呗其他模块引用的全局符号
  • 其他模块定义被m引用的全局符号
  • 只被m定义和引用的全局符号 带static的全局变量和函数

attention:不包含本地非静态的符号,这些在栈中管理

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值