linux手册翻译 nm

devtools/2024/10/21 22:53:20/

名称

nm - 从目标文件中列出符号

符号

       nm [-A|-o|--print-file-name][-a|--debug-syms][-B|--format=bsd][-C|--demangle[=style]][-D|--dynamic][-fformat|--format=format][-g|--extern-only][-h|--help][--ifunc-chars=CHARS][-j|--format=just-symbols][-l|--line-numbers] [--inlines][-n|-v|--numeric-sort][-P|--portability][-p|--no-sort][-r|--reverse-sort][-S|--print-size][-s|--print-armap][-t radix|--radix=radix][-u|--undefined-only][-U method] [--unicode=method][-V|--version][-X 32_64][--defined-only][--no-demangle][--no-recurse-limit|--recurse-limit]][--plugin name][--size-sort][--special-syms][--synthetic][--target=bfdname][--with-symbol-versions][--without-symbol-versions][objfile...]

描述

GNU 你们从目标文件列出符号. 如果没有目标文件作为nm后面的参数, 则默认为 a.out

对每一个符号, nm 展示:

  • 符号值, 以选项选择的基数表示(见下文),默认情况下为十六进制。

  • 符号类型, 至少使用以下几种类型;其他类型则取决于目标文件格式。 如果是小写字母,则通常表示局部变量;如果是大写字母,则表示全局变量(外部变量)。 然而,有几个小写字母表示特殊全局变量(“u”、“v”和“w”)。

    • “A” 符号的绝对值, 在将来的链接中不会被改变.
    • “B”, “b” 符号在 BSS 数据节, 该部分通常包含零初始化或未初始化的数据,尽管确切的行为取决于系统。
    • “C”, “c” 这个符号很常见。通用符号是未初始化的数据。链接时,可能会出现多个具有相同名称的通用符号。如果在任何地方定义了符号,则将通用符号视为未定义引用。小写的c字符用于当符号在一个小公共的特殊部分。
    • “D”, “d” 符号在初始化数据节里面.
    • “G”, “g” 该符号位于小对象的初始化数据段中。一些目标文件格式允许更有效地访问小数据对象,例如全局int变量,而不是大型全局数组。
    • “i” 对于PE格式文件,这表明该符号位于特定于dll实现的节中。对于ELF格式文件,这表明符号是一个间接函数。这是ELF符号类型标准集的GNU扩展。它表示一个符号,如果被重定位引用,它的计算结果不会是它的地址,而是必须在运行时调用。然后运行时执行将返回要在重定位中使用的值。注意——GNU间接符号的实际显示是由——ifunc-chars命令行选项控制的。如果提供了此选项,则字符串中的第一个字符将用于全局间接函数符号。如果字符串包含第二个字符,那么它将用于局部间接函数符号。
    • “I” 该符号是对另一个符号的间接引用。
    • “N” 该符号是调试符号.
    • “n” 该符号在只读数据段中.
    • “p” 该符号位于栈展开段中。
    • “R”, “r” 该符号在只读数据段中.
    • “S”, “s” 对于小对象,该符号位于未初始化或零初始化的数据段。
    • “T”, “t” 符号在代码段中.
    • “U” 符号未定义
    • “u” 符号是独一无二的全局符号,
    • “V”, “v” 符号是一个弱对象。当弱定义符号与正常定义符号链接时,使用正常定义符号而不会出错。当链接一个弱未定义的符号并且该符号没有定义时,弱符号的值变为零,没有错误。在某些系统上,大写表示已经指定了默认值。
    • “W”, “w” 该符号是一个弱符号,没有被特别标记为弱对象符号。当弱定义符号与正常定义符号链接时,使用正常定义符号而不会出错。当链接一个弱未定义的符号并且该符号没有定义时,该符号的值将以特定于系统的方式确定而不会出错。在某些系统上,大写表示已经指定了默认值。
    • “-” 该符号是一个.out对象文件中的stabs符号。在本例中,接下来打印的值是stabs的other字段、stabs的desc字段和stabs的类型。stab符号用于保存调试信息。
    • “?” 符号类型未知,或者对象文件格式特定。

选项

这里作为备选项显示的长形式和短形式的选项是等效的。

-A, -o, --print-file-name
在每个符号前面加上找到该符号的输入文件(或存档成员)的名称,而不是在所有符号之前只标识一次输入文件。

-a, --debug-syms
显示所有的符号, 甚至包括调试符号(他们默认不显示)

-B
与 --format=bsd 相同, (为了与 MIPS nm兼容)

-C, --demangle(=style)
解码(demangle)低级符号名称为用户级名称。除了删除系统附加的任何初始下划线外,这还使c++函数名具有可读性。不同的编译器有不同的混杂风格。可选的demangling style参数可用于为编译器选择适当的demangling样式。

–no-demangle
不要解码低级的符号名(默认)

–recurse-limit
–no-recurse-limit
–recursion-limit
–no-recursion-limit
启用或禁用在分解字符串时执行的递归数量限制。由于名称混淆格式允许无限级别的递归,因此有可能创建字符串,其解码将耗尽主机上可用的堆栈空间,从而触发内存故障。该限制试图通过将递归限制为2048个嵌套级别来防止这种情况发生。
默认情况下,该限制是启用的,但为了处理真正复杂的名称,可能需要禁用它。但是请注意,如果禁用递归限制,则堆栈耗尽是可能的,并且任何关于此类事件的错误报告都将被拒绝。

-D, --dynamic
显示动态符号而不是普通符号。这只对动态对象有意义,比如某些类型的共享库。

-f format
–format=format
使用输出格式format,可以是“bsd”, “sysv”, “posix”或“just-symbols”。默认为“bsd”。只有格式的第一个字符是重要的;可以是大写,也可以是小写。

-g, --extern-only
只显示外部符号

-h, --help
显示nm和exit选项的摘要。

–ifunc-chars=CHARS
当显示GNU间接函数符号时,nm将默认在局部间接函数和全局间接函数中使用“i”字符。——ifunc-chars选项允许用户指定包含一个或两个字符的字符串。第一个字符将用于全局间接函数符号,第二个字符(如果存在)将用于局部间接函数符号。

j
与 --format=just-symbols 同.

-l, --line-number
对于每个符号,使用调试信息尝试查找文件名和行号。对于已定义的符号,查找该符号地址的行号。对于未定义的符号,查找指向该符号的重定位表项的行号。如果可以找到行号信息,则将其打印在其他符号信息之后。

–inines
当选项-l处于活动状态时,如果地址属于内联函数,则该选项将导致所有封闭作用域的源信息也打印回第一个非内联函数。例如,如果“main”内联“callee1”,而“callee1”内联“callee2”,并且address来自“callee2”,则“callee1”和“main”的源信息也将被打印出来。

-n, -v, --numeric-sort
按地址按数字排序,而不是按名称按字母顺序排序。

-p, --no-sort
不要费心按任何顺序对符号进行排序;按照遇到的顺序打印它们。

-P, --portability
使用POSIX.2标准输出格式而不是默认格式。等于-f posix

-r, --reverse-sort
反转排序的顺序(无论是数字还是字母);让最后的先来。

-S, --print-size
为“bsd”输出样式打印已定义符号的值和大小。此选项对不记录符号大小的对象格式没有影响,除非还使用——size-sort,在这种情况下显示计算大小。

-s, --print-armap
当从归档成员中列出符号时,包括索引:一个映射(由ar或ranlib存储在归档中),其中模块包含哪些名称的定义。

-t radix, --radix=radix
使用基数作为打印符号值的基数。十进制必须是d,八进制必须是0,十六进制必须是x。

-u, --undefined-only
只显示未定义的符号(每个对象文件的外部符号)。

-U [d|i|l|e|x|h]
–unicode=[default|invalid|locale|escape|hex|highlight]
控制在字符串中显示UTF-8编码的多字节字符。默认值(–unicode=default)是不对它们进行特殊处理。–unicode=locale选项显示当前语言环境中的序列,该语言环境可能支持也可能不支持它们。选项–unicode=hex和–unicode=invalid将它们显示为用尖括号或花括号括起来的十六进制字节序列。

–unicode=escape选项将它们显示为转义序列(\uxxxx),而–unicode=highlight选项将它们显示为以红色突出显示的转义序列(如果输出设备支持)。颜色的目的是引起人们注意可能不期望出现的unicode序列。

-V, --version
显示nm的版本号并退出。

-X
为了与AIX版本的nm兼容,忽略此选项。它接受一个形参,必须是字符串32_64。AIX nm的默认模式为- x32, GNU nm不支持。

–defined-only
仅显示每个目标文件的定义符号。

–plugin name
加载名为name的插件以添加对额外目标类型的支持。此选项仅在工具链构建时启用插件支持时可用。
如果没有提供–plugin,但已经启用了插件支持,则nm将按字母顺序遍历${libdir}/bfd-plugins中的文件,并使用第一个声明有问题的对象的插件。
请注意,这个插件搜索目录不是ld的-plugin选项使用的目录。为了让nm使用链接器插件,它必须被复制到${libdir}/ bfd-plugins目录中。对于基于GCC的编译,链接器插件称为liblto_plugin.so.0.0.0。对于基于Clang的编译,它被称为LLVMgold.so。GCC插件始终与早期版本向后兼容,因此只需复制最新的一个。

–size-sort
按大小对符号进行排序。对于ELF对象,符号大小从ELF中读取,对于其他对象类型,符号大小计算为符号值与下一个大值的符号值之间的差。如果使用“bsd”输出格式,则打印符号的大小,而不是值,并且必须使用-S以便打印大小和值。

–special-syms
显示具有特定于目标的特殊含义的符号。这些符号通常被目标用于一些特殊处理,当被包含在正常符号列表中时通常没有帮助。例如,对于ARM目标,该选项将跳过用于标记ARM代码、THUMB代码和数据之间转换的映射符号。

–synthetic
在输出中包含合成符号。这些是由链接器为各种目的创建的特殊符号。默认情况下不会显示它们,因为它们不是二进制文件原始源代码的一部分。

–with-symbol-versions
–without-symbol-versions
启用或禁用符号版本信息的显示。版本字符串显示为符号名称的后缀,前面加一个@字符。例如:foo@VER_1。如果该版本是解析对该符号的未版本引用时使用的默认版本,那么它将显示为前面有两个@字符的后缀。例如foo@@VER_2。缺省情况下,显示符号版本信息。

–target=bfdname
指定目标代码格式,而不是系统的默认格式。

@file
从文件中读取命令行选项。选项read被插入到原来的@file选项的位置。如果文件不存在,或者无法读取,那么该选项将被按字面处理,而不会被删除。
file中的选项以空格分隔。通过将整个选项用单引号或双引号括起来,可以将空白字符包含在选项中。任何字符(包括反斜杠)都可以通过在要包含的字符前加上反斜杠来包含。文件本身可能包含额外的@file选项;任何这样的选项都将被递归地处理。

SEE ALSO

ar(1), objdump(1), ranlib(1), and the Info entries for binutils.

版权

在GNU自由文档许可证1.3版或自由软件基金会发布的任何更新版本的条款下,被授予复制、分发和/或修改本文档的许可;没有固定章节,没有封面文本,也没有封底文本。该许可证的副本包含在题为“GNU自由文档许可证”的部分中。

binutils-2.38                       2023-06-04                   NM(1)

http://www.ppmy.cn/devtools/125777.html

相关文章

rk3588调试es8388语音编解码IC小结

本次调试es8388语音编解码IC,按照以下思路(如果出现内核崩溃的问题,建议可以同步下rk原厂代码): 1、dts的配置 &i2c7 { //i2c总线确认status "okay";pinctrl-names "default";pinctrl-0 …

排序算法笔记

1. 冒泡排序(Bubble Sort) 原理:通过重复遍历数组,每次比较相邻元素并交换它们的位置,使较大的元素逐步“冒泡”到数组的末尾。时间复杂度:O(n)空间复杂度:O(1)稳定性:稳定 2. 选择…

【bug】paddleocr draw_ocr_box_txt ValueError: incorrect coordinate type

【bug】paddleocr draw_ocr_box_txt ValueError: incorrect coordinate type 环境 python 3.10.15pillow 10.4.0 paddleocr 2.8.1错误详情 错误文本 Traceback (most recent call last):....draw_left.polygon(box, fillcolor)ValueError: inco…

unity 调整skinweight (皮肤权重),解决:衣服穿模问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、skinweight 是什么?二、代码控制:可根据平台切换1.引入库 总结 前言 最近遇到一个问题,人物模型的衣服穿模&#xff08…

EventSource是什么,和axios区别,以及SSE是什么

EventSource、axios以及SSE(Server-Sent Events)在Web开发中各自扮演着不同的角色,以下是它们的详细解释及区别: EventSource 定义:EventSource是浏览器提供的用于接收SSE事件的接口。它允许客户端通过HTTP协议与服务…

GaussDB 主备版本8 -数据库对象 学习

1 表空间 1.1 GaussDB自带了两个表空间:pg_default和pg_global 1.1.1 默认表空间pg_default:用来存储非共享系统表、用户表、用户表index、临时表、临时表index、内部临时表的默认表空间。对应存储目录为实例数据目录下的base目录。 1.1.2 共享表空间pg…

OpenCV视频I/O(20)视频写入类VideoWriter之用于将图像帧写入视频文件函数write()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::VideoWriter::write() 函数用于将图像帧写入视频文件。 该函数/方法将指定的图像写入视频文件。图像的大小必须与打开视频编写器时指定的大…

小牛问题(c++)

题目描述 一头刚出生的小母牛,4年后生一头小母牛,即第4年会生一头小母牛,以后每年生一头,现有一头刚出生的小母牛,问n年后共有多少头牛? 输入 输入n 输出 输出共有多少头牛 样例输入 复制 10 样例输…