一、准备工作

本文记录如何用命令行编译WRK内核,下面列出需要准备的东西:

  • win2k3 sp1 虚拟机环境
  • WRK v1.2源码
  • 两个需要用到的dll:msvcr71.dll ,msvcp71.dll

我看其他博客有人用 win2k3 sp2 也成功了,但我还是按照书上的教程,装的sp1版本。

/s/1x-vmB0TRY27CZErIvZS8UA
提取码:u4j3

二、编译 WRK

进入 wrk 根目录,创建bat文件,用于编译x86版本,输入以下内容:

编译x86.bat

set path=e:\wrk-v1.2\tools\x86;%path%
cd base\ntos
nmake -nologo x86=

msvcr71.dll ,msvcp71.dll复制到 WRK-v1.2\tools\x86 目录下。

然后双击bat就能编译相应版本的wrk内核了,这个过程会持续一分钟左右。

编译x86成功后结果如图:

三、启动 WRK

教程上说的要使用多核版本,所以虚拟机设置成多核的:

假设您已经准备好 win2k3 sp1 虚拟机了,打开虚拟机,进入 system32,把刚刚编译生成的 wrkx86.exe 复制进去,然后回到 wrk 根目录,把 wrk-v1.2\ws03sp1hals\x86\halacpim\halacpim.dll 也复制到 system32里。

下面引用 《Windows内核原理与实现》附录A的一段话:

注意,实体机系统的HAL 有三种可能:如果是支持ACPI 的PIC(中断控制器)机 器,则使用halacpim.dll;如果是支持ACPI
的APIC(高级可编程中断控制器)机器,则 使用halmacpi.dll;如果是非PIC 和APIC 的机器,则使用halmps.dll
。WRK 的 WRK-v1.2\WS03SP1HALS\x86\目录下包含了这三个HAL 模块。

然后修改 c:\boot.ini ,加两行配置,分别是 WRK 调试模式和 WRK 非调试模式:

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise" /noexecute=optout /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="WRK Debug" /noexecute=optout /fastdetect /debug /debugport=com_debug /kernel=wrkx86.exe /hal=halacpim.dll
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="WRK Noebug" /noexecute=optout /fastdetect /kernel=wrkx86.exe /hal=halacpim.dll

最后,关闭 win2k3,修改虚拟机属性,添加一个 com_debug 端口用于双机调试:

四、调试 WRK

启动 windbg,参数如下:

"C:\Program Files (x86)\Debugging Tools for Windows (x86)\windbg.exe" -b -k com:pipe,port=\\.\pipe\com_debug,baud=115200,reconnect -y

启动虚拟机,选择第二项,WRK调试,但是先别点,先改一下符号文件:

先改符号文件,我们把 halacpim.pdb 和 wrkx86.pdb 这两个符号文件加到 windbg 里,勾选 reload,点OK就好了。

这时候就可以让虚拟机跑起来了:

这样就是成功了,g 让系统跑起来,然后下一个断点看看: bp NTQuerySystemInformation

断下来了,太好了!

五、windbg 常用命令

命令行编译 WRK ,windbg 调试相关推荐

  1. Java 命令行编译项目

    如果是用Exlipse, 第三方的包可以放在eclipse文件夹的jre包的lib文件夹中! (初学者的一些总结-高手们勿喷哈-) 原因: 以前一直用Eclispe编程环境运行Java.非常舒服,就像 ...

  2. ARM 编译工具keil 和 IAR 命令行编译和下载

    关注.星标公众号,不错过精彩内容 来源:网络 编辑整理:strongerHuang 可能很多人都不习惯使用,Keil.IAR自带的编辑器,可能代码补全.错误提示.高亮等编辑功能相对来说支持的不是很好, ...

  3. VC6命令行编译配置

    对于大多数在windows上写windows C/C++应用程序的人可能用的都是微软提供的VC++6.0或Visual Studio集成开发环境,但是对想为了更好地理解程序编译链接过程和习惯如linu ...

  4. 【C/C++】VS的cl命令 | 配置环境变量 | 使用命令行编译C/C++程序

    文章目录 一.前言 二.准备 三.配置环境变量 1. 逐步配置 2. 一步到位 四.语法 更多文章 一.前言 作为一个C++ (C语言) 程序员,VS可谓是编写代码的神器(天下第一IDE!).但是它的 ...

  5. 蚂蚁区块链第12课 如何使用命令行编译工具solcjs编译Solidity智能合约?

    1,摘要 蚂蚁区块链合约平台支持 Solidity 智能合约,针对合约源代码的编译,可以直接通过蚂蚁区块链 Cloud IDE 合约开发环境进行合约编译.部署.测试和调试. 本文介绍由蚂蚁区块链平台提 ...

  6. 命令行编译运行CSharp文件

    命令行编译运行CSharp文件 找到csc.exe所在的路径.如我本机上为"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" 在环境变量 ...

  7. Windows使用MSVC,命令行编译,链接64位dll,Python调用

    文章目录 代码 编译 链接 Python调用 前一篇博客: Windows下使用Visual Studio自带的MSVC,命令行编译C/C++程序 代码 mylib.h代码如下: #ifndef MY ...

  8. java打包dex_Android 命令行编译、打包生成apk文件

    一.搭建搭建环境 1. 安装JDK 和 Android SDK 2. 配置环境变量 D:\android-sdk-windows\tools C:\Program Files\Java\jdk1.6. ...

  9. python 基础命令-Python unittest第一篇:基础入门+命令行编译

    unittest单元测试框架最初受JUnit启发,与其他语言的主要单元测试框架具有相似的风格. 它支持测试自动化,支持开启或关闭某个测试,支持结合测试.另外它可以生成各个单元测试的报告.为了实现以上功 ...

最新文章

  1. Docker(四):Docker 三剑客之 Docker Compose
  2. VS2005--设置Release模式下调试
  3. String.Format和StringBuilder的效率
  4. python实战项目前后端分离flask_Flask Vue 构建前后端分离的应用
  5. 搞了个30天学习量化的数据资料,可以bt做全球。数据链接白送
  6. 怎么快速搜索服务器里的文件,使用 Everything,快速搜索电脑文件,制作局域网资料搜索器 | 科技搜...
  7. [ACM_NYOJ_15]括号匹配(二)
  8. Windows软件路由器运用实例之OSPF配置
  9. android4.4内存,Android 4.4只需512MB内存?别高兴太早
  10. 客户端安装SP3补丁包失败
  11. 电路串联和并联图解_串联电路和并联电路
  12. 生成9mb、10mb、20mb、30mb的星云图片,常用于图片测试
  13. android 备份取证,【Android】微信降版本备份详解
  14. 批处理创建桌面快捷方式
  15. 举头望明月打计算机术语,与月亮有关的谜语
  16. web——216中安全色
  17. Word使用技巧-分页符-分节符
  18. mysql数据库算法_MySql联接算法
  19. mac安装texstudio+mactex(texlive)2022+中文字体
  20. 循环-菲波那切数列II

热门文章

  1. 数据中心太废电?为省电费阿里和微软是这么做的....
  2. 数据机房建设常用材料有哪些?
  3. BlockChain:区块链技术基础概念综合理解——个人总结
  4. 成功解决IndexError: index 0 is out of bounds for axis 1 with size 0
  5. AutoLisp:AutoLisp实现对AutoCAD进行输入命令,选择对象,实现不同方向进行缩放
  6. 填充路径时使用的非零环绕规则
  7. 浅析Java.lang.ProcessBuilder类
  8. [leetcode] Container With Most Water
  9. c++ smart pointer 趣谈
  10. JQuery选择器一般方法