在 Linux 下进行反汇编(disassembly),指令/工具选型取决于你的目标文件类型、分析深度、是否调试、是否二进制漏洞分析等需求。下面按场景 → 工具 → 关键命令给你一个实用选型指南。
| 工具 | 类型 | 适合场景 |
|---|---|---|
objdump |
静态反汇编 | ELF 文件快速查看 |
gdb |
动态反汇编 | 调试 + 运行时分析 |
objdump -d / objdump -S |
混合源码 | 有符号程序 |
readelf |
ELF 结构 | 辅助分析 |
nm |
符号表 | 函数定位 |
ltrace / strace |
系统调用 | 行为分析 |
radare2 / r2 |
高级逆向 | 二进制分析 |
IDA Free / Ghidra |
GUI 逆向 | 专业逆向 |
首选:objdump
objdump -d ./a.out
带源码(需要 -g 编译):
objdump -S ./a.out
查看某个函数:
objdump -d ./a.out | grep -A 30 "<main>:"
首选:gdb
gdb ./a.out
(gdb) disassemble main
AT&T / Intel 语法切换:
(gdb) set disassembly-flavor intel
(gdb) disassemble main
反汇编当前执行位置:
(gdb) disassemble
首选:radare2 或 Ghidra
radare2 快速入门:
r2 ./a.out
[0x000000]> aa
[0x000000]> pdf @ main
nm ./a.out
readelf -s ./a.out
strace ./a.out
ltrace ./a.out
objdump -dgdbobjdump -d -M arm ./xxx
objdump -d -M mips ./xxx
Linux 默认 AT&T:
mov %esp, %ebp
Intel(推荐):
mov ebp, esp
切换方式:
set disassembly-flavor intelobjdump -d -M intel有源码?
├─ 是 → objdump -S
└─ 否
├─ 想调试 → gdb
├─ 静态看 → objdump -d -M intel
└─ 深度逆向 → radare2 / Ghidra
日常 Linux 分析:
readelf -h
nm
objdump -d -M intel
gdb
CTF / 二进制安全:
radare2
Ghidra
如果你能告诉我:
我可以直接给你最合适的一条命令链。