Go to main content

手册页部分 1:用户命令

退出打印视图

更新时间: 2018年8月8日 星期三
 
 

elfdump(1)

名称

elfdump - 转储目标文件的所选部分

用法概要

elfdump [-cCdegGhHiklmnPrsSuvVy] [-p | -w file]
     [-F fmtopt1,fmtopt2,...] [-I index-expr]
     [-N name] [-O osabi] [-T type] file...

描述

elfdump 实用程序以符号方式转储指定目标文件的所选部分。相应选项允许显示文件的特定部分。

elfdump 实用程序在功能方面与 dump(1) 实用程序类似。与 elfdump 相比,dump 实用程序提供的界面较旧且用户友好性较差,尽管 dump 可能更适合于特定用途(例如用于 shell 脚本中)。

还可以使用 elfdump 检查 ar(1) 生成的归档文件。在这种情况下,使用提供的选项处理归档文件中的每个目标文件。

elfdump 可以显示任何 ELF 目标文件的 ELF 头、程序头数组和节头数组。它还能够显示以下类型的节中找到的数据:

Category                   Option     ELF Section Type
Dynamic                     -d        SHT_DYNAMIC
Global Offset Table (GOT)   -G        Special, see below.
Group                       -g        SHT_GROUP
Capabilities                -H        SHT_SUNW_cap
Hash Table                  -h        SHT_HASH
Init/Fini Array                       SHT_INIT_ARRAY
                                      SHT_FINI_ARRAY
                                      SHT_PREINIT_ARRAY
Interpreter                 -i        Special, see below.
Move                        -m        SHT_SUNW_move
Note                        -n        SHT_NOTE
Relocation                  -r        SHT_RELA
                                      SHT_REL
Stack Unwind/Exceptions     -u        Special, see below.
Syminfo                     -y        SHT_SUNW_syminfo
Symbol Sort                 -S        SHT_SUNW_symsort
                                      SHT_SUNW_tlssort
Symbol Table                -s        SHT_SYMTAB
                                      SHT_DYNSYM
                                      SHT_SUNW_LDYNSYM
                                      SHT_SUNW_versym
Versioning                  -v        SHT_SUNW_verdef
                                      SHT_SUNW_verneed

常规匹配选项(–I–N–T)可用于为任何所需的节选择显示数据。请参见“匹配选项”。此外,elfdump 为最常请求的节数据类型提供了便捷的选项。

解释程序和全局偏移表节不具有特殊的 ELF 节类型,而是使用众所周知的名称(分别为 。interp。got)实现为 SHT_PROGBITS 节。elfdump 能够识别和显示这些特殊节。

在不带用于缩小所显示信息范围的选项的情况下运行时,elfdump 会显示每个目标文件的所有可用信息。

有关所显示信息的完整说明,请参阅Oracle Solaris 11.4 Linkers and Libraries Guide

选项

支持以下选项:

–c

转储节头信息。

–C

等效于 –F demangle。请参见 –F

–d

转储 .dynamic 节的内容。

–e

转储 ELF 头。

–F fmtopt1, fmtopt2,...

可使用一个或多个下列项的逗号分隔列表指定备用输出格式选项。

demangle

取消改编 C++ 符号名。

fileprefix

使用对象的名称作为每个输出行的前缀。

fixhextab

在表格输出中显示十六进制值作为计算机字大小的零填充值。缺省情况下,elfdump 以自然格式显示此类值,该格式不包括前导零。

notrunc

显示未截断的长节名。

shndx | shndxonly

更改用于显示节索引的格式。shndx 格式选项按索引和名称显示节,格式为 [index]nameshndxonly 格式选项忽略名称且只显示节索引,格式为 [ index]。

缺省情况下,显示节头信息时,sh_linksh_info 字段引用的节索引显示为简单数值。其他显示(例如,符号表条目和重定位)只显示节名称。shndxshndxonly 格式选项按一致的方式并使用关联格式显示所有节索引。

–g

转储 .group 节的内容。

–G

转储 .got 节的内容。

–h

转储 .hash 节的内容。

–H

转储 .SUNW_cap 功能节的内容。

–i

转储 .interp 节的内容。

–I index-expr

通过特定的索引或索引范围来限定要检查的节或程序头。例如,可使用以下命令显示某个文件中的第三个节头:

example% elfdump -c -I 3 filename

index-expr 可以是指定一个特定项的单个非负整数值,如上一示例中所示。另外,index-expr 还可以包含两个这样的值,以冒号 (:) 分隔,指示相应项的范围。以下示例显示文件中的第三、第四和第五个程序头:

example% elfdump -p -I 3:5 filename

在指定索引范围时,可以省略第二个值以指示文件中的最后一项。例如,以下语句列出从第十个到最后的所有节头:

example% elfdump -c -I 10: filename

有关匹配选项 (–I, –N, –T) 的更多信息,请参见“匹配选项”。

–k

计算 ELF 校验和。请参见 gelf_checksum(3ELF)

–l

等效于 –F notrunc。请参见 –F

–m

转储 .SUNW_move 节的内容。

–n

转储 .note 节的内容。缺省情况下,elfdump 以十六进制形式显示此数据(没有解释)。核心文件属于例外情况。core(5) 中描述的核心文件附注的子集由 elfdump 进行解释并以较高级别的格式进行显示:NT_PLATFORMNT_AUXVNT_ASRSNT_PSTATUSNT_PSINFONT_PRCREDNT_UTSNAMENT_LWPSTATUSNT_LWPSINFONT_PRPRIVNT_PRPRIVINFONT_CONTENTNT_ZONENAMENT_SIGACTIONNT_FDINFO

–N name

通过特定的名称来限定要检查的节或程序头。例如,在包含多个符号表的文件中,可使用以下命令自行显示 .dynsym 符号表:

example% elfdump -N .dynsym filename

ELF 程序头没有名称。如果指定 –p 选项,则 name 引用程序头类型,–N 选项的行为与 –T 选项的行为相同。例如,可使用以下命令显示标识解释程序的程序头:

example% elfdump -p -N PT_INTERP filename

有关匹配选项 (–I, –N, –T) 的更多信息,请参见“匹配选项”。

–O osabi

指定解释目标文件时要应用的操作系统 ABI。osabi 可以是 /usr/include/sys/elf.h 中找到的任何 ELFOSABI_ 常量的名称或值。为了方便起见,可以从这些名称中省略 ELFOSABI_ 前缀。完全支持两个 osabi 值:solaris 是 Solaris 操作系统的本机 ABI。none 是通用 ELF ABI。对其他操作系统 ABI 的支持可能不完整或缺失。以数字形式显示字符串不可用的项。

如果不使用 –O,且目标文件 ELF 头指定非通用 ABI,则使用目标文件指定的 ABI。如果目标文件指定通用 ELF ABI,则 elfdump 会搜索 .note.ABI-tag 节,如果找到,会将该目标文件标识为具有 linux ABI。另一方面,指定通用 ELF ABI 的目标文件假定为符合 solaris ABI。

–p

转储程序头。可以使用匹配选项 (–I, –N, –T) 指定各个程序头。有关其他信息,请参见“匹配选项”。

–p–w 选项互斥。在给定的 elfdump 调用中只能使用其中一个选项。

–P

根据程序头中的信息生成并使用替代节头信息,忽略文件中包含的任何节头信息。如果文件没有节头,将列显一条警告消息,并且将自动选择此选项。节头未被系统用来执行程序。因此,恶意程序可能会剥离或更改其节头以提供误导性信息。相比之下,程序头必须准确,程序才可运行。使用源自程序头的合成节头信息,允许检查包含更改后节头的文件。

–r

转储 .rel[a] 重定位节的内容。

–s

转储 .SUNW_ldynsym.dynsym.symtab 符号表节的内容。对于归档文件,还将转储归档符号表。可以使用匹配选项 (–I, –N, –T) 指定各个节。可以使用特殊节名称 –N ARSYM 指定归档符号表。

对于核心文件,shndx 字段具有值 "unknown",因为该字段不包含有效值。

除了标准符号表信息外,还会在 ver 标题下提供符号的版本定义索引。

有关匹配选项 (–I, –N, –T) 的更多信息,请参见“匹配选项”。

–S

转储 .SUNW_ldynsym.dynsym 符号表节(按 .SUNW_dynsymsort.SUNW_dyntlssort 符号排序节给定的顺序排序)的内容。线程本地存储 (Thread Local Storage, TLS) 符号按偏移进行排序。常规符号按地址进行排序。不显示未按排序节引用的符号。

–T type

通过特定的类型来限定要检查的节或程序头。例如,在包含多个符号表的文件中,可使用以下命令自行显示 .dynsym 符号表:

example% elfdump -T SHT_DYNSYM filename

type 的值可以是数值,或 /usr/include/sys/elf.h 中定义的任何 SHT_ 符号名称。SHT_ 前缀是可选的,type 不区分大小写。因此,以上示例也可以写为:

example% elfdump -T dynsym filename

如果指定 –p 选项,则 type 引用程序头类型,这将允许显示特定的程序头。例如,可使用以下命令显示标识解释程序的程序头:

example% elfdump -p -T PT_INTERP filename

type 的值可以是数值,或 /usr/include/sys/elf.h 中定义的任何 PT_ 符号名称。PT_ 前缀是可选的,type 不区分大小写。因此,以上示例也可以写为:

example% elfdump -p -T interp filename

有关匹配选项 (–I, –N, –T) 的更多信息,请参见“匹配选项”。

–u

转储用于栈帧展开和异常处理的节的内容。

–v

转储 .SUNW_version 版本节的内容。

–V
–-version

输出版本信息并立即退出。

–w file

将使用匹配选项 (–I, –N, –T) 指定的节内容写入到指定的文件。例如,可以使用以下命令执行对文件的 .text 节的提取:

example% elfdump -w text.out -N .text filename

有关匹配选项 (–I, –N, –T) 的更多信息,请参见“匹配选项”。

–p–w 选项互斥。在给定的 elfdump 调用中只能使用其中一个选项。

–y

转储 .SUNW_syminfo 节的内容。符号属性通过以下关键字来传递。

AUXILIARY

符号定义可用作辅助过滤器。

CAP

符号与功能相关联。

COPY

符号定义通过副本重定位生成。

DEFERRED

符号与延迟依赖项关联。

DEPEND

符号引用依赖关联对象。

DIRECT

符号引用直接绑定到关联依赖项。始终与 DEPEND 结合设置。

FILTER

符号定义可用作标准过滤器。

INTERPOSE

符号定义可用作插入项。

LAZY

符号引用指向应延迟装入的依赖项。始终与 DEPEND 结合设置。

NODIRECT

外部引用不能直接绑定到此符号定义。

WEAK

符号定义可用作弱标准过滤器。始终与 FILTER 结合设置。

–?
–-help

输出用法消息并立即退出。

操作数

支持下列操作数:

file

指定的目标文件的名称。

用法

匹配选项

–I–N–T 选项统称为匹配选项。这些选项用于通过索引、名称或类型来缩小要检查的程序头或节的范围。

匹配选项的确切解释取决于所用的其他选项:

  • –p 选项一起使用时,匹配选项引用程序头。–I 引用程序头索引。–T 引用程序头类型。因为程序头没有名称,所以,对于程序头,–N 选项的行为方式与 –T 相同。

  • 与以下任何选项一起使用时,匹配选项用于通过索引、名称或类型选择节:–c–g–m–n–r–s–S–u–w

  • 如果单独使用匹配选项而不使用以下任何选项:–c–g–m–n–p–r–s–S–u–w,则 elfdump 会检查每个目标文件,并显示所匹配的任何节的内容。

在一个给定的 elfdump 调用中,可以混合使用任意数量和类型的匹配选项。在这种情况下,elfdump 显示与所使用的任何匹配选项匹配的所有项的超集。使用此功能,可以通过用于指定每个项目的最简便形式来选择复杂的项目分组。

文件

liblddbg.so

链接程序调试库

libproc.so

进程控制库

属性

有关下列属性的说明,请参见 attributes(7)

属性类型
属性值
可用性
system/linker
接口稳定性
Committed(已确定)

另请参见

ar(1)dump(1)elffile(1)file(1)nm(1)pvs(1)elf(3ELF)libproc(3LIB)core(5)attributes(7)

Oracle Solaris 11.4 Linkers and Libraries Guide

附注

用于堆栈展开和异常处理的节可能具有 ELF 节类型 SHT_PROGBITSSHT_AMD64_UNWIND,具体取决于所涉及的编译器和平台。可按名称 .eh_frame.eh_frame_hdr.exception_ranges 识别这些节。

核心文件包含多个目标文件中的信息,每个目标文件由一个程序头表示。elfdump 使用 libproc 确定目标文件名称以及与每个程序头对应的映射属性。程序头通过 pr_mapnamepr_mflags 字段进行扩充,以显示此信息。节名通过它们所应用的目标文件的名称进行扩充。