节详解

ELF文件中包含多个节(Section),每个节存储特定类型的数据。

.text节:存放已编译程序的机器指令代码。这是程序执行时CPU直接取指执行的区域,通常是文件中最主要的节。

.data节:存放已初始化的全局和静态C变量。例如 int global = 42; 会存储在 .data 节中,程序加载时直接获得初始值。

.bss节:存放未初始化的全局和静态C变量。.bss 在文件中不占用实际磁盘空间,程序加载时由内核初始化为零。命名为 bss(Block Started by Symbol)是历史沿用。

.symtab节:符号表(Symbol Table),存放程序中定义和引用的函数与全局变量信息。链接器进行符号解析时主要依赖此节。

.rel.text节和.rel.data节:重定位节,存放需要修改位置的列表。对于每个需要重定位的符号引用,记录其偏移、目标符号、重定位类型和加数。

.rodata节:存放只读数据,如字符串常量、switch跳转表等。该节在运行时不可写。

链接到