2 编译和链接
2.4 模块拼装——静态链接
链接过程主要包含了地址和空间分配(Address and Storage Allocation)、符号决议(Symbol Resolution) 和重定位(Relocation)等步骤。
符号决议也叫符号绑定、名称绑定、名称决议、地址绑定、指令绑定。大体意思相同,但从细节角度来区分,它们之间有一定区别的,比如 “决议” 更倾向于静态链接,“绑定”更倾向于动态链接。在静态链接,我们将统一称为符号决议。
3 目标文件里有什么
Objdump 的使用
- 参数 -h : 打印各个段的基本信息,包括 Size、VMA、LMA、File offf、Algn
objdump -h SimpleSection.o
- 命令 size: 用来查看 ELF 文件的代码段、数据段和 BSS 段的长度
size SimpleSection.o
- 参数 -s: 将所有段的内容以十六进制的方式打印;
- 参数 -d: 将所有包含指令的段反编译
objdump -s -d SimpleSection.o
3.3.2 Objdump 的使用
.data 段保存的是已经初始化了的全局静态变量和局部静态变量。
.rodata 保存的是只读数据(如 const 修饰的变量)和字符串常量。
.bss 段存放的是未初始化的全局变量和局部静态变量。