总的来说,elf文件可以大概有一下几个部分

┌───────────────────────────────┐
│ ELF 头部 (ELF Header)         │
├──────────────────────── ──────┤
│ 程序头表(Program Header Table)│
├──────────────────── ──────────┤
│ 节区 (Sections)               │
├─────────────────────────── ───┤
│ 节区头表 (Section Header Table)│
└───────────────────────────────┘

下面逐一简单介绍各个部分的作用

1.ELF 头部(ELF Header)

1.标识文件类型(可执行、目标文件、共享库);
2.架构(x86、ARM、x86_64 );
3.程序头表,节区头表的位置、大小、条目数;
4.字节序(小端 / 大端);
5.ELF版本;

2. 程序头表(Program Header Table)

仅存在于可执行文件 / 共享库,是操作系统加载程序到内存的依据。每个 “程序头” 描述一个 “段(Segment)”—— 内存中连续的区域(如代码段、数据段)。

3. 节区(Sections)

所有 ELF 文件都有,是链接器(ld)处理的基本单位,按功能划分(如代码、数据、符号表、调试信息等)。多个节区可被合并到同一个 “段” 中(比如.text节区→代码段,.data+.bss→数据段)。

4. 节区头表(Section Header Table)

描述每个节区的元信息,包括节区的名称、位置、大小、类型等。