f
frendguo.

如何通过 WRK 来调试/学习 Windows

这篇文章提供了使用Windows研究内核(WRK)来调试和学习Windows NT内核的指南。内容包括获取WRK、使用构建脚本或Visual Studio编译代码、配置Windows Server 2003环境,以及设置Windbg进行内核调试。该指南旨在简化设置开发和调试环境的过程,以便研究Windows内部结构。

目录
背景获取 WRK编译代码方式一方式二配置 Win2k3通过 Windbg 来调试

背景#

目前我们学习 Windows 内核细节,主要可以参考 ReactOS 和 WRK(Windows Research Kernel)。

前者是一个兼容 WinNT 内核的开源系统;后者 WRK 则是微软基于 Win2K3 开源出来的内核。

ReactOS 的源码调试可以参考文档。而 WRK 的源代码调试信息有点乱,这里统一整理下。

获取 WRK#

这里整理了一个仓库,包含了代码、VMware 虚拟机和 WRK 随附的 NT 设计文档:

这里,你可以直接拉取仓库,找到 images/vmware 打开,就是一个可选 WRK 的 Windows 2003 系统了,然后通过 Windbg 连接上,即可调试(可直接跳过中间配置环节)

当然,你也可以自己下载 win2k3 然后跟着文档一同来配置。

编译代码#

方式一#

WRK 中本身提供了 build.bat 的脚本,直接运行 src/Build.bat 即可完成编译

生成物在:src/base/ntos/BUILD/EXE

主要是 wrkx86.exe ,也就是 Windows 内核。约等于 ntoskrnl.exe

方式二#

我们通常会在 VS 中修改代码,所以这里介绍下如何在 VS 中编译代码。

本文以最新的 VS2022 为例。

打开 src/WRK.sln ,配置一下架构:

插图

然后直接编译即可。

生成物在:src/base/ntos/BUILD/EXE

配置 Win2k3#

基于全新安装的 Win2k3 来进行配置(如果使用的是仓库中带的镜像,则无需配置此步骤)。

  1. 将生成的 wrkx86.exe 拷贝到 Win2k3 的 C:/WINDOWS/SYSTEM32 目录
  2. 拷贝 src/WS03SP1HALS/x86/halmacpi/halmacpi.dllC:/WINDOWS/SYSTEM32 目录
  3. 修改 C:/boot.ini 文件,在文件末追加以下内容(增加一个启动项,启用 wrkx86.exe 作为内核,并开启 COM 调试模式):
text
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="WRK Mode" /noexecute=optout /fastdetect /kernel=wrkx86.exe /hal=halmacpi.dll /debugport=com /baudrate=115200
  1. 将系统关闭。进入到虚拟机配置页面。增加一个串口。
插图
  1. 配置串口,使用 named pipe,并命名为【\\.\pipe\com_1
插图
  1. 然后再开机,选择【WRK Mode】,即可进入 WRK 内核驱动的系统了。
插图

通过 Windbg 来调试#

通过 Windbg → File → Attach Kernel,根据上述配置的值来填写即可。

插图

开启虚拟机,选择 WRK 之后,即可连接上:

插图

然后通过添加我们的 pdb 和源代码,接口进行调试了。

插图

注意:如果是重新编译了 wrkx86.exe,则需要切换到 Windows Server 2003 下更新 wrkx86.exe,才能匹配上 pdb

── END ──
↑ Back to topSubscribe
← NEWER
Windows 应用暂停技术
OLDER →
记一次无法关闭的弹窗

还没有评论。下面留下第一条吧。

+ 留个评论
提交后由管理员审核 · 通常 24h 内显示
Jul 25Windows 权限相关概念解析4m →Mar 25Windows是如何区分互联网下载文件和本地文件的6m →Feb 25如何低成本的获取到应用卡顿情况3m →