在 Linux 下进行反汇编(disassembly),通常取决于你面对的是可执行文件、目标文件、核心转储还是正在运行的进程。下面按最常用 → 进阶的顺序,系统介绍几种主流方法。
objdump(最基础、最常用)objdump -d ./a.out
常用选项:
objdump -M intel -d ./a.out
-M intel:使用 Intel 语法(默认是 AT&T)-d:反汇编可执行代码段objdump -d ./a.out | grep -A 20 "<main>:"
objdump -S ./a.out
gdb(调试 + 反汇编)gdb ./a.out
disassemble
disassemble main
set disassembly-flavor intel
disassemble main
disassemble 0x4005b6,0x4005d0
ndisasm(专用于裸二进制文件)适合:
ndisasm -b 32 shellcode.bin
或 64 位:
ndisasm -b 64 shellcode.bin
radare2(进阶、逆向神器)r2 ./a.out
aaa
pdf @ main
V
objdump 反汇编共享库objdump -d /lib/x86_64-linux-gnu/libc.so.6
gdb -p <pid>
然后:
disassemble
| 场景 | 工具 |
|---|---|
| ELF 可执行文件 | objdump / gdb |
| 二进制流 | ndisasm |
| 逆向分析 | radare2 / Ghidra |
| 调试过程 | gdb |
| 无符号程序 | objdump / radare2 |
gcc -g -o test test.c
objdump -M intel -d test | less
或:
gdb ./test
(gdb) set disassembly-flavor intel
(gdb) disassemble main
如果你愿意,可以告诉我:
我可以给你更精确的命令和实战技巧。