Windows 内核(WRK)简介
引子
WRK?是微軟于 2006 年針對教育和學術界開放的?Windows?內核的部分源碼,
WRK(Windows Research Kernel)也就是?Windows?研究內核,
在?WRK?中不僅僅只提供了?Windows?內核模塊的部分代碼,其還提供了編譯工具,
也就是通過這個編譯工具,你可以將你的?WRK?編譯成一個?EXE?文件,
也就是內核可執行模塊,然后你可以利用這個?EXE?文件來取代操作系統本身的內核,
這樣的話,下次開機的時候操作系統所加載的內核就是您編譯的那個?EXE?了。
????????????????
?????????
工具軟件
Intel?? x86? CPU;
VMware? 6.5;
Windows? Server? 2003? SP1(用于測試 WRK 編譯結果);
Windows? 7(用來編譯 WRK);
WRK? 1.2 ;
?????????????
???????????????
概覽 WRK
首先我們來找到當前?Windows?操作系統下的內核模塊文件,
所謂的內核模塊文件呢,其實就可以看做是?Windows??的內核,
其由執行體和微內核組成,該文件名為?ntoskrnl.exe?,即一個二進制模塊,
該文件位于:C:\Windows\System32 ;
而我們的?WRK?編譯后所得的結果應該也是一個內核模塊文件,
也就是說我們編譯所得的結果應該就是這個?ntoskrnl.exe?,
當然編譯后的名稱是可以不同的,
默認編譯所得為?wrkx86.exe (這是 x86 環境下的默認編譯結果名稱),
下面來分析 WRK 中目錄結構:
首先來看?? WS03SP1HALS? 目錄:
WS03SP1HALS?代表的意思即?Windows? Server? 2003? SP1? HALS,
也就是在?Windows? Server? 2003? SP1??下的??HAL (硬件抽象層)。
在?Windows?操作系統中,HAL?其實是一個獨立的??DLL (在這里你就可以簡單的將 HAL 看做一個 DLL)?,
通過?HAL?可以實現隔離掉硬件的差異,也就是上層的模塊無需考慮下層真實硬件之間的差異性,
因為上層模塊不能夠直接訪問硬件,而是通過?HAL?來訪問硬件的,
所以對于硬件的差異性,在?HAL?中即可以解決掉,而不需要上層模塊來解決,
這樣做的好處是很顯然的,那就是我們的上層模塊都是一樣的,也就是當硬件改動時不需要變,
只要提供針對不同的硬件的?HAL?即可以實現在不同的硬件上運轉我們的上層模塊。
由于我們的?PC?上的硬件不一致,所以必須有多個?HAL?。
比如我的?PC??的處理器為??Intel?的,而你的?PC?的處理器為?AMD?的,
我的處理器為單核的,而你的處理器為四核的,
那么這就會造成硬件上的不一致,為了解決這種不一致呢,
Windows?在打包的時候會打包多個?HAL?進來,比如一個?HAL?針對單核,一個?HAL?針對多核,
Windows?在安裝的時候就會自動的識別出你的處理器是?AMD?還是?Intel?,是多核還是單核處理器,
然后?Windows?就會自動選擇一個合適的?HAL??給你安裝,同時,將?HAL?名字修改為?HAL.DLL,
而在?WS03SP1HALS?目錄下的也就是這些個?HAL?,
比如我的?PC?的處理器為?Intel? x86?系列的雙核處理器,
自然在安裝?Windows?的時候,就會自動選擇合適的?HAL?,比如?halmps.dll?作為?HAL?,
然后在安裝?Windows?的時候將這個?HAL?復制進我的?C?盤指定目錄下后,
就將這個?halmps.dll?改名為?hal.dll(為了統一所以改名),
這樣就可以得到我們下面看到的在?C:\Windows\System32\hal.dll?了。
再來看?? Public?? 目錄:
在這個目錄下包含的是一些頭文件,也就是?.h?文件,而且這些文件都是被各個組件所共享使用的,也就是公用的,
其中含有?ddk , internal?等等,其中?internal?表示為內部使用的,也就是內核自身需要使用到的頭文件。
再來看?? Tools?? 目錄:
前面提到,WRK?中不僅僅包含了微軟公開的關于?Windows?內核的部分源代碼,
還包括了用來編譯這部分源代碼的工具,而這些編譯工具自然就在這個?Tools?目錄下了。
在后面我們編譯這個?WRK?源代碼的時候就會用到這個?Tools?目錄下的工具了。
最后看?? Base?? 目錄,其中?Base 目錄下的 ntos 目錄為 Windows 內核模塊的主目錄:
下面就來逐一的介紹這些個目錄中的文件的含義:
| build | WRK?只公開了部分源代碼,那些未公開的則以二進制目標代碼的形式存在于這個目錄下。 |
| cache | 緩存管理器的實現的源文件。 |
| config | 注冊表的實現的源文件。 |
| dbgk | 調試子系統的內核模式部分的源文件。 |
| ex | 執行體層函數(內核堆 , 同步 , 定時器等)的源文件。 |
| fsrtl | 文件系統運行庫的源文件。 |
| fstub | 文件系統引導接口。 |
| io | I/O?管理器,不包括即插即用管理器和電源管理器部分。 |
| ke | (微)內核,包括線程調度器,CPU?管理以及底層的同步語義 |
| lpc | 本地過程調用?(LPC)?機制的實現。 |
| mm | 內存管理器。 |
| ob | 內核對象管理器。 |
| perf | 內核的性能日志記錄功能。 |
| ps | 進程和線程。 |
| se | 安全引用監視器。 |
| wmi | Windows?管理規范。 |
| inc | 僅適用于?NTOS?部分的包含文件。 |
| raw | RAW?文件系統驅動程序的實現的源文件。 |
| rtl | 內核運行時庫支持。 |
| init | 內核啟動部分的代碼。 |
| vdm | 虛擬?DOS?機。 |
| verifier | 驅動程序檢驗器。 |
?????????????
???????????????????????
編譯 WRK
首先是設置?WRK?根目錄下的?Tools?子目錄中的?x86?子目錄到??Path?環境變量中,
首先在控制臺下進入到?WRK?根目錄下的?Base?目錄下的?Ntos?目錄下,
然后輸入命令:nmake? –nologo? x86=? ;
(如果是 AMD 的 CPU 的話命令會有所不同,而且環境變量的設置也不同)
然后就開始編譯整個?WRK?了。
編譯完成:
此時就可以在目錄:WRK-v1.2\base\ntos\build?下面找到編譯好的?EXE?文件了。
至此編譯完成。
??????????
???????????????
加載 WRK 編譯所得的內核模塊
前面我們已經由?WRK?編譯得到了內核可執行模塊,
下面我們就要讓操作系統啟動的時候加載上編譯所得的這個內核可執行模塊。
我們使用的環境是在?VMware 6.5?中安裝好?Windows? Server? 2003? SP1 。
首先,我們將由?WRK?編譯所得的?wrkx86.exe?拷貝到虛擬機中,
并且將這個文件放置到目錄(也就是?ntoskrnl.exe?所在目錄):
然后再在其系統安裝目錄下(一般為?C:?盤)下面找到??boot.ini??文件(默認為隱藏)。
首先需要將這個文件的只讀屬性去掉,即將該文件改為可讀寫文件,
然后用記事本打開這個? boot.ini? 文件
修改前的 boot.ini 文件:
再在 boot.ini 中添加如下行:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, WRK" /kernel=wrkx86.exe /hal=hal.dll
修改后的 boot.ini 文件:
將上面的都設置好以后就重新啟動?Windows? Server? 2003? SP1 。
然后在啟動畫面中即可以看到如下畫面:
我們選擇?Windows? Server? 2003 , WRK??啟動?Windows??操作系統,
這樣加載內核可執行模塊的就是我們由?WRK?編譯所得的那個?wrkx86.exe?了。
?????????????
??????????????
總結
上面通過很多的截圖來詳細介紹了?WRK?的編譯以及加載由?WRK?編譯所得的內核模塊的過程,
對于?WRK?有什么作用呢?當然其是用來學習滴,也就是通過?WRK?的學習,
可以更加深入的了解到?Windows??的內核,等到那一天有實力了,
你大可以通過修改?WRK?源代碼,然后再編譯成內核模塊,
然后再讓操作系統加載你自個的內核模塊,當然,這個不是很容易就可以達到的境界的!!!
其實呢,對于?WRK?來說,還有一個調試環境的搭配,通過這個調試環境,
你可以在外面(指的是在虛擬機以外)通過?WinDbg?來調試這個內核,
但是由于這個在后面介紹驅動程序的時候我會再做說明,所以這里就不添亂了。
總結
以上是生活随笔為你收集整理的Windows 内核(WRK)简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Native Application 开
- 下一篇: Gh0st源码学习(一)前期准备工作