各种各样的sections保存了程序和控制信息:
.bss 此节保存的是contributes to the program's memory image的未初始化的数据。当然,程序运行起来之后,
系统会把这些数据初始化为零。此节的类型是SHT_NOBITS。参数类型是SHF_ALLOC和SHF_WRITE。
.comment
此节保存的是版本控制信息。类型是SHT_PROGBITS。没有参数类型。
.ctors 保存的是C++初始化的构造函数指针。(C语言是世界上最好的语言!)类型是SHT_PROGBITS。参数类型是 SHF_ALLOC和SHF_WRITE。
.data 此节保存的是contributes to the program's memory image的初始化的数据。(和.bss的区别是是否初始化)
类型是SHT_PROGBITS。参数类型是SHF_ALLOC和SHF_WRITE。
.data1 和.data完全一样。
.debug 此节保存的是symbolic debugging的信息。the contents没有详细说明。类型是SHT_PROGBITS。没有参数类型。
.dtors 保存的是C++初始化的析构函数指针。类型是SHT_PROGBITS。参数类型是SHF_ALLOC和SHF_WRITE。
.dynamic
保存的是动态链接的信息。SHT_ALLOC置位。无论SHF_WRITE是否置位。此节都是SHT_DYNAMIC类型。看上面的sttributes。
.dynstr 此节保存的是动态链接所需要的字符串,大部分时候这些字符串是symbol table entries的名字。类型是
SHT_STRTAB。参数类型是SHF_ALLOC。
.dynsym 保存的是动态链接的符号表。类型是SHT_DYNSYM。参数类型是SHF_ALLOC。
.fini 保存的是process终止代码的执行指令。当一个系统正常退出的时候,系统把执行代码放到这个section中。类型
是SHT_PROGBITS。参数类型是SHF_ALLOC和SHF_EXECINSTR。
.gnu.version
保存的是version symbol table,an array of ElfN_Half elements.类型是SHT_GNU_versym。参数类型是SHF_ALLOC。
.gnu.version_d
保存的是version symbol definitions,a table of ElfN_Verdef.类型是SHT_GNU_verdef。参数类型是SHF_ALLOC。
.gnu.version_r
保存的是version symbol needed elements, a table of ElfN_Verneed structures.类型是SHT_GNU_versym。参数
类型是SHF_ALLOC。
.got 保存的是global offset table。类型是SHT_PROGBITS。 The attributes are processor-specific.
.hash 保存的是symbol hash table.类型是SHT_HASH。参数类型是SHF_ALLOC。
.init 保存的是进程初始化代码的可执行指令。当程序的main函数开始执行之前,系统先执行此section的代码。此节的类型
是SHT_PROGBITS。参数类型是SHF_ALLOC和SHF_EXECINSTR。
.interp 保存的是程序解释器(program interpreter)的路径。如果文件有包含此节的可加载段,此节的参数包含 SHF_ALLOC位。否则,此位为0.此节的类型是SHT_PROGBITS。
.line 为symbolic debugging保存行号信息,描述了程序源码和机器码之间的对应关系。内容是未指定的。类型是 SHT_PROGBITS。参数类型没有被使用。
.note 保存了各种各样的注释。类型是SHT_NOTE。参数类型没有被使用。
.note.ABI-tag
此节是为了声明the expected runtime ABI of the ELF image.可能包含了执行系统的名字和它的运行时版本。类型是
SHT_NOTE。唯一的参数类型是SHF_ALLOC。
.note.gnu.build-id
保存的是唯一的能够区分ELF镜像内容的ID。拥有相同build ID的不同文件应该拥有相同的executable content。更多细节
请参阅ld的--build-id选项。此节的类型是SHT_NOTE。唯一的参数类型是SHF_ALLOC。
.note.GNU-stack
此节是用在目标文件中用来声明栈参数。类型是SHT_PROGBITS。唯一的参数类型是SHF_EXECINSTR。这向GNU链 接器表明该对象文件需要一个可执行堆栈。
.note.openbsd.ident
OpenBSD原生可执行程序通常包含这个部分来标识它们自己,这样内核就可以绕过任何一个在加载文件时进行兼容性 ELF二进制仿真测试。
.plt 保存的是程序链接表。类型是SHT_PROGBITS。参数要看处理器特性。
.relNAME
保存的是下面要描述的程序重定位信息。如果一个文件包含relocation的loadable segment,此节的参数信息就要包含
SHF_ALLOC位。否则,此位关闭。按照惯例,“NAME” is supplied by the section to which the relocations apply.
像可重定位的.text这样的节通常有.rel.text.此节的类型是SHT_REL。
.relaNAME
和.relNAME类似。.rel.text换成.rela.text SHT_REL换成SHT_RELA
.rodata 只读数据,不可写的段。类型是SHT_PROGBITS。参数类型是SHF_ALLOC
.rodata1
同上。
.shstrtab
保存的是节名字。类型是SHT_STRTAB。没有参数类型。
.strtab 保存的是字符串,通常是symbol table(符号表)的名字。如果文件拥有包含符号表的可加载段,此节的类型是 SHF_ALLOC否则此位关闭。此节的类型是SHT_STRTAB。
.symtab 保存的是符号表。如果文件拥有包含符号表的可加载段,此节的类型是SHF_ALLOC否则此位关闭。此节的类型是 SHT_SYMTAB。
.text 保存的是“text”,(也就是代码)或者是程序的可执行指令。此节的类型是SHT_PROGBITS。参数类型是SHF_ALLOC 和SHF_EXECINSTR。
4——man elf的翻译——所有Sections说明
最新推荐文章于 2022-01-17 21:33:00 发布