Windbg簡單命令

來源:互聯網
上載者:User

 

Windbg簡單命令

 

__stdcall呼叫慣例的棧結構
ebp+8  |函數的第一個參數
ebp+4  |函數的返回地址   
ebp        |ebp                         
ebp-4    |局部變數               

 

1.短命令
2.元命令(.)
3.擴充命令(!)

獲得進程peb============================================================

!peb

獲得線程teb============================================================

!teb

顯示從系統函數中返回的錯誤=================================================

!gle

調試=================================================================

t: 逐步執行
~.t:在當前線程處逐步執行(防止線程切換)
p: 步過
pc: 執行到下一個子常式call處
g: 繼續執行
g 地址: 繼續執行到指定地址
gu : 執行到返回
~0 gu : 除了線程0外,凍結其他所有的線程
u .l4 : 對函數進行反組譯碼以找出一個合適的執行停頓點

 

偽寄存器==============================================================

r + 名字
名字:代碼
$proc:當前的進程
$thread:當前的線程
$tpid:當前的進程標識
$tid:當前的線程標識
$peb:進程式控制制塊
$teb:線程環境塊

 

處理器當前執行的代碼是什麼=================================================
u(Unassaembly)反組譯碼命令
u.:反組譯碼當前$ip地址上的8條指令
uf.:反組譯碼包含當前$ip的整個函數
ub.:反組譯碼當前$ip之前的8條指令
u.L2:反組譯碼當前$ip之後的2條指令
ub.L2:反組譯碼當前$ip之後的2條指令
u..+a:反組譯碼在$ip+10之間的10條指令

 

當前的調用棧是什麼=======================================================
k(Stack Back Trace)棧回溯命令
kp 5:顯示在調用棧中前5個函數以及他們的參數
kf 5:顯示前面的5個函數,第一個數字是函數使用的棧大小
k = 棧基指標 棧頂指標 指令指標:當k命令無法解析棧的時候可以手動指定

 

在代碼中設定斷點=========================================================
bp: 參數可以是1.設定斷點的地址2.斷點選項3.斷點限制4.一個字串表示斷點觸發時需要執行的命令(可以用;號隔開)
例子:~0 bp Program!CClass::Func "resp;g"
線上程0上設定斷點,並在斷點觸發時執行"resp"命令和"g"命令
bl: 列出所有斷點
bc: 清除所有斷點
核心中使用斷點:
bp ntdll!RtlAllocateHeap 所有進程都會觸發的點
bp /p @$proc ntdll!RtlAllocateHeap "!process -1 0;g" :在ntdll!RelAllocateheap上設定斷點,只有EPROCESS為@$proc時才會觸發,並執行命令
使用者態時使用斷點:
bm Program!*class* : 在類class的所有方法上加上斷點
bu ole32!CoInitializeEx沒有載入的動態連結程式庫上使用延遲斷點,當連結庫載入的時候自動化佈建

 

變數的值是什麼===========================================================

dv:不帶參數的dv顯示局部變數的值
dv Program!gFun* :顯示匹配模式的值
dv /i :在第2列顯示符號類型(公私人?)和參數類型(局部變數,參數..)
dv /v 變數名:顯示變數儲存的地址

dt:解析變數的資料類型
dt this :解析this變數的類型(為某個類指標)
dt 類名 地址: 按照類名的類結構來解析指定地址的記憶體

 

如何查看記憶體============================================================
dc 地址 長度: 如 dc 0x005f0ea0 l4 : 轉存出0x005f0ea0上4個雙字資料
dd 地址: 查看地址上的資料
du 地址: 轉存出地址上的unicode字串
da 地址: 轉存出地址上為ascii的字串
db 地址 長度: 如 db 0x005f0ea0 l4 : 將4個位元組轉存為一個位元組數組
dyb 地址 長度: 以二進位格式轉存為4個位元組;以二進位格式轉存為4個雙字
dyd 地址 長度: 轉存出4個浮點數
dp* 地址: 重複以某種格式讀取地址 , 如dpu就是用地址數群組轉換成unicode字串輸出

 

如何搜尋記憶體============================================================
s -d L10000000/4 C0000005 :在地址空間前的256MB中搜尋C0000005

 

設定記憶體訪問斷點=========================================================
ba w4 gGlobal+0: 在gGlobal+0地址處檢測4個位元組上的寫入操作

 

在記憶體位置上包含的是什麼===================================================
!address 地址/寄存器/堆/空: 為空白時所有並且枚舉所有的記憶體地區並給出詳細的資訊

 

怎麼改變地址上的值=======================================================
ed 地址 值:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.