1、ELF文件格式
- ELF:Executable and Linkable Format
- 一种Linux下常用的可执行文件、对象、共享库的标准文件格式
- 还有许多其他可执行文件格式:PE、Mach-O、COFF、COM...
- 内核中处理ELF相关代码参考:fs/binfmt_elf.c
- ELF中的数据按照Segment、Section两个概念进行划分
2、Segment
- 用于告诉内核,在执行ELF文件时应该如何映射内存
- 每个Segment主要包含:加载地址、文件中的范围、内存权限、对齐方式等信息
- 是运行时必须提供的信息
3、Section
- 用于告诉链接器,ELF中每个部分是什么,哪里是代码,哪里是只读数据,哪里是重定位信息
- 每个Section主要包含Section类型、文件中的位置、大小等信息
链接器依赖Section信息将不同的对象文件的代码、数据信息合并,并修复互相引用
4、Segment与Section的关系
- 相同权限的Section会放入同一个Segment,例如.text和.rodata section
- 一个Segment包含许多Section,一个Section可以属于多个Segment
5、ELF文件类型
- 可执行文件(ET_EXEC)
- 可直接运行的程序,必须包含segment
- 对象文件(ET_REL,*.o)
- 需要与其他对象文件链接,必须包含section
- 动