ELF头
.text
.rodata
.data
.bss
.symtab
.rel.text
.rel.data
.debug
.line
.strtab
节头部表
典型的ELF可重定位目标文件
.text:已编译程序的机器代码
.rodata:只读数据,一般是程序里面的只读变量(如const修饰的变量)和字符串常量。
.data:已初始化的全局和静态C变量。局部C变量运行被保存在栈中,既不出现在.data节中,也不出现在.bss中
.COMMON 未初始化的全局变量
.bss:未初始化的静态C变量,以及所有被初始化为0的全局或静态变量。在目标文件中这个节不占实际的空间,它仅仅是一个占位符。目标文件格式区分已初始化和未初始化变量是为了空间效率:在目标文件中,未初始化变量不需要占据任何实际的磁盘空间。运行时,在内存中分配这些变量,初始值为0。
.symtab:一个符号表,它存放在程序中定义和引用的函数和全局变量的信息。
.rel.text:一个.text节中位置的列表,当链接器把这个目标文件和其他文件组合时,需要修改这些位置。
.rel.data:被模块引用或定义的所有全局变量的重定位作息。一般来说,任何已初始化的全局变量,如果它的初始值是一个全局变量地址或者外部定义函数的地址,都需要被修改。
.debug:一个调试符号表,其条目是程序中定义的局部变量和类型定义,程序中定义和引用的全局变量,以及原始的C源文件。只有以-g选项调用编译器驱动程序时,才会得到这张表。
.line:原始C源程序中的行号和.text节中的机器指令这间的映射。只有以-g选项调用编译器驱动程序时,才会得到这张表。
.strtab:一个字符串表,其内容包括.symtab和.debug节中的符号表,以及节头部中的节名字。字符串就是以null结尾的字符串的序列。
.comment:存放的是编译器版本信息。
.dynamic:动态链接作息
.hash:符号哈希表
.note:额外的编译器信息
.plt
.got:动态链接的跳转表和全局入口表
.init
.fini:程序初始化与终结代码段