Linux nm命令详解:查看库和目标文件的符号表

需积分: 1 0 下载量 139 浏览量 更新于2024-08-03 收藏 330KB PDF 举报
"ubuntu-nm命令基本使用.pdf" nm命令是Linux操作系统中用于分析二进制文件的工具,它可以列出库文件、目标文件和可执行文件中的符号表。这个命令对于理解程序的结构、查找函数定义以及调试过程非常有用。下面我们将深入探讨nm命令的常用参数及其作用。 1. `-A`, `-o`, `--print-file-name`:这些参数会显示每个符号所属的文件名称,这对于追踪符号来源特别有帮助。 2. `-a`, `--debug-syms`:当使用此参数时,nm会显示调试符号,这对于调试和理解程序的内部工作至关重要,特别是对于C++程序,因为它们通常包含复杂的编译后信息。 3. `-B`:此选项用于兼容MIPS架构的nm,它等同于`--format=bsd`。 4. `-C`, `--demangle`:这个参数会将编译后的低级符号名转换为人类可读的C++函数名,使得符号解析更直观。 5. `-D`, `--dynamic`:仅显示动态符号,这对于查看共享库的接口非常有用。 6. `-f`, `--format=formatt`:允许用户选择输出格式,包括`bsd`, `sysv`和`posix`,默认为`bsd`。 7. `-g`, `--extern-only`:只显示外部符号,也就是不在当前文件中定义,而是从其他文件导入的符号。 8. `-n`, `-v`, `--numeric-sort`:按符号地址排序,而不是按符号名称排序,这有助于比较不同符号的位置。 9. `-p`, `--no-sort`:不进行任何排序,按文件中原始顺序显示符号。 10. `-P`, `--portability`:使用POSIX.2标准输出格式,这使得输出在不同的系统间保持一致。 11. `-s`, `--print-armap`:在列出库文件成员符号时,包含索引信息,显示哪些模块包含了哪些名字的映射。 12. `-r`, `--reverse-sort`:反向排序,即从高到低或从Z到A显示符号。 13. `--size-sort`:根据符号的大小进行排序,这对于查找占用内存最多的符号很有用。 14. `--tradix`或`--radix=radix`:指定数值显示的基数,可以是十进制(d)、八进制(o)或十六进制(x)。 15. `--target=bfdname`:指定目标代码格式,如果不使用,默认使用系统配置的格式。 16. `-u`, `--undefined-only`:仅显示未定义的符号,这对于查找依赖项和解决链接错误很有帮助。 17. `-l`, `--line-numbers`:尝试从调试信息中获取文件名和行号,这对于定位代码中的具体位置特别有用。 18. `-V`, `--version`:显示nm命令的版本信息。 通过这些参数的组合使用,开发者可以根据需要获取关于二进制文件的各种信息,包括函数、变量、全局常量和其他符号的定义和位置。在Ubuntu系统中,熟练掌握nm命令的使用能够极大提升开发和调试效率。