.so
文件的结构标识主要依据 ELF 格式(Executable and Linkable Format)
一个 .so
文件其实是一个 ELF(可执行与可链接格式) 文件,里面包含多个结构标识符和段(Sections)用于支持动态加载、符号表、依赖解析等功能。
标识 / 区段 | 类型说明
| 用途 |
---|---|---|
.interp
| 动态链接器路径 | 指定用于加载 .so 的动态链接器路径 |
.dynsym | 动态符号表 | 记录函数、变量名等符号(用于符号解析) |
.dynstr | 动态符号字符串表 | 存放符号表中符号的名称字符串 |
.rel.plt` / `.rela.plt | 重定位信息(用于 PLT) | 支持延迟符号绑定和调用外部函数 |
plt | 程序链接表(Procedure Linkage Table) | 提供外部函数跳转表地址(懒加载机制) |
got` / `.got.plt` | 全局偏移表 | 保存函数或变量的地址,实现间接跳转 |
.text | 可执行代码段 | 编译后的机器代码(函数体) |
.data | 已经初始化的全局变量 | 存储初始化的全局变量 |
.bss | 未初始化的全局变量 | 分配内存但初始值为0的变量区域 |
.rodata | 只读数据段 | 存放字符串常量和const修饰的变量 |
eh_frame | 异常处理栈帧 | 用于支持c++异常处理,栈回朔 |
debug_ | 调试信息 | 用于gdb调试,例如:debug_info,debug_line等 |
.note | 标识/说明类段(编译器、平台等) | 比如.note.ABI-tag,.note.gnu.build-id |