nm
是一个用于显示二进制文件(如可执行文件、目标代码文件和库文件)中的符号信息的命令行工具。在 Linux 系统中,它常用于反汇编和调试目的。以下是如何使用 nm
工具的一些基本指南:
查看符号表:
nm <filename>
这将显示文件中的所有符号及其地址。
过滤特定符号:
使用 -A
选项可以只显示未定义的符号:
nm -A <filename>
显示详细信息:
使用 -C
或 --demangle
选项可以将 C++ 符号名解码为人类可读的形式:
nm -C <filename>
显示动态符号表:
使用 -D
选项可以只显示动态符号表中的符号:
nm -D <filename>
显示符号类型:
使用 -t
选项可以指定输出格式。例如,-t x
显示十六进制地址,-t d
显示十进制地址:
nm -t x <filename>
显示符号大小:
使用 -s
选项可以显示符号的大小:
nm -s <filename>
假设我们有一个名为 example.o
的目标文件,我们可以使用以下命令来查看其符号信息:
nm example.o
输出可能类似于:
0000000000000000 T main
0000000000000010 D global_var
0000000000000020 U printf
T
表示文本段(代码)中的符号。D
表示数据段中的全局变量。U
表示未定义的符号,通常在链接阶段会解析。结合其他工具:
nm
可以与其他工具结合使用,例如 objdump
和 readelf
,以获取更详细的反汇编信息。
查看特定段的符号:
使用 -n
选项可以指定要显示的段:
nm -n .text example.o
显示符号的地址范围:
使用 -r
选项可以显示符号的地址范围:
nm -r example.o
通过这些基本和高级用法,你可以有效地使用 nm
工具来分析和调试你的 Linux 系统中的二进制文件。