计算机系统基础 第四章程序的链接

本文深入探讨了程序链接的过程,包括可重定位目标文件的格式,如ELF头、节等。详细讲解了符号解析与重定位,如强弱符号规则和多重定义的处理。同时,介绍了动态链接共享库的概念,如动态链接共享对象(.so文件)在Linux系统中的应用,以及动态链接的两种方式。总结了链接涉及的目标文件格式、链接类型及链接的两个关键任务:符号解析和重定位。
摘要由CSDN通过智能技术生成

4.1 可重定位目标文件格式

在这里插入图片描述

  • ELF 头定义了ELF魔数、版本、小端/大端、操作系统平台、目标文件的类型、机器结构类型、节头表的起始位置和长度等
  • .text 节 编译后的代码部分
  • .rodata 节 只读数据,如 printf 格式串、switch 跳转表等
  • .data 节已初始化的全局变量
  • .bss 节未初始化全局变量,仅是占位符,不占据任何实际磁盘空间。区分初始化和非初始化是为了空间效率

4.2 符号解析与重定位

.symtab 节记录符号表信息,是一个结构数组

4.2.1 符号解析

  1. 目的:将每个模块中引用的符号与某个目标模块中的定义符号建立关联。
  2. 符号的定义:指被分配了存储空间。为函数名时,指代码所在区;为变量名时,指所占的静态数据区。

4.2.2 强弱符号

  • 函数名和已初始化的全局变量名是强符号
  • 未初始化的全局变量名是弱符号

4.2.3 多重定义符号的处理规则

  • Rule 1: 强符号不能多次定义
    强符号只能被定义一次,否则链接错误
  • Rule 2: 若一个符号被定义为一次强符号和多次弱符号,则按强定义为准
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值