GDB 备忘

常用插件

pwndbg

peda

gef

heap

打印

info r <register>

p print

p &<symbol> 取地址

x/<num>gx <address> 查看内存数据(x64)

x/<num>i <address> 查看汇编指令

配合set 可以设置一些指针变量方便读取

    x hex
    d deci
    u unsigned hex
    o oct
    t bin
    a hex
    c char
    f float
    s string
    i insturction
   b  1 byte   8 bits
   h  2 bytes 16 bits 
   w  4 bytes 32 bits
   g  8 bytes 64 bits

查看堆栈等

vmmap

stack <num>

heap

bins

got

打印数组中任意连续元素的值

p array[index]@num

显示局部变量

info locals

打印栈帧

bt [full] [-n]

写入

寄存器

set $<register> = <value>

变量

set var <symbol>=<value>

内存

set {int}<address>=<value>

内存

set *((int *) <address>) = <value> #x64: long long int

搜索

搜索字符串

search <str>

搜索数值

search -p <hex>

函数

列出所有函数

info functions [regex]

步入(跟进函数)

si

步过(不跟进函数)

ni

强制调用函数

call func

强制退出函数

return

放弃跟进函数(快速步进到函数退出)

finish

反汇编函数

dis func

函数堆栈帧查看

i frame
frame n/address
up/down n

下断

地址断点

b *0x400522

源码断点

b a/file.c:6

临时断点(命中时删除)

tb ...

条件断点

break … if ...

忽略断点(n次)

ignore bnum count

关闭/开启/删除 断点

disable/enable/delete n

查看入口点与段信息

info files

列出断点

i breakpoints

列出观察点

info watchpoints

变量观察点

watch value_name

写观察点

watch *(data type*)address

读观察点

rw ...

读写观察点

aw ...

fork/vfork/exec调用捕获

catch fork/vfork/exec

系统调用捕获

catch syscall [name | number]

临时catch

tcatch ...

修改ptrace返回值(反-反调试)

catch syscall ptrace
c
set $rax = 0

信号

忽略特定信号

handle SIGPE pass nostop noprint

信号设置

pass/noignore  收到信号时gdb不处理
stop           收到信号时停住
print          收到信号时显示信息
nopass/ignore  收到信号时gdb处理
nostop         收到信号时不停住
noprint        收到信号时不显示信息

列出gdb跟踪的信号

info signals
info handle

进程

调试时跟进子进程/父进程

set follow-fork-mode child/parent

是否调试父子进程

set detach-on-fork off/on

内存转储

产生core-dump

gcore

加载core-dump

gdb executable coredump

其他

设置被调试程序的参数

gdb -args ./a.out a b c

or

(gdb) set args a b c
(gdb) show args

data show 数据读

data change