ELF与动态链接
ELF文件
- 一种Linux下常用的可执行文件
- ELF中的数据按照Segment和Section两个概念来划分
- Segment
- 用于告诉内核,在执行ELF文件时应该如何映射内存
- 每个Segment主要包含加载地址,文件中的范围,内存的权限,对齐方式
- 是运行时必须提供的信息
- Section
- 用于告诉链接器,ELF中每个部分是什么,哪里是代码,哪里是只读数据,哪里是重定位信息
- 每个Section主要包含Section类型,文件中的位置,大小等信息
- 链接器依赖Section信息将不同的对象文件的代码,数据信息合并,并修复互相引用
- Segment与Section的关系
- 相同权限的Section会放入同一个Segment
- 一个Segment包含许多Section,一个Section可以属于多个Segment
ELF文件格式
- ELF Header
- 架构,ABI版本等基础信息
- program header table的位置和数量
- section header table的位置和数量
- Program header table
- 每个表项定义了一个segment
- 每个segment可包含多个section
- Section header table
- 每个表项定义了一个section