编译和阅读WRK源码

一、什么是WRK

WRK的全称是“Windows Research Kernel”,它是微软为高校操作系统课程提供的可修改和跟踪的操作系统教学平台。它给出了Windows这个成功的商业操作系统的内核大部分代码,可以对其进行修改、编译,并且可以用这个内核启动Windows操作系统。可让学生将操作系统基本原理和商业操作系统内核联系起来,进一步加深对操作系统整体的理解。

二、系统及WRK下载

根据说明WRK 1.2可以在两种环境下运行:

X86(Windows Server 2003 Service Pack 1)

AMD64(Windows XP x64 Professional)

但是根据实际测试,XP SP3也是可以加载的,只是这里使用Windows Server 2003 Service Pack 1更不容易出问题,下载地址:URL

至于微软的WRK,也已经在网上流传甚广了,VeryCd的下载地址:URL

三、Windows 2003 SP1安装

四、编译WRK

1.设置环境变量

将WRK整个拖入虚拟机内,将MSVCP71.DLL,msvcr71.dl放至wrk-v1.2 oolsx86路径下。

运行CMD,进行如下操作,设置环境变量

path wrk-v1.2	oolsx86;%path%    //这是是相对路径,具体需要根据绝对路径设置  cd wrk-v1.2ase
tos             

操作成功会将wrk的tools目录添加至PATH,这样就可以进行编译了。

2.编译WRK

使用如下命令进行编译,CMD窗口内会有相关提示,在WRKase tosuildexe目录下,也回生成相关文件。

nmake -nologo x86=

3.HAL

至此WRK已经编译成功,但是要对系统内核进行替换还需要HAL(Hardware Abstraction Layer,硬件抽象层)的支持。

在X86 平台上,WRK内核需要多处理器版本的硬件抽象层hal.dll的支持。在Windows操作系统的发行介质上,提供了许多不同的硬件抽象层文件,安装操作系统时安装程序根据机器硬件的配置选择对应的HAL安装到机器中,并将其一律改名为hal.dll。

为了了解机器实际的HAL的类型,可以在控制台窗口中执行下述命令,根据屏幕输出的内容即可了解机器实际的HAL 的类型。

link -dump -all WINDOWSsystem32hal.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

在如下目录WRKws03sp1halsx86halmacpi即可寻找到相关的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

其实VS系列都可以用来阅读的,建立工程,之后导入整个WRK,设置x86的编译选项,使用nmake进行编译就好。需要整个工程文件的朋友可以留言。

关闭不必要的窗口,配合VA,查看相关结构,宏定义都是很方便的,至此阅读源码也搞定啦。

剩下有空了就看看潘爱民老师的《Windows内核原理与实现》,吐个槽,真希望每天能多点时间来学习啊...

原文地址:https://www.cnblogs.com/lxykl/p/10095168.html