适用于初学者的Linux nm命令教程(10个示例)

适用于初学者的Linux nm命令教程(10个示例)

如果您是一位也参与系统级软件开发的Linux用户,那么您可能会发现自己处于以下情况:需要与目标文件中的符号相关的信息。 你会很高兴知道存在一个名为nm的命令行工具,你可以在这些情况下使用它。

在本教程中,我们将使用一些易于理解的示例来讨论此工具的基础知识。 但在这之前,值得一提的是,这里的所有示例都已在Ubuntu 16.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手册页以了解更多信息。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏