Pwn學習隨筆( 五 )

Pwn學習隨筆

文章插圖
而當我們單步執行,執行完puts函數后,在此查看該地址所存儲的內容,可以看到該地址存儲的內容已經發生了改變
Pwn學習隨筆

文章插圖
具體的流程可以看下面這張圖片,對于符號去got表中找它的真實地址,如果不存在就觸發鏈接器/加載器去更新函數的真實地址
Pwn學習隨筆

文章插圖

Pwn學習隨筆

文章插圖
在此查看0xf7e3cc30處存儲的內容 , 其實就是glibc這個運行庫中的puts函數的真實地址
Pwn學習隨筆

文章插圖
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 //常用 , 匯編層面的一步
  • n//單步步過,遇到函數不跟進,相當于step over,源碼層面的一步
    • ni //常用,匯編層面的一步
  • 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不接數字刪除所有縮寫: d 5
  • 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: