Pwn学习随笔( 八 )

//常用 , 从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之前的调试窗口 。

    经验总结扩展阅读