nm命令的使用教程
nm 命令显示关于指定 File 中符号的信息,文件可以是对象文件、可执行文件或对象文件库。下面跟着学习啦小编一起来了解一下nm 命令怎么用吧。
nm 命令用法详解
用途
显示有关对象文件、可执行文件以及对象文件库里的符号信息。
语法
nm [ -A ] [ -C ] [ -X {32|64|32_64|d64| any}] [ -f ] [ -h ] [ -l ] [ -p ] [ -r ] [ -T ] [ -v ] [ -B | -P] [ -e | -g | -u ] [ -d | -o | -x | -tFormat ] File ...
描述
nm 命令显示有关指定 File 中符号的信息,文件可以是对象文件、可执行文件或对象文件库。 如果文件没有包含符号信息,nm 命令报告该情况,但不将它解释为出错条件。nm 命令缺省情况下报告十进制符号表示法下的数字值。
nm 命令将以下符号信息写到标准输出:
库或对象名
如果您指定了 -A 选项,那么 nm 命令 只报告与该文件有关的或者库或者对象名。
符号名称
符号类型
nm 命令使用以下符号(用同样的字符表示弱符号作为全局符号)之一来表示文件符号类型:
项目 | 描述 |
---|---|
A | Global absolute 符号。 |
a | Local absolute 符号。 |
B | Global bss 符号。 |
b | Local bss 符号。 |
D | Global data 符号。 |
d | Local data 符号。 |
f | Source file name 符号。 |
L | Global thread-local 符号 (TLS)。 |
l | Static thread-local 符号 (TLS)。 |
T | Global text 符号。 |
t | Local text 符号。 |
U | Undefined 符号。 |
值
大小
如果可应用,nm 命令报告与符号有关的大小。
标志
项目 | 描述 |
---|---|
-A | 每行或者显示完整路径名或者显示对象库名。 |
-B |
在 Berkeley 软件分发 (BSD) 格式中显示输出:
|
-C |
限制解码 (demangle) C++ 名称。缺省是解码所有 C++ 符号名。
注: C++ 对象文件中的符号在被使用前它们的名称已经被解码了。
|
-d | 用十进制显示符号的值和大小。这是缺省值。 |
-e | 只显示静态的和外部的(全局)符号。 |
-f | 显示完整的输出,包括冗余的 .text、.data 以及 .bss 符号,这些在通常都是被限制的。 |
-g | 只显示外部的(全局)符号。 |
-h | 限制输出头数据的显示。 |
-l |
通过给 WEAK 符号的编码键附加一个 * 来区分 WEAK 和 GLOBAL 符号。 如果和 -P 选项一起使用,WEAK 符号的符号类型显示如下:
|
-o | 用八进制而不是十进制数来显示符号的值和大小。 |
-P |
以标准可移植输出格式显示信息:
该格式以十六进制符号表示法显示数字值,除非您用 -t、-d 或 -o 标志指定不同的格式。 如果您指定了 -A 标志 -P 标志只显示库/对象名字段。同样,-P 标志只显示大小适用的符号大小字段。 |
-p | 不排序。输出按符号表顺序显示。 |
-r | 倒序排序。 |
-t Format |
显示指定格式下的数字值,其中 Format 参数是以下符号表示法之一:
|
-T | 将可能会溢出它的列的每个名称截短,使显示的名称的最后一个字符是星号。 缺省情况下,nm 显示列出的符号的全名,并且一个比为其设置的列的宽度长的名称会引起名称后的每个列无法对齐。 |
-u | 只显示未定义符号。 |
-v | 按值而不是按字母表顺序排序输出。 |
-x | 用十六进制而不是十进制数来显示符号的值和大小。 |
-X mode |
指定 nm 应该检查的对象文件的类型。 mode 必须是下列之一:
缺省值为处理 32 位对象文件(忽略 64 位对象)。mode 也可用 OBJECT_MODE 环境变量来设置。例如,OBJECT_MODE=64 使nm 处理任何 64 位对象并且忽略 32 位对象。-X 标志覆盖了 OBJECT_MODE 变量。 |
注: nm 命令支持 —(双连字符)标志。如果文件名会被曲解为一个选项,该标志区别于 File 操作数。 例如,要指定文件名以连字符开始,请使用 — 标志。
退出状态
此命令返回以下退出值:
项目 | 描述 |
---|---|
0 | 成功完成。 |
>0 | 发生错误。 |
示例
要列出 a.out 对象文件的静态和外部符号,请输入:
nm -e a.out
要以十六进制显示符号大小和值并且按值排序符号,请输入:
nm -xv a.out
要显示 libc.a 中所有 64 位对象符号,忽略所有 32 位对象:
nm -X64 /usr/lib/libc.a
用途
显示有关对象文件、可执行文件以及对象文件库里的符号信息。
语法
nm [ -A ] [ -C ] [ -X {32|64|32_64|d64| any}] [ -f ] [ -h ] [ -l ] [ -p ] [ -r ] [ -T ] [ -v ] [ -B | -P] [ -e | -g | -u ] [ -d | -o | -x | -tFormat ] File ...
描述
nm 命令显示有关指定 File 中符号的信息,文件可以是对象文件、可执行文件或对象文件库。 如果文件没有包含符号信息,nm 命令报告该情况,但不将它解释为出错条件。nm 命令缺省情况下报告十进制符号表示法下的数字值。
nm 命令将以下符号信息写到标准输出:
库或对象名
如果您指定了 -A 选项,那么 nm 命令 只报告与该文件有关的或者库或者对象名。
符号名称
符号类型
nm 命令使用以下符号(用同样的字符表示弱符号作为全局符号)之一来表示文件符号类型:
项目 | 描述 |
---|---|
A | Global absolute 符号。 |
a | Local absolute 符号。 |
B | Global bss 符号。 |
b | Local bss 符号。 |
D | Global data 符号。 |
d | Local data 符号。 |
f | Source file name 符号。 |
L | Global thread-local 符号 (TLS)。 |
l | Static thread-local 符号 (TLS)。 |
T | Global text 符号。 |
t | Local text 符号。 |
U | Undefined 符号。 |
值
大小
如果可应用,nm 命令报告与符号有关的大小。
标志
项目 | 描述 |
---|---|
-A | 每行或者显示完整路径名或者显示对象库名。 |
-B |
在 Berkeley 软件分发 (BSD) 格式中显示输出:
|
-C |
限制解码 (demangle) C++ 名称。缺省是解码所有 C++ 符号名。
注: C++ 对象文件中的符号在被使用前它们的名称已经被解码了。
|
-d | 用十进制显示符号的值和大小。这是缺省值。 |
-e | 只显示静态的和外部的(全局)符号。 |
-f | 显示完整的输出,包括冗余的 .text、.data 以及 .bss 符号,这些在通常都是被限制的。 |
-g | 只显示外部的(全局)符号。 |
-h | 限制输出头数据的显示。 |
-l |
通过给 WEAK 符号的编码键附加一个 * 来区分 WEAK 和 GLOBAL 符号。 如果和 -P 选项一起使用,WEAK 符号的符号类型显示如下:
|
-o | 用八进制而不是十进制数来显示符号的值和大小。 |
-P |
以标准可移植输出格式显示信息:
该格式以十六进制符号表示法显示数字值,除非您用 -t、-d 或 -o 标志指定不同的格式。 如果您指定了 -A 标志 -P 标志只显示库/对象名字段。同样,-P 标志只显示大小适用的符号大小字段。 |
-p | 不排序。输出按符号表顺序显示。 |
-r | 倒序排序。 |
-t Format |
显示指定格式下的数字值,其中 Format 参数是以下符号表示法之一:
|
-T | 将可能会溢出它的列的每个名称截短,使显示的名称的最后一个字符是星号。 缺省情况下,nm 显示列出的符号的全名,并且一个比为其设置的列的宽度长的名称会引起名称后的每个列无法对齐。 |
-u | 只显示未定义符号。 |
-v | 按值而不是按字母表顺序排序输出。 |
-x | 用十六进制而不是十进制数来显示符号的值和大小。 |
-X mode |
指定 nm 应该检查的对象文件的类型。 mode 必须是下列之一:
缺省值为处理 32 位对象文件(忽略 64 位对象)。mode 也可用 OBJECT_MODE 环境变量来设置。例如,OBJECT_MODE=64 使nm 处理任何 64 位对象并且忽略 32 位对象。-X 标志覆盖了 OBJECT_MODE 变量。 |
注: nm 命令支持 —(双连字符)标志。如果文件名会被曲解为一个选项,该标志区别于 File 操作数。 例如,要指定文件名以连字符开始,请使用 — 标志。
退出状态
此命令返回以下退出值:
项目 | 描述 |
---|---|
0 | 成功完成。 |
>0 | 发生错误。 |
示例
要列出 a.out 对象文件的静态和外部符号,请输入:
nm -e a.out
要以十六进制显示符号大小和值并且按值排序符号,请输入:
nm -xv a.out
要显示 libc.a 中所有 64 位对象符号,忽略所有 32 位对象:
nm -X64 /usr/lib/libc.a