WinDbg學習筆記(一)--認識WinDbg


標 題: 【原創】WinDbg學習筆記(一)--認識WinDbg
作 者: gaorqing
時 間: 2009-07-27,20:45:27
鏈 接: http://bbs.pediy.com/showthread.php?t=94457

WinDbg學習筆記(一)--認識WinDbg


一、前言
    本人學習WinDbg已經有好幾天了,雖說技術掌握的還不太熟練,不過也總算是入門了在學習WinDbg的過程中,覺得WinDbg真的比OllyDbg難很多(不知道是不是習慣OllyDbg的緣故),所以就想做點筆記,那以后自己忘了也可以拿出來復習,也為同樣在學WinDbg的兄弟提供一點幫助。文章寫得有點啰嗦,初學者應該可以很快看完,老鳥就可以飄過了…

二、WinDbg簡介
    WinDbg是微軟發布的一款免費而十分強大的調試工具。既然是微軟自己發布的調試工具,那它對微軟產品的調試當然是十分的強大。但雖說是功能強大,操作起來有時可能十分困難。有時候,可能WinDbg很多特別的功能我們還沒知道,就更別說用得上了。我是個WinDbg的初學者,開始的時候覺得WinDbg真的很難入門,不過現在資料看多了,也就算是參悟了點。很多時候,我們習慣用OllyDbgSoftICESoftICE我沒用過),所以,也可以先從我們熟悉的入手,慢慢了解WinDbg

下面是http://bbs.dbgtech.net/ 里一些資料的截圖,可以加深我們對WinDbg的了解。(本人沒有侵犯原作者版權的意思,只是想着把資料整理出來方便大家看。如有冒犯,請見諒)

內核調試方面:
clip_image001

用戶調試方面:
clip_image002
clip_image003

雖說WinDbg在無源碼調試方面確實比較困難,但在調試內核方面卻真的有獨到之處。我跟大家一樣,可能本身對OllyDbg比較熟悉,所以我會嘗試跟着CCDebuger大牛所寫的《OllyDbg入門系列》的模式進行筆記的書寫。

三、WinDbg的安裝與配置

WinDbg包含在WDK里,也可以獨立的下載。
官方的下載地址:http://www.microsoft.com/whdc/devtoo...g/default.mspx
漢化版的下載地址:http://bbs.pediy.com/showthread.php?...ghlight=WinDbg

下載下來的一般是WinDbg的安裝程序,跟一般程序的安裝過程類似。安裝完后,若要使用漢化版本,就直接把漢化后的啟動文件(例如WinDbg_cn.exe)復制到安裝目錄下,再直接點擊(WinDbg_cn.exe)即可。

啟動后的界面類似:
clip_image004

到這里,可能會發現沒有其它窗口。但其實,只要你點擊對應的窗口按鈕(上圖紅色方框圈着的區域),工作區就會出現相應的窗口。

WinDbg有好幾個窗口,功能跟OllyDbg的差不多。窗口的名稱與用途如下:

名稱                    熱鍵            用途
Command                 Atl+1           輸入命令、顯示命令結果和調試信息輸出
Watch                   Alt+2           觀察指令全局變量、局部變量和寄存器的信息
Locals                  Alt+3           自動顯示當前函數的所有局部變量
Registers               Atl+4           觀察和修改寄存器的值
Memory                  Alt+5           觀察和修改內存數據
Call Stack              Alt+6           棧中記錄的函數調用序列
Disassembly             Alt+7           反匯編
Scratch Pad             Alt+8           白板,可以用來做調試筆記等
Processes and Threads   Alt+9           顯示所有調試目標的列表,包括進程和線程等
Command Browser         Alt+N           執行和瀏覽命令
在彈出需要的窗口后,就可以對窗口進行排列。通過鼠標拖曳窗口或結合右擊窗口標題選擇Dock(停靠)和Always floating(保持浮動),可以把窗口擺放成最適合我們工作的位置。
clip_image005

不知道是不是我自己的問題,本來想着把窗口排列成跟OllyDbg的界面類似,可怎么弄也達不到目的,最后也就選擇了兩個我最常用的窗口(DisassemblyCommand),然后上下擺放。就像:
clip_image006

各位如果有擺放窗口的訣竅,麻煩也告之一下….

四、符號、源碼路徑設置

剛才也說過,WinDbg是一款很強大的源碼調試工具。如果我們有程序的源碼的話,一般可以生成它的符號文件。而在用WinDbg進行調試時,因為WinDbg本身不會自動識別符號文件,所以需要我們設置。
可以通過打開菜單 File Symbol File Path File Source File Path,打開對應的對話框進行設置。
clip_image007

clip_image008

可以直接在Source path編輯框輸入目錄,也可以通過按鈕Browse進行選擇。多個目錄之間用分號隔開。

到這里,可能有人有疑問。符號文件是什么?為什么我們以前用OllyDbg時不用設置符號文件?
其實我接觸到這里的時候也十分的迷惑,甚至當時以為WinDbg只能調試有源碼的文件。但后來,通過試驗,逐步清楚了。

按我理解,符號就是用來標識程序的某個函數、變量或標記的東西。例如,通過載入有源代碼和程序符號的目標文件,就可以輕松的使用 bp WinMain(我用來測試的程序的主函數)和bp 函數名(程序里的某個函數)。

那如果沒有源代碼怎么辦?那只好使用微軟的公共符號庫。所謂公共符號庫,可以理解成WinDbg對某些微軟的系統函數(例如MessageBoxA)的識別,就像OllyDbg能夠識別出MessageBoxA一樣。雖然WinDbg能夠識別出這些系統函數,但卻顯示的不明顯(到后面會接觸到)。

要設置公共符號文件,只需在設置符號文件的編輯框里輸入路徑即可。一般的輸入形式為:
SRV*g:\symbols*http://msdl.microsoft.com/download/symbols
意思大概就是從http://msdl.microsoft.com/download/symbols的地址里下載符號到g:\symbols(自己設置用來保存符號的目錄)。然后設置完可以使用 .reload 命令WinDbg重新加載新的符號文件。具體的用法可以參考WinDbg的幫助文檔。

五、工作空間

工作空間,是WinDbg用來保存當前工作環境的工具。例如可以保存當前工作的窗口布局、符號路徑設置等,當再次載入時就不用重新設置。

例如,當前工作空間還沒載入任何的調試文件,那么它就是WinDbg默認的打開環境。在這里的所有設置,包括窗口布局。符號源碼路徑設置等,都可以根據用戶需要保存起來。WinDbg提供多種保存方式,包括

Save Workspace  ---  直接保存(保存到默認文件)
Save Workspace as ---  另存為(保存到用戶指定的文件)
--------------------------------------------------------------------------
上面兩種方式所說的文件其實並不是真正的文件,而是WinDbg在注冊表里存放工作空間的項。
注冊表的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windbg\Workspaces
這個鍵里一般包含四個子鍵UserKernelDumpExplicit,前3個子鍵用來保存用戶態調試、內核態調試、調試轉儲文件時使用Save Workspace方式系統默認的保存路徑,而Explicit則用來記錄使用Save Workspace as方式保存的命名工作空間。有時或者會發現沒有某個子鍵,這是因為你的WinDbg還沒調試過使用該種調試方式的文件。
例如,我注冊表HKEY_CURRENT_USER\Software\Microsoft\Windbg\Workspaces里有這些項:
clip_image009
那就說明,我的WinDbg目前還沒進行過Dump文件的調試。

再展開User子鍵看看:
clip_image010
可以看出,我在用戶態調試過3個程序,它們分別是CrackMe3.exeCrackMe32.exeadsfsf.exe,而且使用Save WorkSpace方式保存。

可能有人會問,有時后我調試完程序后沒有選擇Save WorkSpace而是直接關閉WinDbg也會自動的保存工作空間。這是因為你的WinDbg使用了“總是保存”的方式。
可以通過打開 菜單----view----Options 打開設置對話框:
clip_image011
圖中用紅色方框圈着的就是工作空間關閉時的提示。
選擇 Always ask  在工作空間關閉時總是詢問用戶是否保存;
選擇 Always save 在關閉時自動把工作空間保存起來;
選擇 Never save  從不保存。

另外,WinDbg還提供另外一種保存方式【Save WorkSpace to File】,作用跟上面兩種的方式差不多,只不過把工作空間以文件的形式保存到磁盤里,那么用戶就可以通過U盤或其它方式把工作空間的環境移植到其它機器上使用。

在打開工作空間方面,當原本是使用默認的保存方式時,WinDbg在打開目標文件的時候同時也會自動打開其對應的工作空間文件。

另外,在載入調試目標后改變了工作空間並保存后,並不改變WinDbg默認的啟動環境,只改變調試目標對應的工作空間保存文件,而只有在WinDbg還沒載入任何調試目標時改變的才會影響原來的啟動環境。


六、常用操作與命令
clip_image012
F9:設置斷點,只要在光標定位的位置(上圖中灰色條)按F9鍵即可,再按一次F9鍵則會刪除斷點。(相當於OllyDbg 中的 F2

clip_image013
F10:單步步過。每按一次這個鍵執行一條反匯編窗口中的一條指令,遇到 CALL 等子程序不進入其代碼。(相當於 OllyDbg中的 F8

clip_image014
F8 or F11:單步步入。功能同單步步過(F10)類似,區別是遇到 CALL 等子程序時會進入其中,進入后首先會停留在子程序的第一條指令上。(相當於 OllyDbg 中的 F7

clip_image015
F7:運行到選定位置。作用就是直接運行到光標所在位置處暫停。(相當於 OllyDbg 中的 F4

clip_image016
Shift+F11:運行到跳出函數。

clip_image017
F5:運行。按下這個鍵如果沒有設置相應斷點的話,被調試的程序將直接開始運行。(相當於 OllyDbg 中的 F9

WinDbg沒有類似OllyDbg的【執行到用戶代碼】功能,但可以用 笨笨雄 寫的插件,又或者可以多次按Shift+F11直到跳到用戶代碼。

    注意,如果反匯編窗口中的某行顯示藍色,並不一定該行就是當前執行到的地址。在WinDbg的反匯編窗口,每次顯示的代碼行數都是固定的,可以通過窗口右上角的previousnext按鈕或着鼠標滑輪查看前后的代碼,而每次顯示在中間的必定會顯示藍色。要回到當前執行到的指令,只需點擊菜單的 Edit > Go to Current Instruction 即可。


七、總結
經過nightxie大牛的提點,知道了bu下的斷點可以保存到WorkSpace里。謝謝提點clip_image018

引用:

Breakpoints that you set by using bu are saved in WinDbg workspaces, but breakpoints that you set by using bp are not saved in workspaces.

    這篇文章很多部分是我自己對WinDbg的理解,有些說法如果不對的話麻煩提點一下,小弟不勝感激。clip_image019

    下面是一些我學習時的資料,在這里也整理一下

貌似是《軟件調試》中的章節
   WinDBG用法詳解.rar[誰下載?]


來自 http://bbs.dbgtech.net/ 的資料
    WinDbg入門系列.part1.rar[誰下載?]
    WinDbg入門系列.part2.rar[誰下載?]
    WinDbg入門系列.part3.rar[誰下載?]


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: