編譯和閱讀WRK原始碼

2021-06-10 21:33:00 字數 2327 閱讀 2371

一、什麼是wrk

wrk的全稱是「windows research kernel」,它是微軟為高校作業系統課程提供的可修改和跟蹤的作業系統教學平台。它給出了windows這個成功的商業作業系統的核心大部分**,可以對其進行修改、編譯,並且可以用這個核心啟動windows作業系統。可讓學生將作業系統基本原理和商業作業系統核心聯絡起來,進一步加深對作業系統整體的理解。

根據說明wrk 1.2可以在兩種環境下執行:

x86(windows server 2003 service pack 1)

amd64(windows xp x64 professional)

三、windows 2003 sp1安裝

四、編譯wrk

1.設定環境變數

將wrk整個拖入虛擬機器內,將msvcp71.dll,msvcr71.dl放至wrk-v1.2\tools\x86路徑下。

執行cmd,進行如下操作,設定環境變數

path \wrk-v1.2\tools\x86;%path%    //

這是是相對路徑,具體需要根據絕對路徑設定

cd \wrk-v1.2\base\ntos

操作成功會將wrk的tools目錄新增至path,這樣就可以進行編譯了。

2.編譯wrk

使用如下命令進行編譯,cmd視窗內會有相關提示,在wrk\base\ntos\build\exe目錄下,也回生成相關檔案。

nmake -nologo x86=

3.hal

至此wrk已經編譯成功,但是要對系統核心進行替換還需要hal(hardware abstraction layer,硬體抽象層)的支援。

在x86 平台上,wrk核心需要多處理器版本的硬體抽象層hal.dll的支援。在windows作業系統的發行介質上,提供了許多不同的硬體抽象層檔案,安裝作業系統時安裝程式根據機器硬體的配置選擇對應的hal安裝到機器中,並將其一律改名為hal.dll。

為了了解機器實際的hal的型別,可以在控制台視窗中執行下述命令,根據螢幕輸出的內容即可了解機器實際的hal 的型別。

link -dump -all \windows\system32\hal.dll | findstr pdb

至於不同的hal對應不同的硬體這個需要根據顯示的情況進行選擇,虛擬機器顯示的的為halmacpi.dll。

hal.dll 標準pc

halacpi.dll 高階配置和電源介面

halapic.dll 高階可程式設計中斷控制器

halaacpi.dll acpi pc

halmps.dll 多處理器pc

halmacpi.dll 多處理器acpi pc

halborg.dll silicon圖形工作站

halsp.dll compaq systempro

在如下目錄wrk\ws03sp1hals\x86\halmacpi即可尋找到相關的hal.dll和對應的pdb檔案。至此編譯過程也就結束了。

五、系統設定

將編譯好的wrkx86.exe和對應的halmacpi.dll拷貝至系統目錄system32下,之後在boot.ini檔案末尾新增如下兩行,分別使用wrk進行啟動,或者啟動除錯版wrk。

multi(0)disk(0)rdisk(0)partition(1)\windows="

wrk 1.2

" /kernel=wrkx86.exe /hal=halmacpi.dll

multi(

0)disk(0)rdisk(0)partition(1)\windows="

wrk 1.2

" /kernel=wrkx86.exe /hal=halmacpi.dll /debug /debugport=com1 /baudrate=115200

六、雙機除錯設定

略,參考《通過windbg利用vmware虛擬機器進行雙機除錯》

七、windbg設定

分別對wrk的符號檔案以及原始碼檔案根據具體路徑進行設定,這樣便能進行原始碼級的除錯了。

八、原始碼閱讀

1.source insight,用來閱讀**絕對很給力,某些方面的功能vs還不具備。

2.vs2008

剩下有空了就看看潘愛民老師的《windows核心原理與實現》,吐個槽,真希望每天能多點時間來學習啊...

安卓原始碼閱讀 原始碼編譯

mkdir bin path bin path curl bin repo chmod a x bin repowget tsinghua edu cn aosp monthly aosp latest.tar tar xf aosp latest.tar cd aosp 解壓得到的 aosp 工程...

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...

原始碼閱讀 Glide原始碼閱讀之with方法(一)

前言 本篇基於4.8.0版本 原始碼閱讀 glide原始碼閱讀之with方法 一 原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 大多數情況下,我們使用glide 就一句 但是這一句 裡面蘊含著成噸的 with方法有以下幾個過載方法 publi...