因为GDB类似于windbg都是基于命令行的调试器,所以会出现一些指令,记录一下,长时间不用就忘了
GDB原理
GDB调试包括2个程序:gdb程序和被调试程序。根据这2个程序是否运行在同一台电脑中,可以把GDB的调试模型分为2种:本地调试,远程调试。远程调试我没用过
本地调试
就直接在本地进行调试
远程调试
利用gdbserver来进行远程调试
GDB插件
peda
$ git clone https://github.com/longld/peda.git ~/peda
$ echo "source ~/peda/peda.py" >> ~/.gdbinit
这个是最常用的一个,可以结构话的高亮一些代码
gef
pwndbg
GDB命令
断点
breakpoint:软件断点
hbreakpoint:硬件断点
rwatch:设置读取观察点,实现内存断点
watch:写入时gdb中断
awatch:读写都中断
t前缀:一次性断点
info b:查看断点
enable:激活断点
disable:禁用断点
修改值
set $eax=10:修改寄存器或者内存中的值,利用set命令
查看值
x/
x /4xg $ebp:查看ebp开始的4个8字节内容 x/wx $esp 以4字节16进制显示栈中内容 b表示单字节,h表示双字节,w表示四字 节,g表示八字节 s 按字符串输出 x 按十六进制格式显示变量。 d 按十进制格式显示变量。 u 按十六进制格式显示无符号整型。 o 按八进制格式显示变量。 t 按二进制格式显示变量。 a 按十六进制格式显示变量。 c 按字符格式显示变量。 f 按浮点数格式显示变量。 i:反汇编
heapinfo:查看堆的信息
调式值
r:run开始执行
n:单步步过
s:单步步入
c:继续执行到下一个断点
fini:结束当前函数
context:查看运行上下文
stack 10:显示栈中的10项
bt:查看当前栈帧
启动
checksec:查看程序保护
pattern 100:生成100个随机字符,用于判断栈溢出
pattren offset “str”:用来定位偏移
set args:指定运行时参数
show args:查看设置的运行参数
附加进程
gdb procname pid
gdb -p pid
gdb attach pid(需要先启动gdb)
调试core文件
gdb procname corename