主要記錄一些在應用層除錯漏洞的技巧,不會寫一些基本的命令,只記錄比較有用的平時難以想到的除錯方法。
1、!address eax
檢視對應記憶體頁的屬性,如果poc觸發異常之後就可以用這個指令看一下觸發異常的記憶體地址的情況
2、dc 0x4232390
以DWORD為組織單位檢視記憶體,比dd命令的優點是可以顯示ascii碼的情況。
3、 ub 0x532930
反彙編給定地址之前的指令,一般對於棧回溯中得到的地址使用這一條命令。因為可以看到回溯函式的呼叫
4、kb、kv和kp
都是棧回溯,但是kb只顯示3個引數,而kp顯示所有引數。kv則有額外的呼叫約定
5、x 函式名
匹配指定模板的符號,可以用來搜尋函式
6、斷點命令之bp、bu、ba
bp是對地址下斷點、bu是對符號下斷點。如果符號位置變了(比如在一個dll中),bu會隨符號而改變bp不會。ba是對資料下斷點,指定訪問模式e執行、w寫、r讀,支援對1、2、4、8個位元組,格式為 ba 訪問模式 位元組數 地址。
bl列出斷點、bc刪除斷點。
7、針對模組的sxe ld:和lmm
lmm可以搜尋模組的資訊,sxe ld:當模組載入後斷下。
8、dds 地址
以地址為基準搜尋附近的函式地址,如果有則顯示符號和地址。
9、設定記錄斷點
bp xxxx ".echo 'Here: ';r eip ;gc" 這樣斷在XXXX的時候就會輸出你指定的暫存器的值
10、ln列出附近的符號
在不知道中斷處的含義時,可以用ln檢視該地址或附近的地址符號。(因為虛擬函式表是有符號的,所以用來分析物件型別有奇效)
11.在滿足條件時中斷下來
".if(){}.else{g;}"
12.jscript與jscript9
jscript9!Js::Math::Cos是jscript9的
jscript!Cos
!heap也有一些很好用的命令
!heap -stat 顯示程式中所有堆的資訊,透過這個命令可以找到堆噴分配記憶體塊所屬的堆
!heap -a HEAP_HANDLE 顯示指定控制程式碼的堆的情況
!heap -stat -h HEAP_HANDLE 可以看到堆中塊的分佈情況
!heap -flt s size 顯示所有指定大小的塊
!heap -p -a 堆分配記錄