【视频讲解】PicoCTF 2022 玩转GDB调试器
作者:FancyPig | 发布时间: | 更新时间:

相关阅读
在网络安全入门的探讨中,推荐了Pico ctf
data-postsbox="{"id":13208,"title":"2022年网络安全学习路线——如何入门、就业","author":"FancyPig","author_id":1,"cover_image":"","cover_video":"","views":9719,"comment_count":26,"category":"cybersecurity","is_forum_post":false}">{"id":13208,"title":"2022年网络安全学习路线——如何入门、就业","author":"FancyPig","author_id":1,"cover_image":"","cover_video":"","views":9719,"comment_count":26,"category":"cybersecurity","is_forum_post":false}
在上期视频中,我们分享了Linux文件压缩的常见方式
data-postsbox="{"id":20044,"title":"【视频讲解】PicoCTF 2022 Linux文件压缩你见过几种?","author":"FancyPig","author_id":1,"cover_image":"","cover_video":"","views":2156,"comment_count":1,"category":"cybersecurity","is_forum_post":false}">{"id":20044,"title":"【视频讲解】PicoCTF 2022 Linux文件压缩你见过几种?","author":"FancyPig","author_id":1,"cover_image":"","cover_video":"","views":2156,"comment_count":1,"category":"cybersecurity","is_forum_post":false}
今天我们带大家来玩转GDB调试器
题目
你能拿到flag吗?
下载这个二进制文件。
下面是一些可以参考的指令
$ chmod +x gdbme
$ gdb gdbme
(gdb) layout asm
(gdb) break *(main+99)
(gdb) run
(gdb) jump *(main+104)
视频讲解
今天我们将大家来了解如何使用GDB调试器进行断点调试,最终寻找到我们CTF挑战的flag!
更多GDB调试教学
来自黄浩杰的如何用GDB调试C语言代码
通过两个例子,教大家如何使用gdb工具进行代码调试。
常见命令总结
GDB Layout命令
每次gdb时不知道程序跑到哪了,只能list?
错, layout窗口才是王道!!
| 命令 | 功能 |
|---|---|
| layout src | 显示源码窗口 |
| layout asm | 显示汇编窗口 |
| layout split | 显示源码 & 汇编窗口 |
| layout regs | 显示汇编 & 寄存器窗口 |
| layout next | 下一个layout |
| layout prev | 上一个layout |
| C-x 1 | 单窗口模式 |
| C-x 2 | 双窗口模式 |
| C-x a | 回到传统模式 |
GDB 跳转执行命令
| 命令 | 功能 |
|---|---|
| start | 开始启动程序,并停在main第一句等待命令 |
| step | 执行下一行语句, 如语句为函数调用, 进入函数中 |
| next | 执行下一行语句, 如语句为函数调用, 不进入函数中 |
| finish | 连续运行到当前函数返回为止 |
| continue | 从当前位置继续运行程序 |
| return | 强制令当前函数返回 |
| call func() | 强制调用函数, 也可以用print func() |
| run | 从头开始运行程序 |
| quit | 退出程序 |
GDB调试输出命令
| 命令 | 功能 |
|---|---|
| 输出变量值 & 调用函数 & 通过表达式改变变量值 | |
| info var | 查看全局 & 静态变量 |
| info locals | 查看当前函数局部变量 |
| list | 查看当前位置代码 |
| backtrace | 查看各级堆栈的函数调用及参数 |
| set var 变量=xx | 将变量赋值为xx |
断点
| 命令 | 功能 |
|---|---|
| b N_LINE | 在第N_LINE行上设置断点 |
| b func | 在func函数上设置端点 |
| delete breakpoints | 删除断点 |
| disable breakpoints | 禁用断点 |
| enable 断点号 | 启动端点 |
| info breakpoints | 查看断点列表 |
| break foo if x>0 | 设置条件断点 |
观察点
当待观察点被读 或 被写时,程序停下来,并输出相关信息
| 命令 | 功能 |
|---|---|
| watch | 设置写观察点 |
| rwatch | 设置读观察点 |
| awatch | 设置读写观察点 |
| info watchpoints | 查看观察点列表 |
Display跟踪点
| 命令 | 功能 |
|---|---|
| display var | 每次停下来时,显示设置的变量var的值 |
| undisplay | 取消跟踪显示 |
| info display | 设置读写观察点 |
| info watchpoints | 查看跟踪列表 |