Windows編程—Windows驅動開發環境搭建

前言

作爲一個編寫Windows程序的開發人員,對Windows驅動開發 並非必需要掌握,但是掌握 Windows驅動開發對Windows程序開發人員卻有極大的好處。一個直觀的感受 程序操作權限更大了,因爲處在內核層了嘛。應該可以寫更厲害的外掛,普通Windows程序寫個輔助完全是沒問題的,但是涉及到數據修改突破遊戲程序的一些限制 必須用更高權限的內核驅動了。

開始學習Windows驅動開發,第一步當然是環境搭建了。因爲筆者也在驅動環境搭建上也喫過虧,所以這裏進行記錄和分享,當然這裏也是集衆家之長了。

其實筆者在一開始學Windows程序開發的時候 搭過一次驅動開發環境,當時直接用vs2015還是vs2017 忘了,使用WDK10,搭了好幾周 都沒搭成功,最後 無奈放棄。總結下失敗原因,WDK10的版本衆多 而且還要和當前 操作系統一一對應,而且win10 又經常更新,當時調試機也是用的win10版本,筆者電腦配置也不行 開win10虛擬機也喫力。

這裏筆者建議初學者 不要一開始 就WDK10 和 VS集成開發 調試。先使用windbg 把雙機調試搞起來了 再說。其實vs集成開發調試 也是調用的windbg。這裏順帶說一下 WDK版本和操作系統版本關係。WDK 7600_1 在主機最低Win7安裝,編譯出來的驅動 最低支持到Win XP,VS未集成。WDK8.1 在主機最低Win8上安裝,編譯出來的驅動最低支持Win Visa,VS2013開始集成。WDK 10具體版本 就具體細化了 編譯出來的驅動最低支持到Win7。基本上做Win開發 都是以 Win XP作爲 支持的最後底線,所以一般 我們用WDK7即可了

筆者這裏環境是 主機Win10 + WDK7600_1 + 調試機Win XP Sp3

步驟

步驟一

在win10上安裝 WDK7600_1,將GRMWDK_EN_7600_1.ISO 解壓安裝即可。百度雲下載鏈接

鏈接:https://pan.baidu.com/s/1ldYMIIn6837iq2IYUpNSqg
提取碼:3lex
或者 網上搜索,都可以找到。

步驟二

使用VMware安裝Win XP Sp3虛擬機,安裝完畢後,在C:\boot.ini中添加調試模式啓動選項。添加後如下:

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=115200

此時如果重啓,顯示頁面應該如下,說明boot.ini配置好了。

在這裏插入圖片描述

隨後添加串行端口。用於主機與調試機通信使用的。

在這裏插入圖片描述

步驟三

配置WinDbg

File -> Kernel Debugging -> COM 進行如下配置,端口和波特率要和 虛擬機配置一樣。

在這裏插入圖片描述

也可以 將windbg.exe 發送到桌面快捷方式,在快捷方式 -> 屬性-> 快捷方式 -> 目標 空格後添加如下參數,這樣以後 雙擊 就開始會連接調試機。

// 目標程序後面 添加如下參數
 -b -k com:port=\\.\pipe\com_1,baud=115200,pipe
// 下面是筆者的目標
D:\WinDDK\7600.16385.1\Debuggers\windbg.exe -b -k com:port=\\.\pipe\com_1,baud=115200,pipe

連接測試

在步驟二、三 完全配置好了就可以 測試 雙機調試 是否連通通了,重啓 Win Xp Sp3,可以在啓動項 那裏來回切,這樣就停在那裏了。此時 調試機 的串口已經啓動了,此時可以進行步驟三 進行連接了。

在這裏插入圖片描述

此時可以點擊 WinXp 調試啓動了。

此時WinDbg如下:

在這裏插入圖片描述

此時,虛擬機也會被暫停,在kd> g 繼續,測試虛擬機正常啓動。

在虛擬機中可以加載驅動進行測試,看windbg是否有輸出,調試機 連接 windbg 調試,請看步驟五。

在這裏插入圖片描述

步驟四

配置系統內核符號表。筆者用的Win XP Sp3 x86版本,下的符號表 WindowsXP-KB936929-SP3-x86-symbols-full-ENU.exe 這個,本來微軟可以在線獲取符號表,筆者自己測試 貌似沒起效果 沒有進行在線獲取。百度雲鏈接:

鏈接:https://pan.baidu.com/s/1ABA8qcealpBKr_Op2QF_Pw
提取碼:wmi3

筆者這裏選擇的安裝目錄時在 C:\symbols。這裏一定要注意,我們配置符號表路徑 不能直接是根目錄,一定得 具體到下面的子目錄 纔是 pdb路徑。

在這裏插入圖片描述

在 系統環境路徑配置如下:

在這裏插入圖片描述

_NT_SYMBOL_PATH
F:\Book\Windows\Windows內核安全與驅動開發隨書源代碼\first\objchk_wxp_x86\i386;C:\Symbols\acm;C:\Symbols\ax;C:\Symbols\cnv;C:\Symbols\com;C:\Symbols\cpl;C:\Symbols\dic;C:\Symbols\dll;C:\Symbols\drv;C:\Symbols\ds;C:\Symbols\exe;C:\Symbols\iec;C:\Symbols\ime;C:\Symbols\ocx;C:\Symbols\scr;C:\Symbols\sys;C:\Symbols\tpl;C:\Symbols\tsp;C:\Symbols\wpc;SRV*C:\Symbols_cache*http://msdl.microsoft.com/download/symbols;

筆者這裏是 把測試的sys驅動的 pdb路徑配置上,然後再纔是本地Win XP Sp3系統符號表,最後再纔是 在線獲取符號表配置(筆者這裏測試貌似不起效果)。

配置完了後,可以重寫進行連接測試,走到 kd> 命令行處,或者如果在運行時直接 Debug -> Break 也會進行中斷到 kd> 命令行處,我們進行一些簡單測試。

// 1、查看設置的符號表路徑,如果查找出來不是簽名配置的路徑,可以在WinDbg->File->Symbol File Path 將路徑路徑拷貝進入勾上Reload框 然後點擊OK。 就會重新加載符號文件路徑了。
kd> .sympath	
// 2、查看相應的模塊信息,如果能查找系統模塊pdb說明 我們配置系統符號表沒問題
kd> !lmi ntkrpamp

在這裏插入圖片描述

步驟五

我們準備一個 測試用的sys,看能否進入斷點調試。我們只需要找一個可以加載裝載驅動的軟件就可以了。這裏筆者用 Driver Monitor軟件來加載驅動。

這裏準備一個sys文件,這裏筆者直接用<< Windows內核安全與驅動開發 >> 隨書源代碼中的 first例子。使用 x86 Free Build Environment(安裝好wdk後,在啓動菜單可以找到) 進行編譯,cd 切換到first.sys目錄,然後build。會生成如下的 first.pdb和first.sys。

first.c

///
/// @file first.c
/// @author crazy_chu
/// @date2008-11-1
/// 

#include <ntddk.h>
	
// 提供一個Unload函數只是爲了
VOID DriverUnload(PDRIVER_OBJECT driver)
{
	// 但是實際上我們什麼都不做,只打印一句話:
	DbgPrint("first: Our driver is unloading…\r\n");
}

// DriverEntry,入口函數。相當於main。
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
#if DBG
       _asm int 3
#endif
	// 這是我們的內核模塊的入口,可以在這裏寫入我們想寫的東西。
	// 我在這裏打印一句話。因爲”Hello,world” 常常被高手恥笑,所以
	// 我們打印一點別的。
	DbgPrint("first: Hello, my salary!\r\n");

	// 設置一個卸載函數便於這個函數能退出。
	driver->DriverUnload = DriverUnload;
	return STATUS_SUCCESS;
}

在這裏插入圖片描述

這個路徑 要添加到 環境變量_NT_SYMBOL_PATH 或者 WDK中的 sympath中去。

我們把first.sys 拷貝到 虛擬機中,然後使用 monitor,File ->Open Driver first.sys ,然後再File->Start Driver 這時會去裝載驅動,然後再File->Stop Driver 這時會去 卸載驅動。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

總結

作爲初學者,建議先把 windbg雙機調試模式 搞起來這纔是王道,vs集成驅動開發可以後面再搞。筆者認爲 win10 + wdk7 + win xp sp3 雙機調試也是最省配置的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章