【我的】vs2013+WDK8.1+winDbg+vmwarewin7虚拟机联调

作者:zcr214 时间:2016/4/8

内核驱动开发,首先要配置开发环境,目前微软已经出到了vs2015+WDK10,按照国内的这个形势,官方机构或大型企业应该是积极参与“去IOE”战略的,加上现在政府机关禁止使用win8以上的windows系统,所以目前来看主流的仍然是win7,并且中国国内还会有相当长的一段时间主导系统会是win7。于是内核驱动开发也重点放在win7吧。

原料选择:visual studio 2013。

WDK8.1。 不选WDK7的原因是8.1更方便,不选WDK10的原因是10比较新不知道兼容或者一些库是否有改变。在官网下载即可https://msdn.microsoft.com/zh-cn/windows/hardware/hh852365.aspx

WinDbg。在visual studio2013中已经集成了,不用单独安装。

Windows symbol files。Windows调试符号程序包,在调试中会用到,在官网下载https://msdn.microsoft.com/zh-cn/windows/hardware/gg463028,选择window7对应版本即可。

虚拟机平台:vmware11 workstation。

虚拟机系统:win7专业版 32bit。

其他可选工具:SRVINSTW,用于安装写好的.sys文件

Dbgview,用于查看系统输出信息,当然可以看内核输出信息。

实体主机:win7 旗舰版 64bit

步骤详解:

一、安装需要的原料

1.       下载,安装visualstudio 2013 ,使用镜像文件安装即可。关于主题默认白色可以手动换为深色,编辑器字体是sourcecode pro semibold,配色等可以去http://studiostyl.es/下载,我这里用的是Son of Obsidian

2.       去微软官网下载WDK8.1,安装只能在c盘(强迫症不能忍啊!)

3.       下载windows符号程序包,安装后配置一下环境变量:分别是_NT_NT_SYMBOL_PATH和_NT_ALT_SYMBOL_PATH,两个都写符号程序包的安装目录即可。

4.       安装虚拟机平台vmware11,其他版本也行

5.       装虚拟机系统,win7专业版32bit,其他版本其实也无所谓,最好32bit。

6.       网上搜索SRVINSTW和Dbgview软件,放到虚拟机系统里备用。

二、visual studio2013配置

1、当WDK8.1安装好以后,在vs2013中选文件→新建→项目,会看到有windows Driver这个类别了,新建一个空的驱动项目Empty WDM Driver,命名为MyDriver。

首先会有两个工程,一个就是驱动工程,另外一个是package工程(这个是测试驱动安装的一个工程,对于我们来说其实用处不大,这里只是做调试的测试,所以可以直接删除)。驱动工程中还会帮你建立一个inf文件,NT式驱动是使用不到的(当然新一代的过滤驱动,例如 minifilter 是使用的,VS2013支持直接创建minifilter工程),这里只是调试的测试使用,所以可以删除掉。我们直接添加一个Driver.c(因为微软内核使用的也是C,而且C是能够直接操作内存,所以开发用C语言比较合适)添加一些简单的代码,如下:

#include<ntddk.h>

voidDriverUnload(PDRIVER_OBJECTpDriveObject)

{

UNREFERENCED_PARAMETER(pDriveObject);

DbgPrint("hello ,Enter Driveload \n");

}

NTSTATUSDriverEntry(PDRIVER_OBJECTpDriverObject,PUNICODE_STRINGpRegPath)

{

NTSTATUSstatus=STATUS_SUCCESS;

UNREFERENCED_PARAMETER(pRegPath);

DbgPrint("hello world!Enter DriverEntry \n");

pDriverObject->DriverUnload=DriverUnload;

returnstatus;

}

2、接下来生成一下,如果有报错,可能是一些警告之类的,尽量修复这些错误,也可以将安全告警等级降低一下。选中项目,右键→属性→C/C++常规→警告等级,设置为等级3;链接器→将链接器警告视为错误→否。

然后重新生成一下,应该就成功了。

3、调试必须在另一台机器上,可以是远程主机也可以是虚拟机,这里当然是虚拟机,所以需要设置一下目标机器。选择DRIVER→Test→ConfigureComputer

添加一个新的计算机,填写名称,选择手动设置即Manually configure

选择连接类型为serial串口的方式,波特率默认115200不变,勾选pipe,reconnect,设置pipe名称,完成。

调试器选择win7 debug 和win32

三、虚拟机串行端口配置

给虚拟机配置一个串行端口,如果默认的有打印机占用了串行端口,可以先删除掉打印机,再添加。选择使用命名的管道,名称与vs2013中配置的一致,该端是服务器,另一端是应用程序。

四、虚拟机Win7 系统配置

在 vista 及后续的 windows 已经取消了 ntldr 模块管理引导,转而以bootmgr 模块管理引导系统。在我的 windows 7中要设定在哪个部分进行调试。windws 7 可调试部分有 4 个:bootmgr 模块、winload 模块、WinResume 模块以及 windows 内核模块 Nt 模块,可以在上述的 4 个模块下断点进行调式:

1、设置bootmgr模块。以管理员身份运行“命令提示符”,输入以下命令:

bcdedit /set {bootmgr} bootdebug on

bcdedit /set {bootmgr} debugtype serial

bcdedit /set {bootmgr} debugport 1

bcdedit /set {bootmgr} baudrate 115200

注意一个细节,bcdedit /set {bootmgr}debugport 1这一行最后的1 对应Serial Port 1,

所以如果是Serial Port 2 则设置为bcdedit /set {bootmgr} debugport 2 否则连不上。

2、设置winload模块。winload 的 GUID 为 current,所以输入命令:

bcdedit /set {current} bootdebug on

bcdedit /set {current} debugtype serial

bcdedit /set {current} debugport 1

bcdedit /set {current} baudrate 115200

然后输入bcdedit /enum命令可以查看到刚刚的设置情况

3、设置NT模块。Win+R运行,输入msconfig,设置引导→高级选项→调试,设置好调试端口com1和波特率115200默认不变。

重启win7虚拟机,以上设置就生效了。

五、Windbg内核调试

1、安装驱动。之前编译生成好的项目中,找到.sys文件,我这里的路径如图。

将其拷贝到win7虚拟机里。

2、驱动文件.sys并不能直接双击安装,所以打开SRVINSTW软件,点安装服务,命名。

输入路径时,只能手动输入,如果按浏览只能找到.exe的文件,不能识别.sys,所以手敲吧。

一路按向导安装完成即可,注意在选择启动类型要选手动,这样方便后面调试可以手动启动和关闭。

3、测试一下,驱动是否正常可用,打开Dbgview,在capture里全部勾选上。

然后打开命令提示符,输入net start my ,这里my是刚才安装驱动时取的名称,结束则输入net stop my。就可以看到内核中的输出信息了。

4、驱动没问题,现在在vs2013中点F5运行,选择之前设置的计算机,调试器就跑起来了,可以看到WinDbg中正在等待连接,接着在源代码上打一些断点,。

重新启动虚拟机系统,就连接上了。

此时win7时黑屏状态,它正等待 serial port 的响应,在vs2013中,全部中断,于是win7虚拟机就被断下来了,可以看到int 3。

再在WinDbg窗口中输入g,继续运行。

正常开机以后,在win7虚拟机中,启动驱动:net start my,如果以上配置无误,则win7系统会立刻被断下来。

5、单步调试,F10或F11,可以看到编辑器中代码跟踪,WinDbg输出信息,寄存器信息,运行正常。

至此,vs2013+WDK8.1+winDbg+vmware win7虚拟机联调配置成功。

【windows内核编程】vs2013+WDK8.1+winDbg+vmware win7虚拟机联调相关推荐

  1. 寒江独钓Windows内核编程-双机调试1

    今天总结一下关于双机调试,前面一直使用的是DDK包进行NT式与WDM式驱动入门,至今已进入使用WDK包进行编程了,DDK包早已落后我只作为入门因为大体内容变化不大.我使用的书是<寒江独钓Wind ...

  2. 2、从汇编语言到Windows内核编程笔记(2)

    内核线程 在驱动中生成的线程一般是系统线程.系统线程所在的进程名为"System". NTSTATUS PsCreateSystemThread( OUT PHANDLE Thre ...

  3. Windows内核编程实现拦截Xuetr程序

    Windows内核编程实现拦截Xuetr程序 ----TTL 寒假的时候,开始学习windows内核编程,想走近windows的内部世界.由于微软对于windows并不开源,所以有些人开始质疑:学习w ...

  4. Windows 内核之双机调试与windbg命令大全

    在今后会有相当的实验环节,对于windows内核实验,调试环境是必不可少的,本章讲解双机调试的环境搭建与常见的WINDBG指令. 准备材料: VMware workstation : [https:/ ...

  5. Windows内核编程生成.sys文件需要签名才能加载

    作者最近因为在做内核驱动的作业,在本机WIndows10+WDK10上简单实现了一个驱动,满心欢喜放在Win7虚拟机里运行结果各种一直有提示需要签名,作者查了许多资料,包括开机F8取消强制签名,进入调 ...

  6. 从Windows到Bios的桥梁:Windbg跟踪Win7开启ACPI

    点击上方蓝色"终端研发部",选择"设为星标" 学最好的别人,做最好的我们 本文为看雪论坛优秀文章 看雪论坛作者ID:hyjxiaobia 由于windows设备 ...

  7. Windows 10 (64位)下 VMware 15虚拟机下载及安装教程(内附安装包)

    一.VMware 15 虚拟机安装包下载 1.官方下载 PS:如果你不想注册或者嫌下载速度慢,请直接看下面2中的百度云链接. 首先,我们访问官网地址 跟着图片操作.鼠标移到红色数字1,点击红色数字2. ...

  8. vmware win7虚拟机运行异常卡顿问题解决

    最近不知道怎么回事,vmware中win7虚拟机运行非常卡,资源管理器刷新和打开文件夹都有明显的延迟,更不用说打开文件了,实在无法忍受.但奇怪的是,其他虚拟机没有问题. 使用了百度的各种方法都无效,比 ...

  9. 【开箱即用】VMware Win7虚拟机下载

    前言 在桌面软件开发中,特别是Qt开发过程中,通常需要测试目标软件在不同版本的Windows上是否能够正常运行,以提高软件的系统兼容性. 虽然微软在2020年正式停止对Windows 7系统的支持,并 ...

最新文章

  1. 根际微生物组提高植物耐盐性的研究进展(Biotechnology Advances IF=10)
  2. Lexus OpenCart 自适应主题模板 ABC-0017
  3. 解决loaded more than 1 DLL from .libs和No metadata found in lib\site-packages两个错误
  4. 关于程序组织和组织技巧的学习
  5. 「旁门右道」CURL持久连接技巧
  6. 《剑指offer》-连续子数组的最大和
  7. CMMI模型对软件测试技术的扩充
  8. UVa 10986 - Sending email
  9. 智能机器人机器人心得_你是机器人吗
  10. 信号与系统中的信号带宽理解
  11. JavaJUC基础知识梳理
  12. 从零开始搭建聊天机器人网页—Vue
  13. es中索引对象包含数组子节点时, 查询和聚合的统计需要注意的问题。
  14. 光致变色染料的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  15. docker制作tomcat镜像并部署war包
  16. 万能数据库查询分析器使用技巧之(十三)
  17. 趣节点:互联网信息大爆炸时代,企业品牌口碑营销需要注意什么?
  18. 构筑全云端数字生态,看游戏工业如何持续进化
  19. 计算机局域网组建与互建,实验4 局域网组建与网络互连认识实验指导
  20. python实现自动打电话-python 实现手机自动拨打电话的方法(通话压力测试)

热门文章

  1. 申请国外专利有哪些好处?
  2. 微信小程序 实现css样式搭建(如三角形、正方形、圆形等)
  3. 超简单的Jmeter连接mysql数据库,3分钟搞定!
  4. Chrom console js调试
  5. 计算机的上帝模式,电脑中的上帝模式,你用过吗?
  6. linux修改时间_技术干货||基于Centos8的Linux简单入门学习笔记
  7. java中的感叹号是_[Java教程]javascript中的2个感叹号的用法
  8. 树梅派学习 8. 轻触按键试验
  9. 劲舞团服务器中断解决方法,劲舞团一直连接中断什么连锁反应
  10. java lang ill_解决spring的java.lang.IllegalArgumentException异常。