/usr/bin/nm [-ACDhLlnPpRrsTVv] [-efox] [-g | -u] [-t format] file...
/usr/xpg4/bin/nm [-ACDhLlnPpRrsTVv] [-efox] [-g | -u] [-t format] file...
nm 实用程序显示由 file 指定的每个 ELF 目标文件的符号表。
如果某个有效的输入文件没有可用的符号信息,nm 实用程序将报告该情况,但不将其视为出错。
可以使用以下选项控制 nm 的输出:
输出目标文件的全路径名或库名称,每个目标文件一行。
取消改编 C++ 符号名称后再将其输出出来。
显示 SHT_DYNSYM 符号信息。这是 ld.so.1 所使用的符号表,即使在剥离的动态可执行文件中也存在。如果未指定 –D,则缺省行为是显示 SHT_SYMTAB 符号信息。
请参见下文的“附注”部分。
请参见下文的“附注”部分。
仅写入外部(全局)符号信息。
不显示输出标题数据。
显示 SHT_SUNW_LDYNSYM 符号信息。此符号表包含局部函数符号。即使在剥离的动态可执行文件中也存在 SHT_SUNW_LDYNSM 符号表。这些符号扩充了 SHT_DYNSYM 符号表中的全局符号。如果未指定 –L,则缺省行为是显示 SHT_SYMTAB 符号信息。
通过在 WEAK 符号的键字母后附加 * 来区分 WEAK 和 GLOBAL 符号。
在输出外部符号之前,按名称对其进行排序。
输出符号的八进制(而不是十进制)值和大小(等效于 –t o)。
生成易于解析的扼要输出。每个符号名称前面是其值(未定义时为空格)及以下字母之一:
绝对符号。
bss(未初始化的数据空间)符号。
COMMON 符号。
数据对象符号。
文件符号。
符号没有类型。
线程局部存储符号。
寄存器符号。
节符号。
文本符号。
未定义。
如果符号的绑定属性是:
键字母小写。
键字母大写。如果指定了 –l 修饰符,则大写键字母后跟一个 *
键字母大写。
以可移植输出格式(如“标准输出”部分中所述)写入信息。
在每个输出行前附加目标文件或归档文件的名称。
输出归档文件名称(如果存在),后跟目标文件和符号名称。如果还指定了 –r 选项,将忽略此选项。
输出节名称而不是节索引。
以指定格式写入每个数值。具体格式取决于用作 format 选项参数的单个字符:
以十进制写入偏移(缺省设置)。
以八进制写入偏移。
以十六进制写入偏移。
请参见“附注”部分。
仅输出未定义的符号。
输出每个未定义符号的长列表。请参见下文的“输出”部分。
在输出外部符号之前,按值对其进行排序。
在标准错误输出中输出所执行 nm 命令的版本。
输出符号的十六进制(而不是十进制)值和大小(等效于 –t x)。
这些选项可以以任何顺序、单独或组合使用。如果指定了冲突的选项(例如 –v 和 –n,或者 –o 和 –x),则将采用第一个选项而忽略第二个选项,并向用户显示警告消息。(有关例外,请参见 –R。)
支持下列操作数:
目标文件、可执行文件或目标文件库的路径名称。
本部分介绍 nm 实用程序的输出选项。
对于每个符号,将输出下列信息:
符号的索引。(索引显示在方括号中。)
符号的值为以下值之一:
可重定位文件中已定义符号的节偏移。
节索引为 SHN_COMMON 的符号的对齐约束。
可执行文件和动态库文件中的虚拟地址。
关联的目标文件的大小(以字节为单位)。
符号属于以下类型之一:
未指定类型。
数据对象,如数组或变量。
函数或其他可执行代码。
寄存器符号(仅限 SPARC)。
节符号。
源文件的名称。
未初始化的通用块。
与线程局部存储关联的变量。
符号的绑定属性。
作用域仅限于包含其定义的目标文件。
对要组合的所有目标文件可见。
实际上是优先级低于 GLOBAL 的全局符号。
一个整数,对应于在 <sys/elf.h> 中定义的 STV_ 符号可见性值之一。
除了三个特殊值以外,这是与符号定义相关的节头表索引。存在以下特殊值:
指示符号的值不因重定位而更改。
指示未分配的块和值提供对齐约束。
指示符号未定义。
符号的名称。
指定 –A 时目标文件或库的名称。
如果指定了 –P 选项,将使用以下可移植格式显示以前的信息。三个版本的差异取决于是否分别指定了 –t d、–t o 还是 –t x:
"%s%s %s %d %d\n", library/object name, name, type, value, size
"%s%s %s %o %o\n", library/object name, name, type, value, size
"%s%s %s %x %x\n", library/object name, name, type, value, size
其中,type 的格式设置方式与 –p 选项相同,library/object name 的格式设置方式如下:
如果未指定 –A,则 library/object name 为空字符串。
如果指定了 –A,并且对应的 file 操作数未指定库:
"%s: ", file
如果指定了 –A,并且对应的 file 操作数指定了库。在这种情况下,object file 指定库中包含要描述的符号的目标文件:
"%s[%s]: ", file, object file
如果未指定 –A,并且指定了多个 file 操作数,或者仅指定了一个 file 操作数但该操作数指定了库,则 nm 将在包含这些符号的行之前使用以下格式写入一行,以标识包含以下符号的目标文件:
如果对应的 file 操作数未指定库:
"%s:\n", file
如果对应的 file 操作数指定了库;在这种情况下,object file 是库中包含以下符号的文件的文件名:
"%s[%s]:\n", file, object file
如果指定了 –P,但未指定 –t,则格式与指定 –t x 时的格式相同。
有关影响 nm 执行的以下环境变量的描述,请参见 environ(5):LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES 和 NLSPATH。
将返回以下退出值:
成功完成。
出现错误。
有关下列属性的说明,请参见 attributes(5):
|
|
ar(1)、as(1)、dump(1)、ld(1)、ld.so.1(1)、ar.h(3HEAD)、a.out(4)、attributes(5)、environ(5)、standards(5)
由于目标文件格式发生了变化,以下选项已过时,可能会在将来的版本中删除。
仅输出外部符号和静态符号。符号表中现在仅包含静态符号和外部符号。自动符号不再出现在符号表中。它们出现在通过 cc –g 所生成的调试信息中,可以使用 dump(1) 对其进行检查。
生成完整输出。由于以前的冗余符号(如 .text、.data 等)不再存在,所以生成完整输出与缺省输出完全相同。
缺省情况下,nm 输出所列符号的整个名称。因为已将符号名称移到最后一行,因此消除了溢出问题,不再需要截断符号名称。