从0开始学gdb(一)

0x01 gdb下载和改版

原版下载

无需多言

1
sudo apt update && sudo apt install gdb

接下来是可选的部分,主要推荐GEF和gdbgui,安装和使用都非常方便

原版上的增强改版

1. GEF

GEF设置了一系列方便使用的操作,例如运行程序后显示绝大多数信息供查看。安装过程如下

1
2
3
4
5
6
7
# curl
bash -c "$(curl -fsSL https://gef.blah.cat/sh)"
# wget
bash -c "$(wget https://gef.blah.cat/sh -O -)"
# manually
wget -O ~/.gdbinit-gef.py -q https://gef.blah.cat/py
echo source ~/.gdbinit-gef.py >> ~/.gdbinit

目前在用,GEF官网有丰富的文档指导

warning

GEF与gdb的自带tui不兼容,原文是 “GDB TUI breaks TTY structure. GEF is not compatible with TUI. Use one or the other.“

2. PwnDbg

还没试过,之后体验了再来写。

note

这些改版本质上是修改原来gdb的配置文件.gdbinit来达到增强功能的效果的。gdb在每次启动时,都会自动查找并执行这个文件里的命令,类似于.bashrc。

图形化的gdb前端

1. gdbgui (web端)

安装和使用可以参考官网,后面再仔细介绍

1
2
python -m pip install --user pipx
pipx install gdbgui
2. seer (基于QT)
  • 包管理器
1
2
# 注意不是seer
sudo apt install seergdb
  • 从源码构建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 依赖
sudo apt update
sudo apt install qt6-base-dev
sudo apt install libqt6charts*-dev
sudo apt install libqt6svg*-dev
# 不知道为什么,cmake报错,还是得安装下面的包
sudo apt install qt6-charts-dev libxkbcommon-dev
sudo apt install qt6-svg-dev
# 下载和构建
git clone https://github.com/epasveer/seer
cd seer/src
mkdir build
cd build
cmake -DQTVERSION=QT6 ..
make seergdb

0x02 gdb常用命令

下面简单介绍gdb一般常用的命令

基本

命令 缩写 说明
quit q 退出程序
file 装入程序
attach at 终止正在调试的程序
help 帮助,对于某个命令不会用就查

代码显示

命令 缩写 说明
list l 显示几行源代码
disassemble disas 反汇编代码显示
tui enable 自带的图形化界面启动(GEF不兼容)
tui disable 自带的图形化界面关闭(GEF不兼容)

断点设置

命令 缩写 说明
break b 设置断点
delete d 删除断点(和watch点)
disable 禁用断点
enable 启用断点

代码运行

命令 缩写 说明
start 运行直到main函数第一条语句
run r 运行直到断点或者结束
step s 单步步入(进入函数)
next n 单步步过(不进入函数)
finish 执行到返回到上一层函数
continue c 继续程序的运行直到下个断点

内存查看

命令 缩写 说明
print p 打印内部变量的值
examine x 检查内存的值
frame f 查看当前堆栈
backtrace bt 查看完整函数调用堆栈

程序状态

命令 缩写 说明
info i 描述程序信息
info break i b 查看断点设置
info register i r 查看寄存器情况