在 CentOS(或其他 Linux 发行版)里,“反汇编”通常指的是把可执行文件或目标文件里的机器码还原成汇编代码。常用工具是 objdump、gdb、radare2、IDA 等。下面按最常见场景给你一个实用说明。
objdump -d test
-d:反汇编可执行段test:编译好的可执行文件示例:
gcc test.c -o test
objdump -d test
objdump -d test | grep -A 30 "<main>:"
或者更清楚一点:
objdump -d test | less
然后搜索:
/main>
objdump -S test
编译时必须有调试信息:
gcc -g test.c -o test
objdump -d -j .text test
gdb ./test
disassemble
或指定函数:
disassemble main
disassemble /m main
x/10i $pc
objdump -d test | grep -B1 -A1 "mov"
或 GDB 中:
x/10xb 0x4004f0
示例:
40052d: 55 push %rbp
40052e: 48 89 e5 mov %rsp,%rbp
400531: c7 45 fc 0a 00 00 00 movl $0xa,-0x4(%rbp)
解释:
| 部分 | 含义 |
|---|---|
40052d |
指令地址 |
55 |
机器码 |
push %rbp |
汇编指令 |
| 架构 | 指令特点 |
|---|---|
| x86 | eax, ebx, mov |
| x86_64 | rax, rbp, rsp |
| ARM | ldr, str, bl |
查看架构:
file test
r2 ./test
pd 20
ndisasm -b 64 test
❌ objdump: not found
sudo yum install binutils
❌ 看不到 C 源码
gcc -g test.c -o test
gcc -g test.c -o test
objdump -d test
gdb ./test
(gdb) disassemble main
如果你愿意,可以告诉我:
我可以直接带你逐行分析一段反汇编代码。