可以的。GDB(GNU Debugger)本身就能对 Linux 上的程序进行反汇编,不依赖外部工具也能用。下面按常见场景说明。
(gdb) disassemble
或
(gdb) disas
(gdb) disas main
(gdb) disas 0x400520, 0x4005a0
(gdb) disas $pc, +20
GDB 支持 Intel 语法(默认是 AT&T):
(gdb) set disassembly-flavor intel
(gdb) disas main
还可以进入“布局模式”,一边源码一边汇编:
(gdb) layout asm
或
(gdb) layout split
要看你说的是哪一类:
.so 动态库gdb ./a.out
(gdb) disas main
完全可以。
如果有 -g 编译:
(gdb) disas /m main
可以 源码 + 汇编对应显示。
GDB 不能直接调试运行中的内核(需要特殊配置):
vmlinux(带符号)kgdbQEMU + GDBJTAG例如:
gdb vmlinux
(gdb) disas schedule
但这通常是离线反汇编,不是直接反汇编“正在跑的 Linux 内核”。
GDB 仍然能反汇编,但:
(gdb) disas 0x401000
| 工具 | 特点 |
|---|---|
| GDB | 调试时用,支持符号、寄存器、动态执行 |
| objdump | 静态反汇编,适合分析文件 |
| radare2 / ghidra | 逆向分析更强 |
示例(objdump):
objdump -d ./a.out
✅ GDB 能反汇编 Linux 代码
✅ 支持用户态程序、库、内核镜像(特殊环境)
✅ 可结合调试信息、寄存器、运行时状态
如果你愿意,可以告诉我:
我可以给你更具体的 GDB 命令示例。