在 Linux 下做反汇编(disassembly),最常用的工具有 objdump、gdb、ndisasm、radare2 / r2、objconv 等。下面按最常见场景给你讲清楚指令和参数怎么用。
objdump -d a.out
-d:反汇编所有包含代码的段objdump -d a.out | grep -A 30 main
或者更精确:
objdump -d --start-address=0x401000 --stop-address=0x401100 a.out
-g 编译)gcc -g test.c -o test
objdump -S test
-S:源码与汇编混合objdump -d -m i386 a.out
objdump -d -m arm a.out
常用:
i386x86-64armaarch64objdump -d -M intel a.out
objdump -b binary -m i386 -M intel -D file.bin
-b binary:二进制文件-D:强制反汇编gdb a.out
disassemble
disassemble main
disassemble 0x401000, 0x401100
set disassembly-flavor intel
disassemble
layout split
适合 bootloader / shellcode
ndisasm -b 32 file.bin
ndisasm -b 64 file.bin
-b 16 / 32 / 64r2 a.out
进入后:
aa ; 分析
pdf ; 反汇编当前函数
s main ; 跳到 main
pdf
gcc test.c -o test
objdump -d -M intel test
objdump -S -M intel test
objdump -d a.out | grep syscall
| AT&T | Intel |
|---|---|
mov %eax, %ebx |
mov ebx, eax |
add $1, %eax |
add eax, 1 |
如果你愿意,可以告诉我:
我可以给你更针对的命令和实战例子。