WRK 源碼編譯使用

引子html

WRK 是微軟於 2006 年針對教育和學術界開放的 Windows 內核的部分源碼,緩存

WRK(Windows Research Kernel)也就是 Windows 研究內核,安全

在 WRK 中不只僅只提供了 Windows 內核模塊的部分代碼,其還提供了編譯工具,函數

也就是經過這個編譯工具,你能夠將你的 WRK 編譯成一個 EXE 文件,工具

也就是內核可執行模塊,而後你能夠利用這個 EXE 文件來取代操做系統自己的內核,性能

這樣的話,下次開機的時候操做系統所加載的內核就是您編譯的那個 EXE 了。學習

                

         

工具軟件測試

Intel   x86  CPU;動畫

VMware  6.5;ui

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 複製進個人 盤指定目錄下後,

就將這個 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 文件:

image

再在 boot.ini 中添加以下行:

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, WRK" /kernel=wrkx86.exe /hal=hal.dll

修改後的 boot.ini 文件:

image

將上面的都設置好之後就從新啓動 Windows  Server  2003  SP1 。

而後在啓動畫面中便可以看到以下畫面:

捕獲

咱們選擇 Windows  Server  2003 , WRK  啓動 Windows  操做系統,

這樣加載內核可執行模塊的就是咱們由 WRK 編譯所得的那個 wrkx86.exe 了。

             

              

總結

上面經過不少的截圖來詳細介紹了 WRK 的編譯以及加載由 WRK 編譯所得的內核模塊的過程,

對於 WRK 有什麼做用呢?固然其是用來學習滴,也就是經過 WRK 的學習,

能夠更加深刻的瞭解到 Windows  的內核,等到那一天有實力了,

你大能夠經過修改 WRK 源代碼,而後再編譯成內核模塊,

而後再讓操做系統加載你自個的內核模塊,固然,這個不是很容易就能夠達到的境界的!!!

其實呢,對於 WRK 來講,還有一個調試環境的搭配,經過這個調試環境,

你能夠在外面(指的是在虛擬機之外)經過 WinDbg 來調試這個內核,

可是因爲這個在後面介紹驅動程序的時候我會再作說明,因此這裏就不添亂了。

                   

http://www.cnblogs.com/BoyXiao/archive/2011/01/08/1930904.html

相關文章
相關標籤/搜索