nm 和 objdump 都是分析 ELF(或其他格式)目标文件 / 可执行文件的常用工具,但用途和侧重点完全不同。下面从“干什么”“看什么”“反汇编能力”几个角度说明区别。
nm:符号查看工具(不是反汇编)nm 用于查看目标文件中的符号表(symbol table)。
T 文本段、D 数据段、U 未定义)nm a.out
输出示例:
0000000000401136 T main
U printf
0000000000404010 D global_var
✅ 轻量、快速
❌ 不会反汇编代码
❌ 只显示符号,不显示指令
objdump:二进制分析 & 反汇编工具objdump 是 二进制文件分析与反汇编工具,可以查看:
objdump -d a.out
输出示例:
0000000000401136 <main>:
401136: 55 push %rbp
401137: 48 89 e5 mov %rsp,%rbp
-d:反汇编可执行代码-D:反汇编所有段-S:源码+反汇编(需 -g 编译)-t:显示符号(类似 nm)-h:段头信息| 对比项 | nm | objdump |
|---|---|---|
| 主要功能 | 查看符号 | 反汇编 & 二进制分析 |
| 是否反汇编 | ❌ 否 | ✅ 是 |
| 是否看汇编指令 | ❌ 否 | ✅ 是 |
| 是否看符号 | ✅ 是 | ✅ 是(-t) |
| 输出复杂度 | 简单 | 复杂 |
| 调试用 | 查函数/变量 | 分析执行逻辑 |
nm 当:objdump 当:
nm看“有什么符号”,objdump看“代码长什么样”。
如果你愿意,我也可以给你一个**实战例子(C → nm → objdump)**来对比。