包含程序和控制信息的各种节。下表中的各节由系统使用,并且具有指明的类型和属性。
表 7–10 ELF 特殊节
名称 |
类型 |
属性 |
---|---|---|
.bss |
SHT_NOBITS |
SHF_ALLOC + SHF_WRITE |
.comment |
SHT_PROGBITS |
无 |
.data、.data1 |
SHT_PROGBITS |
SHF_ALLOC + SHF_WRITE |
.dynamic |
SHT_DYNAMIC |
SHF_ALLOC + SHF_WRITE |
.dynstr |
SHT_STRTAB |
SHF_ALLOC |
.dynsym |
SHT_DYNSYM |
SHF_ALLOC |
.eh_frame_hdr |
SHT_AMD64_UNWIND |
SHF_ALLOC |
.eh_frame |
SHT_AMD64_UNWIND |
SHF_ALLOC + SHF_WRITE |
.fini |
SHT_PROGBITS |
SHF_ALLOC + SHF_EXECINSTR |
.fini_array |
SHT_FINI_ARRAY |
SHF_ALLOC + SHF_WRITE |
.got |
SHT_PROGBITS | |
.hash |
SHT_HASH |
SHF_ALLOC |
.init |
SHT_PROGBITS |
SHF_ALLOC + SHF_EXECINSTR |
.init_array |
SHT_INIT_ARRAY |
SHF_ALLOC + SHF_WRITE |
.interp |
SHT_PROGBITS |
请参见程序的解释程序 |
.note |
SHT_NOTE |
无 |
.lbss |
SHT_NOBITS |
SHF_ALLOC + SHF_WRITE + SHF_AMD64_LARGE |
.ldata、.ldata1 |
SHT_PROGBITS |
SHF_ALLOC + SHF_WRITE + SHF_AMD64_LARGE |
.lrodata、.lrodata1 |
SHT_PROGBITS |
SHF_ALLOC + SHF_AMD64_LARGE |
.plt |
SHT_PROGBITS | |
.preinit_array |
SHT_PREINIT_ARRAY |
SHF_ALLOC + SHF_WRITE |
.rela |
SHT_RELA |
无 |
.relname |
SHT_REL |
请参见重定位节 |
.relaname |
SHT_RELA |
请参见重定位节 |
.rodata、.rodata1 |
SHT_PROGBITS |
SHF_ALLOC |
.shstrtab |
SHT_STRTAB |
无 |
.strtab |
SHT_STRTAB |
请参阅此表后面的说明。 |
.symtab |
SHT_SYMTAB |
请参见符号表节 |
.symtab_shndx |
SHT_SYMTAB_SHNDX |
请参见符号表节 |
.tbss |
SHT_NOBITS |
SHF_ALLOC + SHF_WRITE + SHF_TLS |
.tdata、.tdata1 |
SHT_PROGBITS |
SHF_ALLOC + SHF_WRITE + SHF_TLS |
.text |
SHT_PROGBITS |
SHF_ALLOC + SHF_EXECINSTR |
.SUNW_bss |
SHT_NOBITS |
SHF_ALLOC + SHF_WRITE |
.SUNW_heap |
SHT_PROGBITS |
SHF_ALLOC + SHF_WRITE |
.SUNW_cap |
SHT_SUNW_cap |
SHF_ALLOC |
.SUNW_move |
SHT_SUNW_move |
SHF_ALLOC |
.SUNW_reloc |
SHT_REL SHT_RELA |
SHF_ALLOC |
.SUNW_syminfo |
SHT_SUNW_syminfo |
SHF_ALLOC |
.SUNW_version |
SHT_SUNW_verdef SHT_SUNW_verneed SHT_SUNW_versym |
SHF_ALLOC |
构成程序的内存映像的未初始化数据。根据定义,系统在程序开始运行时会将数据初始化为零。如节类型 SHT_NOBITS 所指明的那样,此节不会占用任何文件空间。
注释信息,通常由编译系统的组件提供。此节可以由 mcs(1) 进行处理。
构成程序的内存映像的已初始化数据。
动态链接信息。 有关详细信息,请参见动态节。
进行动态链接所需的字符串,通常是表示与符号表各项关联的名称的字符串。
动态链接符号表。 有关详细信息,请参见符号表节。
用于展开栈的调用帧信息。
可执行指令,用于构成包含此节的可执行文件或共享库的单个终止函数。 有关详细信息,请参见初始化和终止例程。
函数指针数组,用于构成包含此节的可执行文件或共享库的单个终止数组。 有关详细信息,请参见初始化和终止例程。
全局偏移表。 有关详细信息,请参见全局偏移表(特定于处理器)。
符号散列表。 有关详细信息,请参见散列表节。
可执行指令,用于构成包含此节的可执行文件或共享库的单个初始化函数。 有关详细信息,请参见初始化和终止例程。
函数指针数组,用于构成包含此节的可执行文件或共享库的单个初始化数组。 有关详细信息,请参见初始化和终止例程。
程序的解释程序的路径名。 有关详细信息,请参见程序的解释程序。
特定于 x64 的已初始化数据。此数据与 .data 类似,但用于大小超过 2 GB 的节。
特定于 x64 的只读数据。此数据与 .rodata 类似,但用于大小超过 2 GB 的节。
注释节中说明了该格式的信息。
过程链接表。 有关详细信息,请参见过程链接表(特定于处理器)。
函数指针数组,用于构成包含此节的可执行文件或共享库的单个 预初始化 数组。 有关详细信息,请参见初始化和终止例程。
不适用于特定节的重定位。此节的用途之一是用于寄存器重定位。 有关详细信息,请参见寄存器符号。
重定位信息,如重定位节中所述。如果文件具有包括重定位的可装入段,则此节的属性将包括 SHF_ALLOC 位。否则,该位会处于禁用状态。通常,name 由应用重定位的节提供。因此,.text 的重定位节的名称通常为 .rel.text 或 .rela.text。
通常构成进程映像中的非可写段的只读数据。 有关详细信息,请参见程序头。
节名。
字符串,通常是表示与符号表各项关联的名称的字符串。如果文件具有包括符号字符串表的可装入段,则此节的属性将包括 SHF_ALLOC 位。否则,该位会处于禁用状态。
符号表,如符号表节中所述。如果文件具有包括符号表的可装入段,则此节的属性将包括 SHF_ALLOC 位。否则,该位会处于禁用状态。
此节包含特殊符号表的节索引数组,如 .symtab 所述。如果关联的符号表节包括 SHF_ALLOC 位,则此节的属性也将包括该位。否则,该位会处于禁用状态。
此节包含未初始化的线程局部数据,这些数据构成程序的内存映像。根据定义,针对每个新执行流对数据进行实例化时,系统会将数据初始化为零。如节类型 SHT_NOBITS 所指明的那样,此节不会占用任何文件空间。 有关详细信息,请参见第 8 章,线程局部存储。
这些节包含已初始化的线程局部数据,这些数据构成程序的内存映像。对于每个新执行流,系统会对数据内容的副本进行实例化。 有关详细信息,请参见第 8 章,线程局部存储。
程序的文本或可执行指令。
共享库的部分初始化数据,这些数据构成程序的内存映像。数据会在运行时进行初始化。如节类型 SHT_NOBITS 所指明的那样,此节不会占用任何文件空间。
从 dldump(3C) 中创建的动态可执行文件的堆。
硬件和软件的功能要求。 有关详细信息,请参见硬件和软件功能节。
部分初始化数据的附加信息。 有关详细信息,请参见移动节。
重定位信息,如重定位节中所述。此节是多个重定位节的串联,用于为引用各个重定位记录提供更好的临近性。由于仅有重定位记录的偏移有意义,因此节的 sh_info 值为零。
其他符号表信息。 有关详细信息,请参见Syminfo 表节。
版本控制信息。 有关详细信息,请参见版本控制节。
具有点 (.) 前缀的节名为系统而保留,但如果这些节的现有含义符合要求,则应用程序也可以使用这些节。应用程序可以使用不带前缀的名称,以避免与系统节产生冲突。使用目标文件格式,可以定义非保留的节。一个目标文件可以包含多个同名的节。
保留用于处理器体系结构的节名通过在节名前加上体系结构名称的缩写而构成。该名称应来自用于 e_machine 的体系结构名称。例如,.Foo.psect 是根据 FOO 体系结构定义的 psect 节。
现有扩展使用其历史名称。