一、文件头:
1.ELF魔数、文件机器字节长度、数据存储方式、版本、运行平台、ABI版本、ELF重定位类型、硬件平台、硬件平台版本、入口地址、程序头入口和长度、段表的位置和长度及段的数量等。
二、段表:
1.保存段的基本特性,比如每个段的段名、段的长度、在文件中的偏移、读写权限及段的其他属性。
2.ELF文件的段结构就是由段表决定的,编译器、链接器和装载器都是依靠段表来定位和访问各个段的属性的。
三、代码段(.text)
1、代码转成的汇编指令
四、数据段
1、(.data)里放已经初始化了的全局静态变量和局部静态变量,有时候编译器会把字符串常量放到(.data)段
2、(.rodata)里放的是只读数据,一般是程序里的只读变量(如const修饰的变量)和字符串常量。
五、BSS段
1、(.bss)段里放的是未初始化的全局变量和局部静态变量,有的编译器会将全局的未初始化变量存放在目标文件.bss段,有些则不放,只是预留一个未定义的全局变量符号,等到最终链接成可执行文件的时候再在.bss段分配空间。
六、(.strtab)段
1、字符串表,用于存储ELF文件中用到的各种字符串
七、(.symtab)段
1、符号表
八、(.shstrtab)段
1、段名表
九、(.comment)段
1、存放的是编辑器信息版本信息
十、(.dynamic)段
1、动态链接信息
十一、(.plt .got)段
1、动态链接的跳转表和全局入口表
十二、(.init .fini)段
1、程序初始化与终结代码段
十三、(.rel.*)
1、重定位表,链接的时候需要对目标文件中某些不为进行重定位,即代码段和数据段中那些对绝对地址的引用的位置。