初学者 Linux nm 命令教程(10 个示例)
在此页
- Linux nm 命令
- Q1。 nm 命令如何工作?
- Q2。如何让文件名在输出中的每个符号之前?
- Q3。如何让 nm 也显示调试器符号?
- Q4。如何使 nm 解码低级符号名称?
- Q5。如何让nm只显示动态符号?
- Q6。如何使用不同的 nm 输出格式?
- Q7。如何让nm只显示外部符号?
- Q8。 nm 提供了哪些排序选项?
- 问题 9。如何让 nm 只显示未定义的符号?
- Q10。如何让 nm 只显示定义的符号?
- 结论
如果您是 Linux 用户,并且还从事编码和系统级软件开发,您可能会发现自己处于需要与目标文件中的符号相关的信息的情况。您会很高兴知道存在一个命令行实用程序 - 称为 nm - 您可以在这些情况下使用它。
在本教程中,我们将使用一些易于理解的示例来讨论该工具的基础知识。但在我们这样做之前,值得一提的是,这里的所有示例都已经在 Ubuntu 22.04 LTS 机器上进行了测试。
Linux nm 命令
nm 命令行实用程序基本上列出了目标文件中的符号。继承人的工具语法:
nm [OPTIONS] OBJECT-FILENAME
以下是命令手册页对其的解释:
GNU nm lists the symbols from object files objfile.... If no object
files are listed as arguments, nm assumes the file a.out.
以下是一些问答式示例,可让您更好地了解 nm 的工作原理。
Q1。 nm 命令如何工作?
该命令的基本用法非常简单——您所要做的就是运行 nm 命令并将目标文件的名称作为输入传递给它。例如,我将 nm 命令与 apl 二进制文件一起使用:
nm apl
以下屏幕截图显示了上述命令产生的输出类型:

输出中产生的三列分别代表符号值、符号类型和符号名称。有几种类型的符号 - 要了解完整的详细信息,请前往 nm 命令手册页。
Q2。如何让文件名在输出中的每个符号之前?
您可以使用 -A 命令行选项执行此操作。
nm -A [obj-file]
例如:
nm -A apl

所以你可以看到文件名被添加在每一行的开头。
Q3.如何让 nm 也显示调试器符号?
要使 nm 在输出中也显示调试器符号,请使用 -a 命令行选项。
nm -a [obj-filename]
例如:
nm -a apl
上面的命令将显示所有符号,包括通常不列出的调试器专用符号。
Q4.如何使 nm 解码低级符号名称?
如果需要,您甚至可以强制 nm 将低级符号名称解码为用户级名称。您可以使用 -C 命令行选项执行此操作。
nm -C [obj-file]
例如:
nm -C apl
以下是手册页中关于此选项的说明:
Besides removing any initial underscore prepended by the system,
this makes C++ function names readable. Different compilers have
different mangling styles. The optional demangling style argument
can be used to choose an appropriate demangling style for your
compiler.
Q5.如何让nm只显示动态符号?
如果您希望 nm 仅显示动态符号而不是普通符号,请使用 -D 命令行选项。
nm -D [obj-file]
例如:
nm -D apl

所以你可以看到 nm 只在输出中生成动态符号。
Q6.如何使用不同的 nm 输出格式?
要启用不同的输出格式,请使用 -f 命令行选项。默认情况下,输出以 bsd 格式生成,但是,如果需要,您也可以启用 sysv 和 posix 格式。
nm -f [format] [obj-filename]
例如:
nm -f posix apl

现在观察格式的变化。
Q7.如何让nm只显示外部符号?
这可以使用 -g 命令行选项来实现。
nm -g [obj-file]
例如:
nm -g apl

Q8. nm 提供了哪些排序选项?
默认情况下,符号按字母顺序排序。但是,如果需要,您可以使用 -n 命令行选项按地址对它们进行数字排序。
nm -n [objfile]
例如:
nm -n apl

所以你可以看到输出现在是按地址排序的。
如果您不希望 nm 应用任何类型的排序(包括它使用的默认排序),请使用 -p 命令行选项。继续,要反转任何现有排序,请使用 -r 命令行选项。
Q9.如何让 nm 只显示未定义的符号?
您可以使用 -u 命令行选项执行此操作。
nm -u [obj-file]
例如:
nm -u apl

Q10。如何让 nm 只显示定义的符号?
要使 nm 仅显示定义的符号,请使用 --defined-only 命令行选项。
nm --defined-only [obj-file]
例如:
nm --defined-only apl

结论
同意,nm 命令有一个小众受众,但我的个人经验表明,即使您不认为自己是该受众的一部分,也请记住这样的工具是存在的。对于那些想要使用此实用程序的人来说,完成此处所有示例的练习后,请前往 nm 手册页了解更多信息。