運用windbg進行核心除錯, 熟練的運用命令列是必不可少的技能. 但是面對眾多繁瑣的命令, 實在是不可能全部的了解和掌握. 而了解kernel正是需要這些命令的指引, 不斷深入理解其基本的內容. 下面, 將介紹最常用的一些指令, 使初學kernel除錯的朋友們能有乙個大致的了解. 至於如何熟練的運用它們, 還需要實際的操作過程中進行反覆的琢磨.
windbg能夠方便的進行遠端除錯和本地程序除錯(只限於user模式), 遠端除錯又分user mode和kernel mode兩種. 個人認為用windbg進行遠端的user mode除錯還不如用visual studio來的方便, 畢竟要一些相應的配置才行, 而visual studio只需要遠端機器的ip位址即可.(當然, 如果你在livecd或winpe下進行user mode的除錯, 這時候沒有vs, windbg就是不二之選了). windbg的優勢就在於遠端的kernel模式的除錯, 這是vs所做不到的.
1. 首先是設定符號路徑(無論在user mode下還是kernel mode下都需要), 在windbg的符號路徑對話方塊中, 輸入以下符號路徑:
這個符號路徑是自動在微軟給定的symbols路徑下進行自動搜尋, 一些常用的符號都可以利用這個鏈結自動找到. 當然, 如果你的本地已經有相應的符號路徑, 包含本地的也可以.
2. 等windbg的聯機狀態設定好後, 按下ctrl+break, 中斷當前的kernel狀態, 在windbg的命令列視窗輸入"?", 則會輸出幫助選單, 在這個menu中會顯示一些常用的命令:
(1)斷點指令
b[c|d|e]
clear|disable|enable breakpoints bl
list breakpoints
bp set soft breakpoints
ba break on access
(2)資料檢視指令
d[type]
dump memory
dt [-n|y] [[mod!]name] [[-n|y]fields][address] [-l list] [-a|c|i|o|r[#]|v]
dump using type information
dv
dump local variables
(3)資料修改指令
e[type]
enter memory values
(4)執行
g[h|n] [=[...]]
gop [=]
step over
(5)堆疊操作
k[b|p|p|v]
(6)顯示載入的模組列表 lm
list modules
(7)暫存器操作
r [[[= ]]]
view or set registers
(8)search指令 s
search memory
(9)跟蹤指令t,ta,tb,tc,wt,p,pa,pc
(10)退出 q
(11)反彙編
u其中最常用的就是反彙編操作和顯示模組操作. lm命令顯示當前載入的模組. 當你連線過程中, windbg提示相應的module找不到時, 就可以運用這個命令進行檢視. lm的乙個擴充套件命令是"lm t n", 這個命令顯示當前所有載入的驅動資訊(過去的命令是!driver),在除錯核心驅動的過程中非常有用,可以找到相應驅動的起始位址。反彙編命令u, 可以在相應的位址中逐步的解析**,這在核心除錯中是最常用的一種檢視**的方式。
除上面的一些基本命令之外,還有一些非常有用的指令:
(1)k[kb|kp]
顯示當前的堆疊,當然也可以用alt+6直接調出視窗顯示
(2)!process
顯示當前的程序exprocess狀態,!process 0 0 顯示所有的程序狀態
(3)!thread
顯示當前的執行緒狀態,dt nt!_ethread顯示ethread結構
(4)!drvobj [path]
列出當前的驅動程式在驅動物件中的例程,其中path是驅動的裝置路徑,例如: !drvobj /filesystem/fat 2 列出fat檔案系統驅動的例程
(5)dt nt!_*
檢視核心的資料結構
(6)!stack 0
顯示執行緒當前位址
(7)!ioapic
檢視i/o的中斷控制器
(8)!irql
檢視cpu的irql,這在cpu中斷除錯中非常有用
(9)!exqueue
可以看系統輔助的執行緒列表
(10)!reg viewlist
登錄檔的儲存顯示,!reg hivelist顯示登錄檔乙個儲存的記憶體使用量
(11)!vm
顯示系統的記憶體池資訊
(12)dt _token
顯示內部訪問令牌
(13)!object /device
顯示裝置物件資訊,用winobj工具也可以看到
以上命令是一些常用的核心除錯命令, 還有非常多的命令技巧, 不可能全部一一解釋. 在今後的文章, 還會結合具體的除錯過程分析進行逐步介紹. 核心的除錯無非是處理器, 系統裝置, 記憶體, 程序執行緒, 登錄檔, 驅動這幾大類的資訊, 每一類都有很多的命令, 需要我們在實際的除錯過程中不斷認識和體會它的用法. 當然, 理解這些命令用法的前提是需要我們對作業系統內部構造有乙個清晰的認識. 這需要不斷的學習, 對os有乙個全域性的把握, 這樣才能更深入的理解它. 而通過windbg的核心除錯, 我們有一種更好的方式直接與kernel打交道, 這對我們深入理解和認識作業系統有很大的幫助. 下一節我們將通過乙個實際的除錯driver的例子, 來進一步認識windbg在核心除錯中的作用.
Windbg核心除錯之二 常用命令
運用windbg進行核心除錯,熟練的運用命令列是必不可少的技能.但是面對眾多繁瑣的命令,實在是不可能全部的了解和掌握.而了解kernel正是需要這些命令的指引,不斷深入理解其基本的內容.下面,將介紹最常用的一些指令,使初學kernel除錯的朋友們能有乙個大致的了解.至於如何熟練的運用它們,還需要實際...
Windbg 核心除錯 常用命令
運用windbg進行核心除錯,熟練的運用命令列是必不可少的技能.但是面對眾多繁瑣的命令,實在是不可能全部的了解和掌握.而了解kernel正是需要這些命令的指引,不斷深入理解其基本的內容.下面,將介紹最常用的一些指令,使初學kernel除錯的朋友們能有乙個大致的了解.至於如何熟練的運用它們,還需要實際...
使用WinDbg核心除錯
看雪學院,笨笨翻譯 使用windbg核心除錯 很有用的資料,由於太長,加上很多,偷懶,留個鏈結在這裡。這裡簡要做一些我測試時候的筆記 首先你要配置好測試環境 參考vmware windgb win7 核心驅動除錯 在你的主機上配置symbols 接著檢查是否已經載入sys.dbg,命令為 kd lm...