Pwn学习随笔( 六 )

x 按十六进制格式显示变量 。d 按十进制格式显示变量 。u 按十六进制格式显示无符号整型 。o 按八进制格式显示变量 。t 按二进制格式显示变量 。a 按十六进制格式显示变量 。c 按字符格式显示变量 。f 按浮点数格式显示变量 。s 按字符串显示 。b 按字符显示 。i 显示汇编指令 。

  • x /10gx 0x123456 //常用,从0x123456开始每个单元八个字节,十六进制显示10个单元的数据
  • x /10xd $rdi //从rdi指向的地址向后打印10个单元,每个单元4字节的十进制数
  • x /10i 0x123456 //常用,从0x123456处向后显示十条汇编指令
打印指令p(print):
  • p fun_name //打印fun_name的地址,需要保留符号
  • p 0x10-0x08 //计算0x10-0x08的结果
  • p &a //查看变量a的地址
  • p *(0x123456) //查看0x123456地址的值,注意和x指令的区别,x指令查看地址的值不用星号
  • p $rdi //显示rdi寄存器的值,注意和x的区别,这只是显示rdi的值,而不是rdi指向的值
    p *($rdi) //显示rdi指向的值
打印汇编指令disass(disassemble):
  • disass 0x123456 //显示0x123456前后的汇编指令
  • x /10i //我一般喜欢用x显示指令
打印源代码指令list:
  • list//查看当前附近10行代码,要有源码,list指令pwn题中几乎不用,但为了完整性还是简单举几个例子
    • list 38 //查看38行附近10行代码
    • list 1,10 //查看1-10行
    • list main //查看main函数开始10行
修改和查找指令修改数据指令set:
  • set $rdi=0x10 //把rdi寄存器的值变为0x10
  • set *(0x123456)=0x10 //0x123456地址的值变为0x10,注意带星号
  • set args "abc" "def" "gh" //给参数123赋值
  • set args "python -c 'print "1234\x7f\xde"'"' //使用python给参数赋值不可见字符
查找数据:
  • search rdi //从当前位置向后查包含rdi的指令,返回若干
  • search -h //查看search帮助,我也不太长用这个指令
  • find "hello" //查找hello字符串,pwndbg独有
  • ropgadget //查找ropgadget,pwndbg独有,没啥用,可以用其他工具
堆操作指令(pwndbg插件独有)
  • arena //显示arena的详细信息
    • arenas //显示所有arena的基本信息
    • arenainfo //好看的显示所有arena的信息
  • bins //常用,查看所有种类的堆块的链表情况
    • fastbins //单独查看fastbins的链表情况
    • largebins //同上,单独查看largebins的链表情况
    • smallbins //同上,单独查看smallbins的链表情况
    • unsortedbin //同上,单独查看unsortedbin链表情况
    • tcachebins //同上 , 单独查看tcachebins的链表情况
    • tcache //查看tcache详细信息
  • heap //数据结构的形式显示所有堆块,会显示一大堆
    • heapbase //查看堆起始地址
    • heapinfoheapinfoall //显示堆得信息,和bins的挺像的,没bins好用
    • parseheap //显示堆结构,很好用
  • tracemalloc //好用,会跟提示所有操作堆的地方
视图layout:用于分割窗口 , 可以一边查看代码,一边测试 。主要有以下几种用法:layout src:显示源代码窗口layout asm:显示汇编窗口layout regs:显示源代码/汇编和寄存器窗口layout split:显示源代码和汇编窗口layout next:显示下一个layoutlayout prev:显示上一个layoutCtrl + L:刷新窗口Ctrl + x,再按1:单窗口模式,显示一个窗口Ctrl + x,再按2:双窗口模式 , 显示两个窗口Ctrl + x,再按a:回到传统模式,即退出layout,回到执行layout之前的调试窗口 。
其他pwndbg插件独有指令