链接程序和库指南

特殊节

包含程序和控制信息的各种节。下表中的各节由系统使用,并且具有指明的类型和属性。

表 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

.bss

构成程序的内存映像的未初始化数据。根据定义,系统在程序开始运行时会将数据初始化为零。如节类型 SHT_NOBITS 所指明的那样,此节不会占用任何文件空间。

.comment

注释信息,通常由编译系统的组件提供。此节可以由 mcs(1) 进行处理。

.data.data1

构成程序的内存映像的已初始化数据。

.dynamic

动态链接信息。 有关详细信息,请参见动态节

.dynstr

进行动态链接所需的字符串,通常是表示与符号表各项关联的名称的字符串。

.dynsym

动态链接符号表。 有关详细信息,请参见符号表节

.eh_frame_hdr.eh_frame

用于展开栈的调用帧信息。

.fini

可执行指令,用于构成包含此节的可执行文件或共享库的单个终止函数。 有关详细信息,请参见初始化和终止例程

.fini_array

函数指针数组,用于构成包含此节的可执行文件或共享库的单个终止数组。 有关详细信息,请参见初始化和终止例程

.got

全局偏移表。 有关详细信息,请参见全局偏移表(特定于处理器)

.hash

符号散列表。 有关详细信息,请参见散列表节

.init

可执行指令,用于构成包含此节的可执行文件或共享库的单个初始化函数。 有关详细信息,请参见初始化和终止例程

.init_array

函数指针数组,用于构成包含此节的可执行文件或共享库的单个初始化数组。 有关详细信息,请参见初始化和终止例程

.interp

程序的解释程序的路径名。 有关详细信息,请参见程序的解释程序

.lbss

特定于 x64 的 未初始化数据。此数据与 .bss 类似,但用于大小超过 2 GB 的节。

.ldata.ldata1

特定于 x64 的已初始化数据。此数据与 .data 类似,但用于大小超过 2 GB 的节。

.lrodata.lrodata1

特定于 x64 的只读数据。此数据与 .rodata 类似,但用于大小超过 2 GB 的节。

.note

注释节中说明了该格式的信息。

.plt

过程链接表。 有关详细信息,请参见过程链接表(特定于处理器)

.preinit_array

函数指针数组,用于构成包含此节的可执行文件或共享库的单个 预初始化 数组。 有关详细信息,请参见初始化和终止例程

.rela

不适用于特定节的重定位。此节的用途之一是用于寄存器重定位。 有关详细信息,请参见寄存器符号

.relname.relaname

重定位信息,如重定位节中所述。如果文件具有包括重定位的可装入段,则此节的属性将包括 SHF_ALLOC 位。否则,该位会处于禁用状态。通常,name 由应用重定位的节提供。因此,.text 的重定位节的名称通常为 .rel.text.rela.text

.rodata.rodata1

通常构成进程映像中的非可写段的只读数据。 有关详细信息,请参见程序头

.shstrtab

节名。

.strtab

字符串,通常是表示与符号表各项关联的名称的字符串。如果文件具有包括符号字符串表的可装入段,则此节的属性将包括 SHF_ALLOC 位。否则,该位会处于禁用状态。

.symtab

符号表,如符号表节中所述。如果文件具有包括符号表的可装入段,则此节的属性将包括 SHF_ALLOC 位。否则,该位会处于禁用状态。

.symtab_shndx

此节包含特殊符号表的节索引数组,如 .symtab 所述。如果关联的符号表节包括 SHF_ALLOC 位,则此节的属性也将包括该位。否则,该位会处于禁用状态。

.tbss

此节包含未初始化的线程局部数据,这些数据构成程序的内存映像。根据定义,针对每个新执行流对数据进行实例化时,系统会将数据初始化为零。如节类型 SHT_NOBITS 所指明的那样,此节不会占用任何文件空间。 有关详细信息,请参见第 8 章,线程局部存储

.tdata.tdata1

这些节包含已初始化的线程局部数据,这些数据构成程序的内存映像。对于每个新执行流,系统会对数据内容的副本进行实例化。 有关详细信息,请参见第 8 章,线程局部存储

.text

程序的文本或可执行指令。

.SUNW_bss

共享库的部分初始化数据,这些数据构成程序的内存映像。数据会在运行时进行初始化。如节类型 SHT_NOBITS 所指明的那样,此节不会占用任何文件空间。

.SUNW_heap

dldump(3C) 中创建的动态可执行文件的

.SUNW_cap

硬件和软件的功能要求。 有关详细信息,请参见硬件和软件功能节

.SUNW_move

部分初始化数据的附加信息。 有关详细信息,请参见移动节

.SUNW_reloc

重定位信息,如重定位节中所述。此节是多个重定位节的串联,用于为引用各个重定位记录提供更好的临近性。由于仅有重定位记录的偏移有意义,因此节的 sh_info 值为零。

.SUNW_syminfo

其他符号表信息。 有关详细信息,请参见Syminfo 表节

.SUNW_version

版本控制信息。 有关详细信息,请参见版本控制节

具有点 (.) 前缀的节名为系统而保留,但如果这些节的现有含义符合要求,则应用程序也可以使用这些节。应用程序可以使用不带前缀的名称,以避免与系统节产生冲突。使用目标文件格式,可以定义非保留的节。一个目标文件可以包含多个同名的节。

保留用于处理器体系结构的节名通过在节名前加上体系结构名称的缩写而构成。该名称应来自用于 e_machine 的体系结构名称。例如,.Foo.psect 是根据 FOO 体系结构定义的 psect 节。

现有扩展使用其历史名称。