命令行编译 WRK ,windbg 调试
一、准备工作
本文记录如何用命令行编译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 调试相关推荐
- Java 命令行编译项目
如果是用Exlipse, 第三方的包可以放在eclipse文件夹的jre包的lib文件夹中! (初学者的一些总结-高手们勿喷哈-) 原因: 以前一直用Eclispe编程环境运行Java.非常舒服,就像 ...
- ARM 编译工具keil 和 IAR 命令行编译和下载
关注.星标公众号,不错过精彩内容 来源:网络 编辑整理:strongerHuang 可能很多人都不习惯使用,Keil.IAR自带的编辑器,可能代码补全.错误提示.高亮等编辑功能相对来说支持的不是很好, ...
- VC6命令行编译配置
对于大多数在windows上写windows C/C++应用程序的人可能用的都是微软提供的VC++6.0或Visual Studio集成开发环境,但是对想为了更好地理解程序编译链接过程和习惯如linu ...
- 【C/C++】VS的cl命令 | 配置环境变量 | 使用命令行编译C/C++程序
文章目录 一.前言 二.准备 三.配置环境变量 1. 逐步配置 2. 一步到位 四.语法 更多文章 一.前言 作为一个C++ (C语言) 程序员,VS可谓是编写代码的神器(天下第一IDE!).但是它的 ...
- 蚂蚁区块链第12课 如何使用命令行编译工具solcjs编译Solidity智能合约?
1,摘要 蚂蚁区块链合约平台支持 Solidity 智能合约,针对合约源代码的编译,可以直接通过蚂蚁区块链 Cloud IDE 合约开发环境进行合约编译.部署.测试和调试. 本文介绍由蚂蚁区块链平台提 ...
- 命令行编译运行CSharp文件
命令行编译运行CSharp文件 找到csc.exe所在的路径.如我本机上为"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" 在环境变量 ...
- Windows使用MSVC,命令行编译,链接64位dll,Python调用
文章目录 代码 编译 链接 Python调用 前一篇博客: Windows下使用Visual Studio自带的MSVC,命令行编译C/C++程序 代码 mylib.h代码如下: #ifndef MY ...
- java打包dex_Android 命令行编译、打包生成apk文件
一.搭建搭建环境 1. 安装JDK 和 Android SDK 2. 配置环境变量 D:\android-sdk-windows\tools C:\Program Files\Java\jdk1.6. ...
- python 基础命令-Python unittest第一篇:基础入门+命令行编译
unittest单元测试框架最初受JUnit启发,与其他语言的主要单元测试框架具有相似的风格. 它支持测试自动化,支持开启或关闭某个测试,支持结合测试.另外它可以生成各个单元测试的报告.为了实现以上功 ...
最新文章
- Docker(四):Docker 三剑客之 Docker Compose
- VS2005--设置Release模式下调试
- String.Format和StringBuilder的效率
- python实战项目前后端分离flask_Flask Vue 构建前后端分离的应用
- 搞了个30天学习量化的数据资料,可以bt做全球。数据链接白送
- 怎么快速搜索服务器里的文件,使用 Everything,快速搜索电脑文件,制作局域网资料搜索器 | 科技搜...
- [ACM_NYOJ_15]括号匹配(二)
- Windows软件路由器运用实例之OSPF配置
- android4.4内存,Android 4.4只需512MB内存?别高兴太早
- 客户端安装SP3补丁包失败
- 电路串联和并联图解_串联电路和并联电路
- 生成9mb、10mb、20mb、30mb的星云图片,常用于图片测试
- android 备份取证,【Android】微信降版本备份详解
- 批处理创建桌面快捷方式
- 举头望明月打计算机术语,与月亮有关的谜语
- web——216中安全色
- Word使用技巧-分页符-分节符
- mysql数据库算法_MySql联接算法
- mac安装texstudio+mactex(texlive)2022+中文字体
- 循环-菲波那切数列II
热门文章
- 数据中心太废电?为省电费阿里和微软是这么做的....
- 数据机房建设常用材料有哪些?
- BlockChain:区块链技术基础概念综合理解——个人总结
- 成功解决IndexError: index 0 is out of bounds for axis 1 with size 0
- AutoLisp:AutoLisp实现对AutoCAD进行输入命令,选择对象,实现不同方向进行缩放
- 填充路径时使用的非零环绕规则
- 浅析Java.lang.ProcessBuilder类
- [leetcode] Container With Most Water
- c++ smart pointer 趣谈
- JQuery选择器一般方法