在 CentOS 上进行反汇编(disassembly),常用的是 binutils 里的 objdump、gdb,以及更高级的 radare2、IDA、Ghidra 等。下面按常用程度给你一个从入门到进阶的总结。
objdump -d test
只反汇编 可执行代码段,最常用。
objdump -S test
前提:编译时加了 -g
gcc -g -o test test.c
objdump -D test
⚠️ 会反汇编数据段,可能看到很多乱码指令。
objdump -M intel -d test
-M intel:Intel 语法(默认是 AT&T)-b elf:指定文件格式-m i386:x86-64:指定架构objdump -t test
或
nm test
gdb ./test
disas main
或
disas 0x401000
disas
set disassembly-flavor intel
disas main
si # 汇编级单步
ni # 汇编级单步(不进入函数)
info registers
file test
readelf -h test # ELF 头
readelf -S test # 段表
readelf -s test # 符号表
yum install radare2
r2 ./test
常用命令:
aaa # 分析
pd 20 # 反汇编 20 条
pdf # 反汇编函数
s main
pd
yum install nasm
ndisasm -b 64 test
适合 裸二进制文件。
| 工具 | 适合场景 |
|---|---|
| objdump | 静态分析 |
| gdb | 动态调试 |
| radare2 | 逆向分析 |
| ndisasm | 裸 bin |
yum install binutils gdb nasm readelf
或(EPEL):
yum install epel-release
yum install radare2
objdump -M intel -d test | grep -A 30 "<main>:"
gdb ./test
(gdb) set disassembly-flavor intel
(gdb) disas main
如果你愿意,可以告诉我:
我可以给你更精确的命令和实战示例。