列出目标文件中的标识符
nm [-aADglnopPrsSuv] [-C|--demangle[=style]] [--defined-only] [-f fmt] [--no-demangle] [--size-sort] [-t radix] [--target=bfdname] @file [objfiles]
nm [--help] [-V|--version]
nm命令用于显示指定目标文件中的标识符。其中,objfiles是一个或一组目标文件。如果未指定目标文件,nm假定目标文件是a.out。
对于每一个标识符,nm将会以十六进制数值(除非“-t”选项另有指定)显示标识符的值、标识符的类型和标识符的名字。常见的标识符类型如下(其中,小写的类型表示局部标识符,大写的类型表示全局或外部标识符。根据目标文件格式,也许还存在其他类型):
A 标识符的值是绝对值,即使在连接时也不能改变。
B, b 标识符位于未初始化的数据段(即BSS)。
C 通用标识符(通用标识符是未初始化的数据)。
D, d 标识符位于已初始化的数据段。
G, g 标识符是位于已初始化数据段的小数据对象。
i 对于ELF格式的目标文件而言,标识符是一个间接函数。
N 标识符是一个调试符号。
p 标识符位于栈的展开段。
R, r 标识符位于只读的数据段。
S, s 标识符位于小型目标文件的未初始化数据段。
T, t 标识符位于代码段。
U 未定义的标识符。
u 标识符是一个唯一的全局标识符。
V, v 标识符是一个弱对象。
W, w 标识符是一个没有特别标记为弱对象的弱标识符。
- a.out目标文件中的stab标识符(stab标识符主要用于存储调试信息)。
? 未知的标识符类型,也许是目标文件格式特定的标识符。
-a, --debug-syms 显示所有的标识符,包括仅用于调试的标识符(这一部分通常不显示)。
-A, -o, --print-file-name 在每个标识符前面插入输入文件(或档案文件中的成员模块)的名字,而不是按常规的做法,仅仅在所有标识符之前显示一次输入文件。
-C, --demangle[=style] 把低级的标识符名译成用户级的标识符名,删除系统增加的下画线首字符,使得C++的函数名更容易辨认与理解。
-D, --dynamic 显示动态标识符而非普通标识符。这个选项仅适用于动态目标文件,如某些类型的共享库函数。
-f fmt, --format=fmt 按照指定的格式显示标识符,nm支持的格式是bsd(默认)、sysv和posix。在指定显示格式时,实际上只需给出第一个字符,而且大小写均可。
-g, --extern-only 仅显示外部标识符。
-l, --line-numbers 对于每一个标识符,使用调试信息尝试找出其文件名及行号。对于已定义的标识符,寻找标识符地址的行号;对于未定义的标识符,寻找引用标识符的重定位入口的行号。如果能够找到行号信息,在其他标识符信息之后显示行号。
-n, -v, --numeric-sort 按照其地址的数字顺序而非其名字的字符顺序对标识符进行排序。
-p, --no-sort 以遇到的顺序显示标识符,而不是采用其他任何顺序对标识符进行排序。
-P, --portability 使用POSIX.2标准(而非默认)的输出格式。相当于指定了“-f posix”选项。
-r, --reverse-sort 逆向排序(不管是数字还是字符)。
-s, --print-armap 当显示的标识符位于档案文件的成员模块时,显示其标识符索引表(由ar或ranlib创建并存储在档案文件中),从而显示一个成员模块中包含的标识符定义。
-S, --print-size 在bsd风格的输出数据中,显示标识符的值及标识符数据类型的大小。对于不记录标识符数据类型大小的目标文件而言,这个选项不起任何作用,除非也指定了“--size-sort”选项,此时nm会显示计算出来的标识符数据类型的大小。
-t radix, --radix=radix 使用指定的基数显示标识符的值。其中radix可以是d(表示十进制数值)、o(表示八进制数值)或x(表示十六进制数值)。
-u, --undefined-only 仅显示未定义的标识符(目标文件中引用的外部符号)。
--defined-only 仅显示目标文件定义的标识符。
--no-demangle 禁止翻译低级的标识符名(默认的做法)。
--size-sort 按照标识符数据类型的大小排序。如果采用bsd风格输出数据,显示标识符数据类型的大小,否则显示标识符的值。如果二者都需要显示,必须使用“-S”选项。
--target=bfdname 指定目标代码的格式(而非系统的默认格式)。
@file 从指定的文件中读取命令行选项。把读取的选项插入@file的位置,取而代之。选项的写法如同命令行,多个选项之间需加空格分隔符。文件中也可以包括@file选项,采用同样的方法递归处理。
1. 显示所有的标识符,包括调试标识符。
$ nm -a mf
2. 显示未定义的标识符,即目标文件中引用的外部符号。
$ nm -u mf
索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z