做pwn题总是离不开pwndbg等调试工具,这里记录一下一些常用的调试技巧。
常用命令
help查看所有命令
调试命令
调试前的准备指令
checksec查看保护aslr <on/off>开启/关闭aslr
控制程序的命令
dbg <filename>直接启动r运行c继续运行n单步运行s单步运行,进入函数b设置断点b *0x7ffff7a5c060设置断点在地址b main设置断点在函数b $rebase(0xdeadbeef)设置断点在相对地址(常用于题目开了pie无法获得准确地址时的选择,参数就是偏移量)info b查看所有断点信息delete 5删除第5个断点disable 5禁用第5个断点enable 5启用第5个断点clear清除所有断点
查看数据内容和类型的命令
p查看变量p $esp查看esp寄存器p $ebp查看ebp寄存器p $eip查看eip寄存器p 10-4打印10-4的值p &var打印变量地址p *0x7ffff7a5c060打印地址0x7ffff7a5c060的值- ……(反正就是接
$寄存器名或者表达式)
x查看内存x/10gx查看10个8字节内存x/10gx $esp查看esp寄存器指向的10个8字节内存x/10gx $rebase(0xdeadbeef)查看相对地址0xdeadbeef指向的10个8字节内存- ……(反正就是接
/个数 字节数 输出形式 内存地址)个数查看多少个字节数查看多少字节,可以是b(1字节)、h(2字节)、w(4字节)、g(8字节)- 输出形式可以是
x(16进制)、d(10进制)、c(字符)、f(浮点数)、s(字符串)、i(指令) - 内存地址可以是
$寄存器名、$rebase(偏移量)、0x地址
type查看变量类型type var查看变量类型type $rebase(0xdeadbeef)查看相对地址0xdeadbeef的类型
context查看上下文context regs查看寄存器context stack查看寄存器、汇编、内存
hexdumphexdump $rebase(0xdeadbeef)查看相对地址0xdeadbeef的内存hexdump $rebase(0xdeadbeef) 10查看相对地址0xdeadbeef的10个字节内存
telescope:是比hexdump更智能的选项telescope $rebase(0xdeadbeef)查看相对地址0xdeadbeef的内存
vmmap查看内存映射disassemble查看汇编disassemble main查看main函数的汇编disassemble $rebase(0xdeadbeef)查看相对地址0xdeadbeef的汇编
search查看内存中是否有某个值rop查看rop链plt查看plt表got查看got表symbols查看符号表info查看信息info registers查看寄存器info args查看函数参数info locals查看局部变量info breakpoints查看断点info functions查看函数info variables查看变量info files查看文件info threads查看线程
dps优雅地输出内容dps $esp优雅地输出esp寄存器指向的内存dps $rebase(0xdeadbeef)优雅的输出相对地址0xdeadbeef指向的内存dps addr优雅地输出地址指定地址的内存
procinfo查看进程信息canary查看canarystack查看栈stack 10查看栈顶10个元素retaddr查看所有的返回地址
堆相关命令
heap查看堆heap -v查看堆详细信息heap -s查看堆简略信息heap addr查看指定地址的堆以及高地址堆heapbase查看堆基地址heapinfo查看堆信息heapinfoall查看所有堆信息(我的评价是不如bins)parseheap优雅地显示堆
arena显示arena的基本信息arenas显示所有arena的基本信息arenainfo优雅地显示arena的基本信息
bins查看所有种类的堆块的链表信息fastbins显示fastbins的链表信息largebins显示largebins的链表信息smallbins显示smallbins的链表信息unsortedbins显示unsortedbins的链表信息tcachebins显示tcachebins的链表信息tcache显示tcache的详细信息
tracemalloc跟踪堆分配vis给相邻的堆块上不同的颜色区分,并输出所有内容(按字节输出)
格式化字符串漏洞相关命令
cyclc有规律地生成一串字符串cycle 10生成10个字符的字符串cycle -l "aaag"由于cyclic是生成有规律的一串字符串,所以在应对格式化字符串的时候,如果不知道格式化字符串的长度,可以先使用cyclic 100生成一大串字符串,输入进去,然后直接c,程序就会报错,返回对应的地址被覆盖了,假如被覆盖成“aaag”,就可以使用cycle -l “aaag”来快速获取偏移,注:此时输出的偏移对应着ret对应的地方。