常用插件
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