首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux下查看汇编nm

在Linux环境下,nm命令用于列出目标文件中的符号。这些符号可以是函数、变量等。nm命令对于调试、逆向工程以及了解程序的内部结构非常有用。

基本用法

代码语言:txt
复制
nm [选项] <目标文件>

常见选项

  • -A--print-file-name:在每个符号前面打印出文件名。
  • -C--demangle:对C++的符号进行解码,使其更易读。
  • -D--dynamic:显示动态符号,而不是静态符号。
  • -l--line-numbers:显示行号信息。
  • -n--numeric-sort:按地址或索引排序,而不是按符号名称。
  • -u--undefined-only:仅显示未定义的符号。
  • -g--extern-only:仅显示外部符号。

示例

  1. 列出一个目标文件的所有符号:
代码语言:txt
复制
nm target_file.o
  1. 列出一个动态库的所有动态符号:
代码语言:txt
复制
nm -D libexample.so
  1. 对C++目标文件的符号进行解码:
代码语言:txt
复制
nm -C target_file.cpp.o

输出解释

nm命令的输出通常包含三列:地址、类型和符号名称。

  • 地址:符号在内存中的位置。
  • 类型:符号的类型,例如T表示文本(代码)段中的符号,D表示数据段中的符号,U表示未定义的符号等。
  • 符号名称:符号的名字。

应用场景

  • 调试:通过查看符号表,可以了解程序中函数和变量的布局。
  • 逆向工程:分析二进制文件的符号表可以帮助理解程序的结构和功能。
  • 链接错误排查:当链接器报告未定义的符号错误时,可以使用nm命令检查目标文件和库文件中的符号。

注意事项

  • nm命令只能显示目标文件或库文件中的符号,不能直接显示可执行文件中的符号。要查看可执行文件中的符号,可以使用objdump命令。
  • 对于C++程序,由于名称修饰(name mangling),符号名称可能难以阅读。使用-C选项可以解码这些名称。

希望这个解释能帮助你更好地理解nm命令及其在Linux下的应用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券