pwndbg+pwngdb&调试常用

本来一直在用gef,但后面发现还是pwndbg骚东西多一点,就弃坑了,在丁老写出新的gdb调试工具之前,在此之前我就先用着pwndbg+pwngdb

1.1 基础的调试快捷键

  • s step,si步入

  • n 执行下一条指令 ni步入

  • b 在某处下断点,可以用

    • b * adrress
    • b function_name
    • info b 查看断点信息
    • delete 1删除第一个断点
  • c 继续

  • r 执行

  • disas addr 查看addr处前后的反汇编代码,也可以是函数名字

1.2 显示数据

  • p 系列
    • p system/main 显示某个函数地址
      • p $esp 显示寄存器
    • p/x p/a p/b p/s。。。
    • p 0xff - 0xea 计算器
    • print &VarName 查看变量地址
    • p * 0xffffebac 查看某个地址处的值
  • x系列
    • x/xw addr 显示某个地址处开始的16进制内容,如果有符号表会加载符号表
    • x/x $esp 查看esp寄存器中的值
    • x/s addr 查看addr处的字符串
    • x/b addr 查看addr处的字符
    • x/i addr 查看addr处的反汇编结果
    • gx,wx,bx,分别表示查看八字节,四字节,单字节,前面还可以跟数字,表示查看的数量,如x/20gx
  • info系列
    • info register $ebp 查看寄存器ebp中的内容 (简写为 i r ebp)
    • i r eflags 查看状态寄存器
    • i r ss 查看段寄存器
    • i b 查看断点信息
    • i functions 查看所有的函数
  • disass addr 查看addr处前后的反汇编代码
  • stack 20 查看栈内20个值
  • vmmap 查看映射状况 
  • elfheader查看elf文件中各个段的起始地址 
  • argc打印出参数的数量。
  • args打印出argv的内容
  • telescope +地址,直接以栈的形式查看某个地址

1.3 查找数据

  • search 可以查找内存中的各种数据,能搜各种字节大小的数据,指针,整数,可用-h查看具体用法
  • pwndbg有支持rop,ropper,ROPgadget,但我觉得不好用,还是单独使用这些工具找rop方便
  • plt,got,可以直接看到对应的表的内容
  • code,可以直接看到elf的偏移基址
  • canary 可以直接看到canary的值
  • retaddr打印出包含返回地址的堆栈地址

1.4 修改数据

  • set $esp=0x110 修改寄存器的值

  • set *0xf7ff3234=0x08042334 修改内存的值

  • set args “asdasg” “afdasgasg” “agasdsa” 分别给参数1,2,3赋值

  • set args “python -c 'print "1234\x7f\xde"'” 这个参数中用python脚本重写了一下,避免有些字符无法正确设置

  • r “arg1” “arg2” “arg3” 设置参数

  • run $(perl -e 'print "A"x20')

  • run $(perl -e 'print "A"x20')

  • 使用cyclic 100 可以创建100字符,用来溢出输入,再用cyclic -l xxx可以得到偏移

1.5堆系列

arena

arenas

parseheap 显示堆状况 这个特别好用,很方便看到堆的布局

fastbins

largebins

bins

heap

hexdump 可以打印出16进制和对应ASCII

heapinfo

magic 这个也很骚,直接打印出常见的有用的函数和变量的地址

malloc_chunk +地址 可以 看到具体的chunk的情况

top_chunk

tcache

tcachebins

tracemalloc 这个非常好用,输入以后,程序中任何进行有关堆的操作都会提示

PS

另外这里说一下peda中禁用自动保存调试信息文件的方法

在/peda/blob/master/lib/config.py中找到

"autosave" : ("on", "auto saving peda session, e.g: on|off")

改成off就行了

参考以下:

introspelliam

https://blog.minivet.kr

https://blog.xpnsec.com