以Linux的ELF文件为例,其可执行文件的存储布局主要如下:
(地址从低到高排列) |
||
---|---|---|
.text |
可执行指令(如函数代码) | 代码段(Text Segment) |
.rodata |
只读数据(如字符串常量、const 变量) |
数据段(只读部分) |
.data |
已初始化的全局变量、静态变量 | 数据段(可写部分) |
.bss |
未初始化的全局变量、静态变量(不占空间,加载时分配) | 数据段(运行时清零) |
.symtab |
符号表(调试或静态链接用),通常只出现在 .o 文件中。 |
不加载到内存 |
.strtab |
字符串表(符号名称等) | 不加载到内存 |
.rel.* |
重定位表(仅 .o 文件包含,链接后不再需要) |
不加载到内存 |
.dynamic |
动态链接信息(如依赖的共享库) | 动态段 |
.interp |
动态链接器路径(如 /lib64/ld-linux-x86-64.so.2 ) |
动态段 |