Nm - Linux命令 - UNIX命令

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

列出归档成员中的符号时,请包括索引:哪些模块包含哪些名称的定义的映射(由arranlib存储在归档中)。

-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 )查看特定计算机上的命令使用方式。