nm - 列出来自目标文件的符号
概要
nm [ -a | --debug-syms ] [ -g | - 仅限于外部 ]
[ -B ] [ -C | --demangle [= style ]] [ -D | - 动态 ]
[ -S | --print-size ] [ -s | --print-armap ]
[ -A | -o | --print-file-name ]
[ -n | -v | --numeric-sort ] [ -p | --no-sort ]
[ -r | --reverse-sort ] [ --size-sort ] [ -u | --undefined-only ]
[ -t radix | --radix = radix ] [ -P | - 便携性 ]
[ --target = bfdname ] [ -f format | --format = 格式 ]
[ - 仅限定义 ] [ -l | --line-numbers ] [ --no-demangle ]
[ -V | --version ] [ -X 32_64 ] [ --help ] [ objfile ...]
描述
GNU nm列出了来自目标文件objfile ....的符号。如果没有目标文件被列为参数, nm将假定文件a.out 。
对于每个符号, nm显示:
*
符号值,以选项(请参阅下文)选定的基数,或默认情况下为十六进制。
*
符号类型。 至少使用以下类型; 其他的也取决于目标文件格式。 如果小写,符号是本地的; 如果大写,符号是全局的(外部的)。
一个
该符号的值是绝对的,并且不会通过进一步链接进行更改。
乙
该符号位于未初始化的数据部分(称为BSS)中。
C
该符号很常见。 常用符号是未初始化的数据。 链接时,多个常用符号可能会以相同的名称出现。 如果符号是在任何地方定义的,则通用符号将被视为未定义的引用。
d
该符号位于已初始化的数据部分。
G
该符号位于小型对象的初始化数据部分。 某些目标文件格式允许更有效地访问小数据对象,例如全局int变量,而不是大型全局数组。
一世
该符号是对另一个符号的间接引用。 这是很少使用的a.out目标文件格式的GNU扩展。
ñ
该符号是一个调试符号。
[R
该符号位于只读数据部分。
小号
该符号位于未初始化的数据部分中,用于小型对象。
Ť
该符号位于文本(代码)部分。
ü
该符号未定义。
V
一个符号是一个弱对象。 当一个弱定义的符号与一个正常定义的符号链接时,正常定义的符号被使用而没有错误。 当一个弱的未定义符号被链接并且该符号未被定义时,弱符号的值变为零而没有错误。
w ^
该符号是一个弱符号,没有被特别标记为弱对象符号。 当一个弱定义的符号与一个正常定义的符号链接时,正常定义的符号被使用而没有错误。 当一个弱的未定义符号被链接并且该符号未被定义时,弱符号的值变为零而没有错误。
-
该符号是a.out目标文件中的一个插入符号。 在这种情况下,打印的下一个值是其他字段的刺,刺stc desc字段和刺类型。 Stabs符号用于保存调试信息。
?
符号类型未知,或者特定的目标文件格式。
*
符号名称。
OPTIONS
这里显示的作为替代方案的长期和短期形式是相同的。
-一个
-o
--print文件名称
在每个符号前面加上找到它的输入文件(或存档成员)的名称,而不是在所有符号之前标识一次输入文件。
-一个
--debug-SYMS
显示所有符号,即使只有调试器符号; 通常这些都没有列出。
-B
与--format = bsd相同(为了兼容MIPS nm )。
-C
--demangle [= 样式 ]
将低级符号名称解码( demangle )为用户级名称。 除了删除由系统预设的任何初始下划线外,这使得C ++函数名称可读。 不同的编译器有不同的移动样式。 可选的demangling样式参数可用于为编译器选择合适的demangling样式。
--no-还原函数
不要去掉低级别的符号名称。 这是默认设置。
-D
- 动态
显示动态符号而不是普通符号。 这只对动态对象有意义,比如某些类型的共享库。
-f 格式
--format = 格式
使用输出格式格式 ,可以是“bsd”,“sysv”或“posix”。 默认值是“bsd”。 只有格式的第一个字符是重要的; 它可以是大写或小写。
-G
--extern只
只显示外部符号。
-l
--line号码
对于每个符号,使用调试信息来尝试查找文件名和行号。 对于定义的符号,查找符号地址的行号。 对于未定义的符号,请查找引用符号的重定位条目的行号。 如果可以找到行号信息,请在其他符号信息之后打印。
-n
-v
--numeric排序
按照地址对数字符号进行排序,而不是按名称按字母顺序排列。
-p
--no排序
不要打扰以任何顺序排列符号; 按照遇到的顺序打印它们。
-P
- 可移植性
使用POSIX.2标准输出格式而不是默认格式。 相当于-f posix 。
-S
--print大小
打印“bsd”输出格式的已定义符号的大小。
-s
--print-armap
列出归档成员中的符号时,请包括索引:哪些模块包含哪些名称的定义的映射(由ar或ranlib存储在归档中)。
-r
--reverse排序
颠倒排序顺序(无论是数字还是字母); 让最后一个先到。
--size排序
按大小排序符号。 大小的计算方法是符号值与具有下一个较高值的符号值之间的差值。 符号的大小被打印出来,而不是数值。
-t 基数
--radix = radix
使用基数作为打印符号值的基数。 它必须是十进制的d ,八进制的o或十六进制的x 。
--target = bfdname
指定目标代码格式,而不是系统的默认格式。
-u
--undefined只
仅显示未定义的符号(每个对象文件的外部符号)。
--defined只
仅显示每个对象文件的定义符号。
-V
- 版
显示nm的版本号并退出。
-X
为了与AIX版本的nm兼容,此选项被忽略。 它需要一个参数,它必须是字符串32_64 。 AIX nm的默认模式对应于-X 32 ,GNU nm不支持该模式。
- 帮帮我
显示nm选项的摘要并退出。
也可以看看
ar (1), objdump (1), ranlib (1)和binutils的Info条目。
重要提示:使用man命令( %man )查看特定计算机上的命令使用方式。