Linux nm命令详解_linux中nmcli命令使用及网络配置

Linux nm命令详解_linux中nmcli命令使用及网络配置

编码文章call10242025-10-02 15:11:506A+A-

在Linux系统中,nm(name list)命令是一个非常有用的工具,它用于列出二进制文件(如可执行文件、目标文件或共享库)中的符号表。这些符号表包含了程序中定义和引用的函数名、变量名等。通过nm命令,开发者可以检查程序是否正确地链接了所需的库,或者查找程序中定义的特定函数或变量的地址。



基本用法

nm命令的基本语法很简单:

nm [options] [files...]
  • options:可选参数,用于调整nm命令的输出格式和行为。
  • files...:要分析的文件列表。如果不指定文件,nm会尝试分析标准输入。

常用选项

  • -a--debug-syms:显示所有符号,包括调试符号。
  • -C--demangle:将C++函数名从低级的名字编码(mangled name)解码为可读的格式。这对于理解C++程序的符号表特别有用。
  • -D--dynamic:显示动态符号表。这通常用于共享库,显示运行时动态链接器可能使用的符号。
  • -g--extern-only:仅显示外部符号(即,非静态的)。
  • -l--line-numbers:在符号旁边显示行号(如果可用)。
  • -n--numeric-sort:按地址顺序对符号进行排序。
  • -o--print-file-name:在输出前打印文件名。
  • -p--no-sort:不排序输出。
  • -s--print-armap:打印由ar工具创建的索引(如果有的话)。
  • -t--radix=[b|d|o|x]:设置输出的基数,默认为十六进制(x)。
  • -u--undefined-only:仅显示未定义的符号。
  • --version:显示nm命令的版本信息。

使用示例

查看可执行文件的符号表

nm my_program

这将列出my_program可执行文件中定义和引用的所有符号。

解码C++函数名

对于C++程序,由于函数名会经过“名字改编”(name mangling)处理,直接使用nm命令看到的函数名可能是难以理解的。此时,可以使用-C选项来解码这些函数名:

nm -C my_cpp_program

查找未定义的符号

在链接阶段,了解哪些符号是未定义的可以帮助开发者识别可能的链接问题。使用-u选项可以只显示未定义的符号:

nm -u my_program

查看动态符号表

对于共享库,动态符号表特别重要,因为它决定了哪些符号可以在运行时被其他程序或库访问。使用-D选项可以查看这些符号:

nm -D libmylibrary.so

总结

nm命令是Linux下用于查看二进制文件符号表的重要工具。通过它,开发者可以深入了解程序的内部结构,包括函数和变量的定义与引用情况。结合不同的选项,nm能够提供丰富的信息,帮助开发者解决链接、调试等问题。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4