手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

nm(1)

名称

nm - 输出目标文件的名称列表

用法概要

/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 的输出:

–A

输出目标文件的全路径名或库名称,每个目标文件一行。

–C

取消改编 C++ 符号名称后再将其输出出来。

–D

显示 SHT_DYNSYM 符号信息。这是 ld.so.1 所使用的符号表,即使在剥离的动态可执行文件中也存在。如果未指定 –D,则缺省行为是显示 SHT_SYMTAB 符号信息。

–e

请参见下文的“附注”部分。

–f

请参见下文的“附注”部分。

–g

仅写入外部(全局)符号信息。

–h

不显示输出标题数据。

–L

显示 SHT_SUNW_LDYNSYM 符号信息。此符号表包含局部函数符号。即使在剥离的动态可执行文件中也存在 SHT_SUNW_LDYNSM 符号表。这些符号扩充了 SHT_DYNSYM 符号表中的全局符号。如果未指定 –L,则缺省行为是显示 SHT_SYMTAB 符号信息。

–l

通过在 WEAK 符号的键字母后附加 * 来区分 WEAKGLOBAL 符号。

–n

在输出外部符号之前,按名称对其进行排序。

–o

输出符号的八进制(而不是十进制)值和大小(等效于 –t o)。

–p

生成易于解析的扼要输出。每个符号名称前面是其值(未定义时为空格)及以下字母之一:

A

绝对符号。

B

bss(未初始化的数据空间)符号。

C

COMMON 符号。

D

数据对象符号。

F

文件符号。

N

符号没有类型。

L

线程局部存储符号。

R

寄存器符号。

S

节符号。

T

文本符号。

U

未定义。

如果符号的绑定属性是:

LOCAL

键字母小写。

WEAK

键字母大写。如果指定了 –l 修饰符,则大写键字母后跟一个 *

GLOBAL

键字母大写。

–P

以可移植输出格式(如“标准输出”部分中所述)写入信息。

–r

在每个输出行前附加目标文件或归档文件的名称。

–R

输出归档文件名称(如果存在),后跟目标文件和符号名称。如果还指定了 –r 选项,将忽略此选项。

–s

输出节名称而不是节索引。

–t format

以指定格式写入每个数值。具体格式取决于用作 format 选项参数的单个字符:

d

以十进制写入偏移(缺省设置)。

o

以八进制写入偏移。

x

以十六进制写入偏移。

–T

请参见“附注”部分。

/usr/bin/nm

–u

仅输出未定义的符号。

/usr/xpg4/bin/nm

–u

输出每个未定义符号的长列表。请参见下文的“输出”部分。

–v

在输出外部符号之前,按值对其进行排序。

–V

在标准错误输出中输出所执行 nm 命令的版本。

–x

输出符号的十六进制(而不是十进制)值和大小(等效于 –t x)。

这些选项可以以任何顺序、单独或组合使用。如果指定了冲突的选项(例如 –v–n,或者 –o–x),则将采用第一个选项而忽略第二个选项,并向用户显示警告消息。(有关例外,请参见 –R。)

操作数

支持下列操作数:

file

目标文件、可执行文件或目标文件库的路径名称。

输出

输出

本部分介绍 nm 实用程序的输出选项。

标准输出

对于每个符号,将输出下列信息:

Index

符号的索引。(索引显示在方括号中。)

Value

符号的值为以下值之一:

  • 可重定位文件中已定义符号的节偏移。

  • 节索引为 SHN_COMMON 的符号的对齐约束。

  • 可执行文件和动态库文件中的虚拟地址。

Size

关联的目标文件的大小(以字节为单位)。

Type

符号属于以下类型之一:

NOTYPE

未指定类型。

OBJECT

数据对象,如数组或变量。

FUNC

函数或其他可执行代码。

REGI

寄存器符号(仅限 SPARC)。

SECTION

节符号。

FILE

源文件的名称。

COMMON

未初始化的通用块。

TLS

与线程局部存储关联的变量。

Bind

符号的绑定属性。

LOCAL symbols

作用域仅限于包含其定义的目标文件。

GLOBAL symbols

对要组合的所有目标文件可见。

WEAK symbols

实际上是优先级低于 GLOBAL 的全局符号。

Other

一个整数,对应于在 <sys/elf.h> 中定义的 STV_ 符号可见性值之一。

Shndx

除了三个特殊值以外,这是与符号定义相关的节头表索引。存在以下特殊值:

ABS

指示符号的值不因重定位而更改。

COMMON

指示未分配的块和值提供对齐约束。

UNDEF

指示符号未定义。

Name

符号的名称。

Object Name

指定 –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。

退出状态

将返回以下退出值:

0

成功完成。

>0

出现错误。

属性

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

/usr/bin/nm

属性类型
属性值
可用性
developer/base-developer-utilities

/usr/xpg4/bin/nm

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

另请参见

ar(1)as(1)dump(1)ld(1)ld.so.1(1)ar.h(3HEAD)a.out(4)attributes(5)environ(5)standards(5)

附注

由于目标文件格式发生了变化,以下选项已过时,可能会在将来的版本中删除。

–e

仅输出外部符号和静态符号。符号表中现在仅包含静态符号和外部符号。自动符号不再出现在符号表中。它们出现在通过 cc –g 所生成的调试信息中,可以使用 dump(1) 对其进行检查。

–f

生成完整输出。由于以前的冗余符号(如 .text.data 等)不再存在,所以生成完整输出与缺省输出完全相同。

–T

缺省情况下,nm 输出所列符号的整个名称。因为已将符号名称移到最后一行,因此消除了溢出问题,不再需要截断符号名称。