从0开始学gdb(一)
0x01 gdb下载和改版
原版下载
无需多言
1 | sudo apt update && sudo apt install gdb |
接下来是可选的部分,主要推荐GEF和gdbgui,安装和使用都非常方便
原版上的增强改版
1. GEF
GEF设置了一系列方便使用的操作,例如运行程序后显示绝大多数信息供查看。安装过程如下
1 | # curl |
目前在用,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 | python -m pip install --user pipx |
2. seer (基于QT)
- 包管理器
1 | # 注意不是seer |
- 从源码构建
1 | # 依赖 |
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 | 继续程序的运行直到下个断点 |
内存查看
| 命令 | 缩写 | 说明 |
|---|---|---|
| p | 打印内部变量的值 | |
| examine | x | 检查内存的值 |
| frame | f | 查看当前堆栈 |
| backtrace | bt | 查看完整函数调用堆栈 |
程序状态
| 命令 | 缩写 | 说明 |
|---|---|---|
| info | i | 描述程序信息 |
| info break | i b | 查看断点设置 |
| info register | i r | 查看寄存器情况 |