在 CentOS 上对比“反汇编”(disassembly)结果,常见需求一般有两种:
下面按实用角度给你讲清楚。
sudo yum install -y binutils gcc objdump gdb
可选(更强大):
sudo yum install -y radare2 ghidra(手动装)
objdump -d ./a.out > a.asm
objdump -d ./b.out > b.asm
常用参数:
-d:反汇编可执行代码-M intel:Intel 语法(默认是 AT&T)-S:源码+汇编对照(需 -g 编译)示例:
objdump -d -M intel ./test > test.asm
gdb ./a.out
(gdb) disassemble main
导出:
(gdb) set logging on
(gdb) disassemble main
(gdb) set logging off
diff a.asm b.asm
或更好看的:
vimdiff a.asm b.asm
⚠️ 问题:
objdump -d -M intel ./a.out | cut -c 10- > a.clean
objdump -d -M intel ./b.out | cut -c 10- > b.clean
diff a.clean b.clean
或:
objdump -d ./a.out | awk '{print $2,$3,$4}' > a.s
objdump -d ./b.out | awk '{print $2,$3,$4}' > b.s
diff a.s b.s
objdump -d -M intel ./a.out | sed -n '/<main>:/,/^$/p' > main_a.asm
objdump -d -M intel ./b.out | sed -n '/<main>:/,/^$/p' > main_b.asm
diff main_a.asm main_b.asm
r2 -AA ./a.out
> pdf @ main
对比两个二进制:
radiff2radiff2 -a x86 -b 64 a.out b.out
适合:
| 场景 | 推荐方式 |
|---|---|
| 编译优化对比 | objdump + diff |
| 源码小改动 | -S + vimdiff |
| 安全补丁对比 | radiff2 |
| 逆向分析 | Ghidra |
gcc -O0 -o a.out test.c
gcc -O2 -o b.out test.c
objdump -d -M intel a.out > a.asm
objdump -d -M intel b.out > b.asm
vimdiff a.asm b.asm
如果你愿意,可以告诉我:
我可以给你更针对性的命令或脚本。