1.GDB环境配置
这里只说Pwndbg
Pwndbg的安装简单,访问Github主页,https://github.com/pwndbg/pwndbg
在“How”栏中看到安装说明
2.打开文件
GDB打开文件的方式与图形化的工具不同,需要通过传入参数或执行命令
- 方式1:在GDB的命令行后直接接可执行文件,形如“gdb./文件”
- 方式2:使用GDB的–args参数执行,形如“gdb–args./ping -c 10 127.0.0.1"
- 方式3:打开GDB后,使用file命令指定可执行文件
3.调试程序
GDB调试方式也与图形化的工具不同,完全由命令控制,而不是快捷键
(1)控制程序执行
- r(run):启动程序
- c(continue):让暂停的程序继续执行
- si(step instruction):汇编指令层面上的单步步入
- ni(next instruction):汇编层面上的单步步过
- finish:执行到当前函数返回
(2)查看内存、表达式等
- x/dddFFF:ddd代表长度,FFF代表格式,如”x/10gx“,具体格式列表可以查看https://visualgdb.com/gdbreference/commands/x
- p(print):输出一个表达式的值,如”p 1+1“,p命令同样可以在后面添加指定格式,如”p/x111222“
(3)断点相关命令 - b(break):blocation,location可以为十六进制、名称的等,如”b0x8005a0“ “b*main”。“ * “是指中断在指定的地址,而不是对应的源代码行
- info b 或 info bl (Pwndbg加入):列出所有的断点,每个断点会有自己的序号
- del(delete):删除指定序号的断点,如“del 1”
- clear:删除指定位置的断点,如“clear*main”
(4)修改数据
- 修改寄存器:set $rax=0x100000
- 修改内存:set{要赋值的类型}地址=值,形如“set{int}0x405000=0x12345”
注意
GBD不会在入口点处暂停程序,所以用户需要在程序执行前设置好自己的断点,此外GDB不像OD和X
64DBG一样会自动保存用户的断点数据,需用户每次重新设置断点
在GDB的命令执行中,无输入直接回车代表重复上一条命令
更多查看:https://zhuanlan.zhihu.com/p/297925056