JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11.1 链接程序和库指南     Oracle Solaris 11.1 Information Library (简体中文)
为本文档评分
search filter icon
search icon

文档信息

前言

第 1 部分使用链接编辑器和运行时链接程序

1.  Oracle Solaris 链接编辑器介绍

2.  链接编辑器

3.  运行时链接程序

4.  共享目标文件

第 2 部分快速参考

5.  链接编辑器快速参考

第 3 部分高级主题

6.  直接绑定

7.  生成目标文件以优化系统性能

8.  Mapfile

9.  接口和版本控制

10.  使用动态字符串标记建立依赖性

11.  可扩展性机制

第 4 部分ELF 应用程序二进制接口

12.  目标文件格式

文件格式

数据表示形式

ELF 头

ELF 标识

数据编码

节合并

特殊节

辅助节

COMDAT 节

组节

功能节

散列表节

移动节

注释节

重定位节

重定位计算

SPARC: 重定位

SPARC: 重定位类型

64 位 SPARC: 重定位类型

x86: 重定位

32 位 x86: 重定位类型

x64: 重定位类型

字符串表节

符号表节

符号值

符号表布局和约定

符号排序节

寄存器符号

Syminfo 表节

版本控制节

版本定义章节

版本依赖性节

版本符号节

13.  程序装入和动态链接

14.  线程局部存储

第 5 部分附录

A.  链接程序和库的更新及新增功能

B.  System V 发行版 4(版本 1)Mapfile

索引

请告诉我们如何提高我们的文档:
过于简略
不易阅读或难以理解
重要信息缺失
错误的内容
需要翻译的版本
其他
Your rating has been updated
感谢您的反馈!

您的反馈将非常有助于我们提供更好的文档。 您是否愿意参与我们的内容改进并提供进一步的意见?

特殊节

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

表 12-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_ancillary
SHT_SUNW_ancillary
.SUNW_bss
SHT_NOBITS
SHF_ALLOC + SHF_WRITE
.SUNW_cap
SHT_SUNW_cap
SHF_ALLOC
.SUNW_capchain
SHT_SUNW_capchain
SHF_ALLOC
.SUNW_capinfo
SHT_SUNW_capinfo
SHF_ALLOC
.SUNW_heap
SHT_PROGBITS
SHF_ALLOC + SHF_WRITE
.SUNW_ldynsym
SHT_SUNW_LDYNSYM
SHF_ALLOC
.SUNW_dynsymsort
SHT_SUNW_symsort
SHF_ALLOC
.SUNW_dymtlssort
SHT_SUNW_tlssort
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 所指明的那样,此节不会占用任何文件空间。有关详细信息,请参见第 14 章

.tdata, .tdata1

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

.text

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

.SUNW_ancillary

辅助组信息。有关详细信息,请参见辅助节

.SUNW_bss

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

.SUNW_cap

功能要求。有关详细信息,请参见功能节

.SUNW_capchain

功能链表。有关详细信息,请参见功能节

.SUNW_capinfo

功能符号信息。有关详细信息,请参见功能节

.SUNW_heap

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

.SUNW_dynsymsort

.SUNW_ldynsym.dynsym 组合符号表中符号的索引数组。该索引进行排序,以按照地址递增的顺序引用符号。不表示变量或函数的符号不包括在内。对于冗余全局符号和弱符号,仅保留弱符号。有关详细信息,请参见符号排序节

.SUNW_dyntlssort

.SUNW_ldynsym.dynsym 组合符号表中线程局部存储符号的索引数组。该索引进行排序,以按照偏移递增的顺序引用符号。不表示 TLS 变量的符号不包括在内。对于冗余全局符号和弱符号,仅保留弱符号。有关详细信息,请参见符号排序节

.SUNW_ldynsym

扩充 .dynsym 节。此节包含局部函数符号,以在完整的 .symtab 节不可用时在上下文中使用。链接编辑器始终将 .SUNW_ldynsym 节的数据放置在紧邻 .dynsym 节之前。这两个节始终使用相同的 .dynstr 字符串表节。这种放置和组织方式使两个符号表可以被视为一个更大的符号表。请参见符号表节

.SUNW_move

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

.SUNW_reloc

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

.SUNW_syminfo

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

.SUNW_version

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

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

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

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