驅動

1.使用DebugView查看輸出信息
對內核調試是作系統底層驅動開發的必修課,固然也是有興趣纔可能進行深刻的挖掘。進行驅動調試能夠有不少工具能夠用,好比DebugView能夠查看一些DbgPrint的輸出的輸出信息(固然它的功能還有其餘)以下圖(很差意思,圖還在審覈中):

點擊菜單「Capture」,在彈出的菜單中勾選想要監控的輸出信息,就能夠在動態調試時看到你在程序中使用DbgPrint輸出的信息!
下面咱們舉一個驅動的小例子,來看下效果(相關資料能夠參考驅動開發的教程《寒江獨釣》)。
實例1:
首 先要安裝相應的工具,咱們這裏用到了,VMWare,WDK,DebugView,任意文本編輯工具。我這裏用了VS2008做爲編輯工具,感受編寫工具 都無所謂的,我機子上裝我這個,並且它能夠實現自動生成格式,總而言之,我對這個比較熟悉,你們根據喜愛選擇。其餘相關的工具從網上下載便可。
(1)測試程序
爲了可以在這個驅動做爲服務進行添加於卸載時可以給你們一清晰的提示,這裏編寫MyDriver.c以下(參考《寒江獨釣》)
#include <ntddk.h>  //可能你們還記得<ntifs.h>,ntddk.h貌似比ntifs.h要高級些,看其源碼發現,
                                //在define的時候ntddk.h會關照 ntifs.h,但ntifs.h卻不關照它,哎!好傷心呀!
//在調試時,卸載這個驅動服務時,能夠在此輸出調試信息
void DriverUnload( PDRIVER_OBJECT driver )
{
     //輸出用於調試的信息
     DbgPrint( "My driver is unloaded!\r\n" );
}

//DriverEntry,就至關與主函數main(),不少作驅動的同僚會把這些函數用宏進行重定義,
//以適應其長期用其餘工具編寫調試程序和編寫程序的習慣
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
    //輸出相應得調試信息
    DbgPrint( "This is my driver!\r\n" );  //注意這裏的"\r\n",這個我在調試時發現了點問題,下面解釋
    //設置卸載函數,便於函數的退出請求的響應,當有服務中止事件時會自動調用DriverUnLoad函數
    driver->DriverUnload = DriverUnload;
    return STATUS_SUCCESS;
}
(2)makefile文件與SOURCES文件
爲 了可以在WDK中進行編譯,另外還須要兩個文件,makefile與SOURCES文件,makefile文件能夠從WDK的安裝目錄下的src文件夾下 的一些實例中進行拷過來,固然SOURCES文件也可拷過來。不過實例這個文件夾要在安裝WDK時選擇徹底安裝,不然可能就看不到了,我裝的是WDK 6001.18002,我拷出一個makefile你們能夠參考一下。
#
# DO NOT EDIT THIS FILE!!!  Edit .\sources. if you want to add a new source
# file to this component.  This file merely indirects to the real make file
# that is shared by all the driver components of the Windows NT DDK
#
!INCLUDE $(NTMAKEENV)\makefile.def
最主要的是最下面的那個包含文件makefile.def,其實不一樣版本會有不一樣的makefile,這個makefile.def中會定義相應的信息。咱們手工鞋一下SOURCES文件就能夠了。
TARGETNAME = MyDriver
TARGETTYPE = DRIVER
SOURCES = MyDriver.c
解 釋一下,TARGETNAME是要生成的.sys的名字;TARGETTYPE是要生成的驅動的類型,爲DRIVER時,生成的擴展名自動爲.sys安全

SOURCES爲要編譯的源文件名,有多個時以空格分隔。編輯器

注意:TARGETNAME後的名字能夠起其餘名字,不必定要用MyDrivers。
(3)編譯生成
把上面的3個文件放到一個文件夾下,而後打開WDK編譯器,方式以下:點擊"開始菜單"->Windows Driver Kits->WDK 6001.18002->Build Environments->Windows 7->Launch Windows XP x86 Checked Build Environment。這個是調試版的,下劃線部分選爲:Launch Windows 7 x86 Free Build Environment 時,編譯出的版本爲發行版的。
在 彈出的編譯窗口中,進入到剛新建的放置已經建立的MyDriver.c、makefile、SOURCES三個文件的目錄下,而後直接輸入build指令 就能夠成功了。若是提示失敗的話,上面會有發生錯誤的行號,我在VS2008下能看到,因此建議你們在編寫的時候選擇一個帶行號的編輯器,而後根據提示找到錯 誤行進行修改。固然編譯提示的錯誤行並不必定就是那一行出現的問題,調試過大一點程序的同窗可能知道,這個就要看你的調試能力了,特別是很大的項目時,作 驅動開發的同窗更要注意藍屏問題,這是作驅動項目的一個致命的問題。固然避免這些異常出現也不是不可能的,好比作代碼保護,也就是對本身寫的代碼信不過 時,或者對於容易出現異常的地方,能夠作異常處理,VC調試狀態下的異常拋出就是一個很好的例子。編譯後就會生成.sys文件,本編譯器生成的信息放到了 「.\objchk_wxp_x86\i386」 目錄下,能夠找到MyDriver.sys。
(4)安裝驅動
在 具體解釋如何安裝以前,仍是要考慮一些問題的。爲了避免使咱們的系統出現不少垃圾信息,而且保證咱們真實系統的穩定性,建議你們在虛擬機上測試,市面上比較 好的虛擬機有VMware,你們自由選擇。我我的是作惡意程序分析平臺,採用的是對開源QEMU進行模塊重構(有興趣的同 志們能夠一塊兒來作),感受系統安全性和穩定性仍是很必要的。本測試採用VMWare(不過在作惡意程序測試時,感受這個虛擬機真的頗有侷限性)。
在 對驅動安裝時你們每每都會看到.inf安裝配置文件,也不是全部的驅動安裝都須要這個,不過這個inf裏面的信息對於惡意程序開發者而言仍是有值得學習的 地方的,至少它會告訴你要安裝一個服務應該去註冊哪些信息。咱們這裏先不討論它的具體內容,因爲本實例比較簡單,咱們直接採用一個小的服務安裝工具就能夠 了。srvinstw.exe能夠從網上下載,華軍網站上有這個,下載直接運行。用這個工具安裝服務時要注意三點(能夠參考《寒江獨釣》,很差意思,不是 爲這本書打廣告,只是感受介紹的還能夠)。
A、在要求輸入要安裝的服務的文件路徑是,要手工輸入,當你選擇瀏覽時它只能選擇.exe,固然這也是這個工具的一個Bug,竟然只考慮到服務只有.exe形式的狀況。
B、在要求輸入服務名時,能夠與原來的服務文件名不一致,並且後面對服務的操做以這裏輸入的服務名爲準。
C、在選擇安裝類型是選擇手動,以便後面好操做。
其餘的按提示進行就行了。
(5)信息查看
簡 單的介紹一下VMWare這個虛擬機,用Ctrl + Alt鍵進行主系統與虛擬系統間的切換,安裝下VMWare Tools就職意實現鼠標切換了,並且能夠支持文件的拖放。正常狀況下都不會出現拖動與切換的問題。下載DbgView.exe,你們能夠下載下來直接拖到到虛擬機中。打開後,勾選菜單」Capture"下的」Captrue Kernel「,這樣才能捕獲到內核信息。
在 開始菜單中,打開運行,輸入"cmd",打開命令提示符窗口,輸入net start MyDriver,便可看到DbgView窗口中的「Debug Print」列下打印出了「This is my driver!」;而後輸入net stop MyDriver,DbgView就會打印出「My driver is unloaded!"。函數

相關文章
相關標籤/搜索