elfdump [-cCdegGhHiklmnPrsSuvy] [ -p | -w file] [-F fmtopt1,fmtopt2 ,...] [-I index-expr] [-N name] [-O osabi] [-T type] filename...
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 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
解释器和全局偏移表节不具有特殊的 ELF 节类型,而是使用众所周知的名称(分别为 .interp 和 .got)实现为 SHT_PROGBITS 节。elfdump 能够识别和显示这些特殊节。
用于堆栈展开和异常处理的节可能具有 ELF 节类型 SHT_PROGBITS 或 SHT_AMD64_UNWIND,具体取决于所涉及的编译器和平台。可按名称 .eh_frame、.eh_frame_hdr 和 .exception_ranges 识别这些节。
在不带用于缩小所显示信息范围的选项的情况下运行时,elfdump 会显示每个目标文件的所有可用信息。
有关所显示信息的完整说明,请参阅Oracle Solaris 11.2 链接程序和库指南 。
支持以下选项:
转储节头信息。
等效于 –F demangle。请参见 –F。
转储 .dynamic 节的内容。
转储 ELF 头。
可使用一个或多个下列项的逗号分隔列表指定备用输出格式选项。
取消改编C++ 符号名。
使用对象的名称作为每个输出行的前缀。
在表格输出中显示十六进制值作为计算机字大小的零填充值。缺省情况下,elfdump 以自然格式显示此类值,该格式不包括前导零。
显示未截断的长节名。
包括具有节名称的节索引,使用格式 [index]name。缺省情况下, elfdump 仅显示节名称。
按节索引显示节,使用格式 [ index]。缺省情况下, elfdump 仅显示节名称。
转储 .group 节的内容。
转储 .got 节的内容。
转储 .hash 节的内容。
转储 .SUNW_cap 功能节的内容。
转储 .interp 节的内容。
通过特定的索引或索引范围来限定要检查的节或程序头。例如,可使用以下命令显示某个文件中的第三个节头:
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) 的更多信息,请参见“匹配选项”。
计算 ELF 校验和。请参见 gelf_checksum (3ELF) 。
等效于 –F notrunc。请参见 –F。
转储 .SUNW_move 节的内容。
转储 .note 节的内容。缺省情况下,elfdump 以十六进制形式显示此数据(没有解释)。核心文件属于例外情况。core(4) 中描述的核心文件附注的子集由 elfdump 进行解释并以较高级别的格式进行显示:NT_PRSTATUS、NT_PRPSINFO、NT_PLATFORM、NT_AUXV、NT_ASRS、NT_PSTATUS、NT_PSINFO、NT_PRCRED、NT_UTSNAME、NT_LWPSTATUS、NT_LWPSINFO、NT_PRPRIV、NT_PRPRIVINFO、NT_CONTENT 和 NT_ZONENAME。
通过特定的名称来限定要检查的节或程序头。例如,在包含多个符号表的文件中,可使用以下命令自行显示 .dynsym 符号表:
example% elfdump -N .dynsym filename
ELF 程序头没有名称。如果指定 –p 选项,则 name 引用程序头类型,–N 选项的行为与 –T 选项的行为相同。例如,可使用以下命令显示标识解释器的程序头:
example% elfdump -p -N PT_INTERP filename
有关匹配选项 (–I, –N, –T) 的更多信息,请参见“匹配选项”。
指定解释目标文件时要应用的操作系统 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。
转储程序头。可以使用匹配选项 (–I, –N, –T) 指定各个程序头。有关其他信息,请参见“匹配选项”。
–p 和 –w 选项互斥。在给定的 elfdump 调用中只能使用其中一个选项。
根据程序头中的信息生成并使用替代节头信息,忽略文件中包含的任何节头信息。如果文件没有节头,将显示一条警告消息,并且将自动选择此选项。节头未被系统用来执行程序。因此,恶意程序可能会剥离或更改其节头以提供误导性信息。相比之下,程序头必须准确,程序才可运行。使用源自程序头的合成节头信息,允许检查包含更改后节头的文件。
转储 .rel[a] 重定位节的内容。
转储 .SUNW_ldynsym、.dynsym 和 .symtab 符号表节的内容。对于归档文件,还将转储归档符号表。可以使用匹配选项 (–I, –N, –T) 指定各个节。可以使用特殊节名称 –N ARSYM 指定归档符号表。
对于核心文件,shndx 字段具有值 "unknown",因为该字段不包含有效值。
除了标准符号表信息外,还会在 ver 标题下提供符号的版本定义索引。
有关匹配选项 (–I, –N, –T) 的更多信息,请参见“匹配选项”。
转储 .SUNW_ldynsym 和 .dynsym 符号表节(按 .SUNW_dynsymsort 和 .SUNW_dyntlssort 符号排序节给定的顺序排序)的内容。线程本地存储 (Thread Local Storage, TLS) 符号按偏移进行排序。常规符号按地址进行排序。不显示未按排序节引用的符号。
通过特定的类型来限定要检查的节或程序头。例如,在包含多个符号表的文件中,可使用以下命令自行显示 .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) 的更多信息,请参见“匹配选项”。
转储用于栈帧展开和异常处理的节的内容。
转储 .SUNW_version 版本节的内容。
将使用匹配选项 (–I, –N, –T) 指定的节内容写入到指定的文件。例如,可以使用以下命令执行对文件的 .text 节的提取:
example% elfdump -w text.out -N .text filename
有关匹配选项 (–I, –N, –T) 的更多信息,请参见“匹配选项”。
–p 和 –w 选项互斥。在给定的 elfdump 调用中只能使用其中一个选项。
转储 .SUNW_syminfo 节的内容。通过字符标记传递符号属性。
符号定义可用作辅助过滤器。
与 D 一起指定,符号引用应当直接绑定到关联的依赖项定义。
符号定义通过副本重定位生成。
符号引用与包含定义的依赖项直接关联。
符号定义可用作标准过滤器。
符号定义可用作插入项。
符号引用指向应延迟装入的依赖项。
外部引用不能直接绑定到此符号定义。
符号与延迟(推迟)依赖项关联。
符号与功能相关联。
支持下列操作数:
指定的目标文件的名称。
–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 显示与所使用的任何匹配选项匹配的所有项的超集。使用此功能,可以通过用于指定每个项目的最简便形式来选择复杂的项目分组。
链接程序调试库
有关下列属性的说明,请参见 attributes(5):
|
ar(1)、dump(1)、elffile(1)、file(1)、nm(1)、pvs(1)、elf(3ELF)、core(4)、attributes(5)