在 Linux 下进行反汇编操作,通常是为了分析二进制程序(如 ELF 可执行文件、共享库、shellcode 等)。下面从常用工具、基本流程、常见示例几个方面系统说明。
GNU binutils 自带,适合静态反汇编。
objdump -d a.out
常用选项:
-d:反汇编可执行段-D:反汇编所有段-M intel:使用 Intel 语法(默认 AT&T)-S:源码+汇编混合(需要 -g 编译)-b binary:分析裸二进制文件示例:
objdump -M intel -d ./test
GDB 可以边调试边看汇编。
gdb ./a.out
常用命令:
disas main
disas 0x401000
info registers
x/10i $rip
stepi
设置 Intel 语法:
set disassembly-flavor intel
功能强大,适合逆向工程。
r2 ./a.out
常用命令:
aaa # 自动分析
pd 20 # 反汇编 20 条
pdf # 反汇编当前函数
s main # 定位 main
适合复杂程序分析。
gcc -m32 -no-pie -fno-stack-protector -z execstack -g test.c -o test
示例 test.c:
#include <stdio.h>
int main() {
int a = 1;
int b = 2;
return a + b;
}
objdump -M intel -d test | grep -A 20 "<main>:"
nm test
readelf -s test
readelf -S test
| 项目 | AT&T | Intel |
|---|---|---|
| 操作数顺序 | src, dst | dst, src |
| 寄存器 | %eax | eax |
| 立即数 | $5 | 5 |
| 内存 | (%eax) | [eax] |
推荐:
objdump -M intel
objdump -b binary -m i386 -M intel -D shellcode.bin
或:
ndisasm -b 32 shellcode.bin
gdb ./test
(gdb) set disassembly-flavor intel
(gdb) break main
(gdb) run
(gdb) disas
objdump + gdb 开始radare2 / Ghidra如果你愿意,可以告诉我:
我可以直接给你针对性的实战示例。