在 CentOS(或其他 Linux 发行版)里做反汇编(disassembly),通常取决于你要分析的对象(可执行文件、内核、固件、内存等)以及你使用的工具链。下面给你一个实用选型指南 + 常见场景示例。
| 分析对象 | 推荐工具 |
|---|---|
| ELF 可执行文件 / 共享库 | objdump、gdb |
| 二进制文件(无符号) | objdump、radare2、r2 |
| 正在运行的进程 | gdb |
| 内核 / 驱动 | objdump、crash、gdb vmlinux |
| 快速交互式分析 | radare2、Ghidra、IDA |
| 脚本化 / 自动化 | objdump、pyelftools |
objdump -d ./a.out
-d:反汇编可执行段.o / .soobjdump -S ./a.out
⚠️ 需要编译时加 -g:
gcc -g -O0 test.c -o test
objdump -d ./a.out | grep -A 20 "<main>:"
objdump -t ./a.out
gdb ./a.out
disassemble
或指定函数:
disassemble main
set disassembly-flavor intel
disassemble main
✅ 强烈推荐 Intel 语法
disassemble 0x4005f0,0x400620
yum install radare2
# 或
dnf install radare2
r2 ./a.out
进入后:
aaa # 自动分析
pdf @ main # 反汇编 main 函数
✅ 只想看汇编
objdump -d ./a.out
✅ 调试 + 汇编
gdb ./a.out
disassemble
✅ 无符号 / 逆向分析
radare2
✅ 内核 / crash 分析
crash vmlinux
❌ 用 cat 看二进制
❌ 没加 -g 却想看源码
❌ 用 AT&T 语法却看不懂
✅ 明确目标 → 选工具 → 用对应指令
如果你愿意,可以告诉我:
我可以直接给你 最合适的一套命令组合。