常用插件

pwndbg
pwngdb
peda
gef
heap

打印

info r <register>
p  print
p &<symbol> 取地址
p *<addr>   间址取值
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

内存

将程序内存中的内容dump到指定文件中

dump binary memory file start_addr end_addr 

usage:

dump   [格式] memory 文件名 起始地址 结构地址   #  把内存段写到文件
dump   [格式] value 文件名 表达式             #  把指定值写到文件
append [格式] memory 文件名 起始地址 结构地址   #  追加内存段到文件
append [格式] value 文件名 表达式             #  追加指定值到文件
restore 文件名 [binary] bias 起始地址 结构地址 #  恢复文件中内容到内存

format

        binary    原始二进制格式
​       ihex     intel 16进制格式
​       srec     S-recored格式
​       tekhex    tektronix 16进制格式

内存转储

产生core-dump

gcore

加载core-dump

gdb executable coredump

远程调试

远程

 gdbserver :1234 /usr/bin/helloworld

上位机

 $ gdb
 (gdb) target remote :1234

符号调试

debug符号文件的获取和设置

其他

设置被调试程序的参数

gdb -args ./a.out a b c

or

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

去掉一些没啥用的output

gdb -q