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插件獨有指令