pwndbg
[TOC]
基本指令
help //帮助 i //info,查看一些信息,只输入info可以看可以接什么参数,下面几个比较常用 i b //常用,info break 查看所有断点信息(编号、断点位置) i r //常用,info registers 查看各个寄存器当前的值 i f //info function 查看所有函数名,需保留符号 show //和info类似,但是查看调试器的基本信息,如: show args //查看参数 rdi //常用,+寄存器名代表一个寄存器内的值,用在地址上直接相当与一个十六进制变量 backtrace //查看调用栈 q //quit 退出,常用 vmmap //内存分配情况 cyclic 50 //生成50个用来溢出的字符,如:aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaama
执行指令
s //单步步入,遇到调用跟进函数中,相当于step into,源码层面的一步 si //常用,同s,汇编层面的一步 n //单步补过,遇到函数不跟进,相当于step over,源码层面的一步 ni //常用,同n,汇编层面的一步 c //continue,常用,继续执行到断点,没断点就一直执行下去 r //run,常用,重新开始执行 start // 类似于run,停在main函数的开始
断点指令
下普通断点指令b(break): b *(0x123456) //常用,给0x123456地址处的指令下断点 b *$rebase(0x123456) //rebase 在调试开PIE的程序的时候可以直接加上程序的随机地址 b fun_name //常用,给函数fun_name下断点,目标文件要保留符号才行 b +0x10 //在程序当前停住的位置下加0x10的位置下断点,同样可以-0x10,就是前0x10 之前没注意这个功能,这样调试的时候就不同按n一直单步跑了 break fun if $rdi==5 //条件断点,rdi值为5的时候才断 删除、禁用断点: info break(简写: i b) //查看断点编号 delete 5 //常用,删除5号断点,直接delete不接数字删除所有 disable 5 //常用,禁用5号断点 enable 5 //启用5号断点 clear //清除下面的所有断点 内存断点指令watch: watch 0x123456 //0x123456地址的数据改变的时候会断 watch a //变量a改变的时候会断
打印指令
查看内存指令x: x /nuf 0x123456 //常用,x指令的格式是:x /10gx 0x123456 x 按十六进制格式显示变量。 d 按十进制格式显示变量。 u 按十六进制格式显示无符号整型。 o 按八进制格式显示变量。 x /10gx 0x123456 //常用,从0x123456开始每个单元八个字节,十六进制显示10个单元的数据 x /10gx $rdi //从rdi指向的地址向后打印10个单元,每个单元4字节的十进制数
打印指令:
p fun_name //打印fun_name的地址,需要保留符号 p 0x10-0x08 //计算0x10-0x08的结果 p &a //查看变量a的地址 p *(0x123456) //查看0x123456地址的值,注意和x指令的区别,x指令查看地址的值不用星号 p $rdi //显示rdi寄存器的值,注意和x的区别,这只是显示rdi的值,而不是rdi指向的值 x /10i //我一般喜欢用x显示指令
堆
arena //显示arena的详细信息 arenas //显示所有arena的基本信息 arenainfo //好看的显示所有arena的信息 bins //常用,查看所有种类的堆块的链表情况 fastbins //单独查看fastbins的链表情况 largebins //同上,单独查看largebins的链表情况 smallbins //同上,单独查看smallbins的链表情况 unsortedbin //同上,单独查看unsortedbin链表情况 tcachebins //同上,单独查看tcachebins的链表情况 tcache //查看tcache详细信息 heap_config //显示堆相关配置 malloc_chunk //打印一个chunk. mp //打印mp_ struct’s 内容. vis_heap_chunks //可视化在堆上的chunks heap //数据结构的形式显示所有堆块,会显示一大堆 heapbase //查看堆起始地址 heapinfo、heapinfoall //显示堆得信息,和bins的挺像的,没bins好用 parseheap //显示堆结构,很好用 tracemalloc //好用,会跟提示所有操作堆的地方
栈
stack //查看栈 retaddr //打印包含返回地址的栈地址 canary //直接看canary的值 plt //查看plt表 got //查看got表
其他
hexdump //像IDA那样显示数据,带字符串 distance //打印两个参数之间的距离 telescope //显示从指定地址开始的内存内容