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

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


我可以告訴你 , 現(xiàn)在我將簡要的介紹一下 Kernel-mode driver 編程技術(shù)(這本是第三章的內(nèi)容) 。眼下 , 這已經(jīng)足夠說明 kernel-mode driver 讓系統(tǒng)崩潰是非常容易的事 。當(dāng)驅(qū)動程序出錯時 , Windows 2000 沒有提供一種錯誤恢復(fù)機(jī)制 , 這就導(dǎo)致即使無意中試圖執(zhí)行一個不合法的操作也會招來藍(lán)屏 。當(dāng)然 , 最簡單而且危險(xiǎn)最小的違規(guī)動作就是讀取一個無效的內(nèi)存地址 。由于系統(tǒng)顯示捕獲所有通過空指針進(jìn)行的內(nèi)存訪問 , 這是 C 編程中一個常見的錯誤 , 讀取一個空指針是讓系統(tǒng)崩潰的理想動作 。示例代碼中的 w2k_kill.sys driver 就是這么做的 。這是一個非常簡單的程序 , 同時也是出現(xiàn)在本書中的第一個 kernel-mode driver。
列表 1-1 是 w2k_kill.c 的引用部分 , 展示了引發(fā)藍(lán)屏的錯誤代碼 。當(dāng)編寫這樣無意義的代碼時 , 需要注意內(nèi)建于 Visual C/C的優(yōu)化器可能會抵消你的努力 , 它會跟蹤所有的代碼并試圖消除其中任何有副作用的部分 。在下面的例子中 , 優(yōu)化器并未起作用 , 因?yàn)?DriverEntry() 堅(jiān)持將在 0 地址發(fā)現(xiàn)的東西作為其返回值 。這意味著這個數(shù)值將會被存放到 CPU 的 EAX 寄存器中 , 最簡單的方法就是 MOV EAX, [0] 指令 , 這個指令將會拋出我們期待的異常 。
NTSTATUS DriverEntry ( PDRIVER_OBJECT pDriverObject,
PUNICODE_STRING puRegistryPath )
{
return *((NTSTATUS*)0); // read through NULL pointer
}
列表 1-1 A NULL Pointer Read Operation in Kernel-Mode Crashes the System
w2k_load.exe 程序出現(xiàn)在第三章 , 用來用來載入并啟動 w2k_kill.sys 驅(qū)動程序 。如果你在精神上做好了 kill 掉你的 Windows 2000 系統(tǒng) , 請按照下面的步驟來做:
l 關(guān)閉所有應(yīng)用程序
l 插入本書的附帶光盤
l 在開始菜單中選擇運(yùn)行
l 輸入 d:binw2k_load w2k_kill.sys , 用你 CD-ROM 的盤符替換 d: , 然后單擊確定
當(dāng)單擊后 , w2k_load.exe 將試圖加載 w2k_kill.sys 文件(位于光盤的 bin 目錄下) 。隨后 DriverEntry() 開始執(zhí)行 , 藍(lán)屏出現(xiàn)了 , 如圖 1-3 所示 , 你會看到當(dāng)內(nèi)存數(shù)據(jù)被轉(zhuǎn)儲到頁面文件存儲器時 , 屏幕上會有一個計(jì)數(shù)器從 0 逐漸增加到 100。如果你在啟動和恢復(fù)對話框中選中了自動重起 , 當(dāng)崩潰轉(zhuǎn)儲完成后 , 系統(tǒng)會立即重新啟動 。當(dāng)系統(tǒng)進(jìn)入等待登陸狀態(tài)后 , 稍等一會直到硬盤燈不再閃爍 。這是因?yàn)閷?崩潰轉(zhuǎn)儲數(shù)據(jù)從頁面文件復(fù)制到磁盤文件需要一定的時間 , 特別是你的物理內(nèi)存很大時 。在此時干擾系統(tǒng) , 例如 , 將系統(tǒng)過早的關(guān)閉 , 可能會產(chǎn)生一個無效的崩潰轉(zhuǎn) 儲文件 。
【W(wǎng)indows 2000對調(diào)試技術(shù)的支持】在圖 1-3 中 , 可以看出系統(tǒng)會顯示包含出錯代碼的模塊的名稱( w2k_kill.sys ) , 以及引發(fā)異常的指令地址( 0xBECC3000 ) 。這個地址或許和你的系統(tǒng)的不同 , 因?yàn)樗请S硬件配置而變化的 。驅(qū)動程序的加載地址通常都不確定 , 和 DLL 的加載地址類似 。請記下顯示的地址 ---- 稍后在安裝和配置內(nèi)核調(diào)試器是你還需要它 。
一點(diǎn)小的提示:故意讓系統(tǒng)崩潰不該是你每天都作的事 。盡管有問題的 w2k_kill.sys 本 身是無害的 , 但在它執(zhí)行的那一刻可能并不那么走運(yùn) 。如果度去空指針發(fā)生時另一個線程正在做某些重要的事情 , 系統(tǒng)可能會在該線程有機(jī)會做清理工作之前關(guān)閉 。比如 , 在重起之后 , 活動桌面往往會抱怨發(fā)生了一些可惡的事情 , 它需要進(jìn)行恢復(fù) 。因此 , 在你使系統(tǒng)崩潰之前 , 應(yīng)該仔細(xì)的檢察系統(tǒng)是否影響了重要數(shù)據(jù)并且保證 所有 cache 中的數(shù)據(jù)都被寫入了磁盤 。注意 , 作者和出版商不會對 w2k_kill.sys 驅(qū)動程序造成的破壞負(fù)責(zé) 。
譯注: 達(dá)摩克利斯希臘傳說中的敘拉古國王狄奧尼西奧斯的朝臣 , 據(jù)傳說其被迫坐在上懸寶劍的餐桌旁 , 寶劍由一根頭發(fā)系住 , 以此來暗示君王命運(yùn)的多危

推薦閱讀