温馨提示×

nm指令能反汇编linux吗

小樊
34
2026-10-03 11:39:41
栏目: 智能运维

简短结论:nm 本身不能反汇编 Linux(内核、可执行文件等),nm 只是符号表查看工具,不是反汇编器。


一、nm 到底能干什么

nm 的作用是查看目标文件 / 可执行文件 / 库中的符号信息,例如:

nm vmlinux
nm /bin/ls
nm libc.so

它能显示:

  • 函数名(如 main、schedule)
  • 变量名
  • 符号地址
  • 符号类型(T=文本段,B=BSS,D=数据段等)

✅ 适合:

  • 查看 Linux 内核或程序里有哪些函数
  • 定位某个符号的地址
  • 调试符号分析

❌ 不能:

  • 把机器码转成汇编
  • 查看具体指令内容

二、反汇编 Linux 该用什么

如果你要反汇编 Linux 内核或用户态程序,应使用:

1️⃣ objdump(最常用)

objdump -d vmlinux        # 反汇编内核
objdump -d /bin/ls        # 反汇编程序

常用选项:

objdump -d -S vmlinux     # 反汇编 + 源码(若有调试信息)
objdump -D vmlinux        # 反汇编所有段

2️⃣ gdb(动态 / 静态分析)

gdb vmlinux
(gdb) disassemble schedule

3️⃣ llvm-objdump(LLVM 工具链)

llvm-objdump -d vmlinux

4️⃣ 专用内核工具(高级)

  • scripts/decodecode(内核自带)
  • crash + dis
  • bpftrace / perf 做运行时反汇编

三、典型组合用法

nm vmlinux | grep schedule     # 找符号
objdump -d vmlinux | grep -A20 "<schedule>:"

四、一句话总结

  • ✅ nm:看符号
  • ❌ nm:不能反汇编
  • ✅ 反汇编请用:objdump / gdb / llvm-objdump

如果你是想反汇编 Linux 内核某函数、分析崩溃栈或做安全研究,可以告诉我具体场景,我可以给你更精确的命令。

0 踩