在 Linux 下做反汇编(disassembly),常见场景是分析 ELF 可执行文件 / 共享库 / 二进制程序。下面按工具 → 用法 → 示例给你一个实用速查表。
| 工具 | 说明 |
|---|---|
objdump |
GNU binutils,最常用、稳定 |
gdb |
调试器,可反汇编函数 |
ndisasm |
NASM 自带,适用于裸二进制 |
radare2 / r2 |
逆向工程利器 |
IDA / Ghidra |
图形化(非纯命令行) |
objdump 反汇编(最常用)objdump -d a.out
objdump -d a.out | grep -A 20 "<main>:"
objdump -S a.out
objdump -M intel -d a.out
objdump -M intel -d a.out
objdump -d libfoo.so
gdb 反汇编(调试时非常常用)gdb ./a.out
disassemble
disassemble main
set disassembly-flavor intel
disassemble main
disassemble 0x4005f6
ndisasm -b 32 file.bin
或 64 位:
ndisasm -b 64 file.bin
r2 ./a.out
常用命令:
aaa # 分析
pdf @ main # 反汇编 main 函数
nm a.out
或:
readelf -s a.out
gcc -g -o test test.c
objdump -M intel -d test | less
或:
gdb ./test
(gdb) set disassembly-flavor intel
(gdb) disassemble main
| AT&T | Intel |
|---|---|
mov %eax, %ebx |
mov ebx, eax |
sub $4, %esp |
sub esp, 4 |
⚠️ Linux 默认是 AT&T 语法,逆向常用 Intel
❌ 对 strip 后的程序:
objdump -d a.out
→ 函数名可能消失,但汇编仍在
✅ 解决:
objdump -d a.out | less
如果你愿意,我可以:
你可以直接贴一个二进制或代码片段。