在 Linux 下使用 GDB 进行反汇编 通常有以下几种常见操作方式,从基础到进阶给你梳理一下。
gcc -g -o test test.c
如果是分析无源码的二进制:
gcc -o test test.c
gdb ./test
disassemble
disassemble main
disassemble 0x4005b6, 0x400600
disassemble /m main
layout split
或:
layout asm
当程序停在断点处:
disassemble $pc
或简写:
x/10i $pc
Linux 默认是 AT&T 语法,很多人更喜欢 Intel:
set disassembly-flavor intel
查看当前设置:
show disassembly-flavor
start
stepi # 单步一条汇编指令
nexti # 单步(不进入函数)
查看寄存器:
info registers
x/20i 0x4005b6
或查看字节:
x/20xb 0x4005b6
gdb ./a.out
(gdb) info functions
(gdb) disassemble 0x400000
若没有符号:
set architecture i386:x86-64
(gdb) set disassembly-flavor intel
(gdb) break main
(gdb) run
(gdb) disassemble /m main
(gdb) stepi
(gdb) info registers
如果 GDB 不够直观,也可以配合:
objdump -d testradare2Ghidra如果你愿意,可以告诉我:
我可以给你更针对性的 GDB 反汇编流程。