pwndbg 基本操作指令


pwndbg基本操作

基本指令

  • help //幫助
  • i //info,查看一些信息,只輸入info可以看可以接什么參數,下面幾個比較常用
    • i b //常用,info break 查看所有斷點信息(編號、斷點位置)
    • i r //常用,info registers 查看各個寄存器當前的值
    • i f //info function 查看所有函數名,需保留符號
  • show //和info類似,但是查看調試器的基本信息,如:
    • show args //查看參數
  • rdi //常用,+寄存器名代表一個寄存器內的值,用在地址上直接相當與一個十六進制變量
  • backtrace //查看調用棧
  • q //quit 退出,常用
  • vmmap //內存分配情況

執行指令

  • s //單步步入,遇到調用跟進函數中,相當於step into,源碼層面的一步
    • si //常用,同s,匯編層面的一步
  • n //單步補過,遇到函數不跟進,相當於step over,源碼層面的一步
    • ni //常用,同n,匯編層面的一步
  • c //continue,常用,繼續執行到斷點,沒斷點就一直執行下去
  • r //run,常用,重新開始執行
  • start // 類似於run,停在main函數的開始

斷點指令

下普通斷點指令b(break):

  • b *(0x123456) //常用,給0x123456地址處的指令下斷點
    • b *$ rebase(0x123456) //$rebase 在調試開PIE的程序的時候可以直接加上程序的隨機地址
  • b fun_name //常用,給函數fun_name下斷點,目標文件要保留符號才行
    • b file_name:fun_name
  • b file_name:15 //給file_name的15行下斷點,要有源碼才行
    • b 15
  • b +0x10 //在程序當前停住的位置下0x10的位置下斷點,同樣可以-0x10,就是前0x10
  • break fun if $rdi==5 //條件斷點,rdi值為5的時候才斷

刪除、禁用斷點:

  • info break(簡寫: i b) //查看斷點編號
  • delete 5 //常用,刪除5號斷點,直接delete不接數字刪除所有
  • disable 5 //常用,禁用5號斷點
  • enable 5 //啟用5號斷點
  • clear //清除下面的所有斷點

內存斷點指令watch:

  • watch 0x123456 //0x123456地址的數據改變的時候會斷
  • watch a //變量a改變的時候會斷
  • info watchpoints //查看watch斷點信息

捕獲斷點catch:

  • catch syscall //syscall系統調用的時候斷住
  • tcatch syscall //syscall系統調用的時候斷住,只斷一次
  • info break //catch的斷點可以通過i b查看
除syscall外還可以使用的有:
1)throw: 拋出異常
2)catch: 捕獲異常
3)exec: exec被調用
4)fork: fork被調用
5)vfork: vfork被調用
6)load: 加載動態庫
7)load libname: 加載名為libname的動態庫
8)unload: 卸載動態庫
9)unload libname: 卸載名為libname的動態庫
10)syscall [args]: 調用系統調用,args可以指定系統調用號,或者系統名稱

打印指令

查看內存指令x:

  • x /nuf 0x123456 //常用,x指令的格式是:x空格/nfu,nfu代表三個參數
    • n代表顯示幾個單元(而不是顯示幾個字節,后面的u表示一個單元多少個字節),放在/后面
    • u代表一個單元幾個字節,b(一個字節),h(2字節),w(四字節),g(八字節)
    • f代表顯示數據的格式,f和u的順序可以互換,也可以只有一個或者不帶n,用的時候很靈活
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 //好用,會跟提示所有操作堆的地方

其他pwndbg插件獨有指令

  • cyclic 50 //生成50個用來溢出的字符,如:aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaama

  • $reabse //開啟PIE的情況的地址偏移

    • b *$reabse(0x123456) //斷住PIE狀態下的二進制文件中0x123456的地方
    • codebase //打印PIE偏移,與rebase不同,這是打印,rebase是使用
  • stack //查看棧

  • retaddr //打印包含返回地址的棧地址

  • canary //直接看canary的值

  • plt //查看plt表

  • got //查看got表

  • hexdump //像IDA那樣顯示數據,帶字符串


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM