日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Windows 2000對(duì)調(diào)試技術(shù)的支持( 四 )


安裝符號(hào)文件
重新啟動(dòng)后 , 你就有了一個(gè) Windows 2000 系統(tǒng)的快照( snapshot ) , 包括一個(gè)有問(wèn)題的 Kernel-mode Driver (讀取空指針時(shí)被捕獲) 。觀(guān)察此快照文件和察看實(shí)際系統(tǒng)內(nèi)存是一樣的 。當(dāng)然 , 這個(gè)快照文件和動(dòng)物死尸一樣 --- 不再對(duì)外界刺激有所反應(yīng) , 但是你現(xiàn)在不需要擔(dān)心這些 。接下來(lái)你需要安裝內(nèi)核調(diào)試器需要的符號(hào)文件( symbol files ) , 當(dāng)你分析崩潰文件時(shí) , 你就會(huì)用到了 。
MSDN 用戶(hù)可以在 Windows 2000 Customer Suuport – Diagnostic Tools 光盤(pán)上找到這些符號(hào)文件 。插入光盤(pán) , 用 IE 打開(kāi)光盤(pán)上的 DBG.HTM 文件 , 你會(huì)看到很多安裝選項(xiàng) 。如果你運(yùn)行的是 free build 的 Windows 2000 , 你最好安裝 retail symbols。對(duì)于 checked build 版 , 可以選擇安裝 debug symbols。安裝程序會(huì)從 SYMBOLS.CAB 中復(fù)制一些 .dbg 和 .pdb 文件到系統(tǒng)符號(hào)文件目錄中 。默認(rèn)的系統(tǒng)符號(hào)文件目錄為: %SystemRoot%Symbols。%SystemRoot% 環(huán)境變量代表 Windows 2000 的安裝目錄 。
在起動(dòng)時(shí) , Windows 2000 內(nèi)核調(diào)試器會(huì)嘗試通過(guò)環(huán)境變量 _NT_SYMBOL_PATH 指示的路徑來(lái)尋找符號(hào)文件 , 所以最好正確的定義該變量 。
譯注:
現(xiàn)在可以通過(guò) Symchk.exe 工具來(lái)檢查和下載最新的符號(hào)文件 , 該工具隨 Debugging Tools for Windows 軟件包安裝 。
微軟的文檔中對(duì)于 _NT_SYMBOL_PATH 應(yīng)該指向哪里的說(shuō)明有些模糊不清 。在 DDK 的內(nèi)核調(diào)試一節(jié)里提到必須包含符號(hào)子目錄 , 即 C:WINNTSymbols 或等價(jià)目錄 。而在 SDK 關(guān)于 dbghelp.dll 庫(kù)的文檔中 , 有關(guān)符號(hào)路徑的描述又稍微有些區(qū)別:
“該庫(kù)需要使用符號(hào)搜索路徑來(lái)定位 .dll 、 .exe 或 .sys 對(duì)應(yīng)的調(diào)試符號(hào)( .dbg 文件) 。它會(huì)在路徑后添加 dll 、 exe 或 sys。例如 , .dll 符號(hào)文件位于: C:WINNTSymbolsdll , .exe 文件的路徑則為: C:WINNTSymbolsexe ”
。。。。。。
“如果你設(shè)置了 _NT_SYMBOL_PATH 環(huán)境變量 , 符號(hào)管理器按照如下順序搜索符號(hào)文件:
1. 應(yīng)用程序的當(dāng)前工作目錄
2. _NT_SYMBOL_PATH 指示的目錄
3. _NT_ALT_SYMBOL_PATH 指示的目錄
4. SYSTMEROOT 指示的目錄

這樣看來(lái)把 _NT_SYMBOL_PATH 設(shè)定為 C:WINNT 似乎要好于 C:WINNTSymbols , 為了確定哪種說(shuō)法是正確的 。我試驗(yàn)了這兩種方法 , 很高興它們都能正常的工作 。
配置內(nèi)核調(diào)試器
構(gòu)建調(diào)試環(huán)境的最后一步就是安裝和配置內(nèi)核調(diào)試器 。如果你已經(jīng)安裝了 Windows 2000 DDK , 那你可以在 NTDDKbin 目錄中找到調(diào)試器 。內(nèi)核調(diào)試器的可執(zhí)行文件名為 i386kd.exe。另一種方法是從 Windows 2000 Customer Support---Diagnostic Tools 光盤(pán)中安裝 。
為了使用前面我們得到的崩潰轉(zhuǎn)儲(chǔ)文件 , 你需要使用 i368kd 的 –Z 選項(xiàng) 。示例如下:
i386kd –z C:WINNTMEMORY.DMF
成功打開(kāi)我們的 crash dump 后 , 你會(huì)看到類(lèi)似圖 1-7 所示的東東 , kd> 提示符會(huì)出現(xiàn) , 這表示內(nèi)核調(diào)試器已經(jīng)準(zhǔn)備接受命令了 。在開(kāi)始之前 , 請(qǐng)檢查符號(hào)搜索路徑是否正確 。列出的啟動(dòng)信息 , 表示調(diào)試器已經(jīng)加載了三個(gè)擴(kuò)展 DLL。i386kd.exe 一個(gè)強(qiáng)大的特性就是其擴(kuò)展機(jī)制 , 這允許第三方采用獨(dú)立的 DLL 來(lái)擴(kuò)展其基本功能 。對(duì)于這些擴(kuò)展的命令 , 要在其前面加上!號(hào)以區(qū)分內(nèi)建的命令 。
如圖 1-7 所示 , 我輸入了一個(gè)內(nèi)建命令: u becc3000 , u 的含義是“反編譯( unassembel )” , becc3000 是開(kāi)始反編譯的 16 進(jìn)制地址 。默認(rèn)情況下 , 均采用 16 進(jìn)制 , 但你也可也通過(guò)命令來(lái)改變此默認(rèn)值 。命令為: n 10 , 此后默認(rèn)所有數(shù)字都是 10 進(jìn)制表示 。你可以使用 0x 前綴來(lái)表示這是一個(gè) 16 進(jìn)制數(shù) 。地址 becc3000 就是 w2k_kill.sys 引起系統(tǒng)崩潰的地方 。請(qǐng)使用你在藍(lán)屏?xí)r看到的地址 。如果一切正確的話(huà) , 你會(huì)看到 mov eax, [00000000] 指令 , 如上圖所示 。如果沒(méi)有看到的話(huà) , 你可能沒(méi)有使用正確的崩潰轉(zhuǎn)儲(chǔ)文件 。mov eax, [00000000] 指令表示從虛擬地址(也可稱(chēng)作線(xiàn)性地址) 0x00000000 讀取一個(gè) 32 位的數(shù)值到 CPU 寄存器 EAX 中 , 這明顯是列表 1-1 中 *(NTSTATUS*)0) 表達(dá)式的實(shí)現(xiàn) , 等同于讀取空指針的操作 。沒(méi)有針對(duì)此類(lèi)錯(cuò)誤的異常處理例程 , 因此 , 系統(tǒng)在藍(lán)屏上會(huì)顯示 KMODE_EXCEPTION_NOT_HANDLED , 如圖 1-3 所示 。如果你想知道有關(guān)此錯(cuò)誤信息更多的東西請(qǐng)參考《 The NT Insider 》( Open Systems Resources 1999b ) 。

推薦閱讀