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

今天总结一下关于双机调试,前面一直使用的是DDK包进行NT式与WDM式驱动入门,至今已进入使用WDK包进行编程了,DDK包早已落后我只作为入门因为大体内容变化不大。我使用的书是《寒江独钓Windows内核安全编程》,这个系列将围绕三本书进行,一本就是刚刚所提到的,还有两本分别为《天数夜读从汇编语言到Windows内核编程》和《Windows内核安全与驱动开发》。

首先来总结一下双机调试,驱动程序无法像一般程序一样直接调试而必须经过一定配置才能进行源码级的调试,在这个过程中我遇到过许多的坑。

双机调试需要两台计算机。一台用于调试称为调试机,还有一台被调试称为被调试机器,一般被调试机器用虚拟机代替而调试机则为实体物理真机。

我物理真机是Win10系统,虚拟机安装的是XP Professional SP3,而书本上的环境是XP + Win 2000。一开始我还很担心能不能成功,我电脑上本来就配置好了VS2013+WDK8.1的驱动开发环境结果到官网上一看人家是这么讲的:

Windows 8.1

  • Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012,Windows 7, Windows Server 2008 R2 Microsoft Visual Studio 2013 (Desktop Express, Professional, Ultimate SKUs)

显然不支持WinXP,于是我就去把WDK7.1.0给下载并装在我的Win10 x64上,事实显示这是可以的,只要被调试机满足WDK7.1.0的操作系统范围就行。安装WDK包就不说了就是一直点下一步就行,接下去进入正题:

步骤: (我的平台: Win10 x86_64(WDK7.1.0) + XP SP3 Professional)

1. 安装一台XP SP3操作系统的虚拟机至VM上,并且在物理真机中安装WDK7.1.0,在物理真机中安装WinDbg X86(调试器)

2. 安装WDK后在物理真机 开始-------->所有程序-------->找到Windows DriverKits中的X86 Checked Build Environment,这个是以后要编译链接驱动程序用的(.sys为后缀)

寒江独钓Windows内核编程-双机调试1_第1张图片

3. 在虚拟机即XP中的C盘根目录下编辑boot.ini文件(该文件是隐藏的,需要显示出来则点击工具---->文件夹选项---->查看---->取消隐选择藏受保护的操作系统文件(推荐)选项就可以显示了):

寒江独钓Windows内核编程-双机调试1_第2张图片

boot.ini原本内容是:

[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="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

将其改成:

[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="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=com_1 /baudrate=115200,pipe

4. 修改完boot.ini内容后关闭虚拟机,并且编辑虚拟机设置

寒江独钓Windows内核编程-双机调试1_第3张图片

5. 接下去就是配置串行端口了

寒江独钓Windows内核编程-双机调试1_第4张图片

按照上面的样子进行配置后点击确定,完成这些步骤之后启动被调试机。就可以看到如下:

寒江独钓Windows内核编程-双机调试1_第5张图片

选择启动调试程序。注意在选择[启动调试程序后]项后立马在物理真机中打开WinDbg,其会显示:

寒江独钓Windows内核编程-双机调试1_第6张图片

6. int 3是断点的中断,就像我们在VS中按F9下断点是一个道理,此时虚拟机会处于停止状态(因为下了中断),在命令行中输入g后回车,虚拟机就会自动运行下去了。下面是输入g后的画面:

寒江独钓Windows内核编程-双机调试1_第7张图片

7. 等待虚拟机开机后在物理真机中编写一个驱动程序,编译链接生成.sys文件将其放入虚拟机中,并以服务方式加载该驱动(可以下载srvinstw.exe来加载,也可以使用SCM系列函数自己写一个加载卸载驱动服务的程序)。载入后进入cmd终端输入: net start [服务名]:

寒江独钓Windows内核编程-双机调试1_第8张图片

这里是我安装的两个驱动:

寒江独钓Windows内核编程-双机调试1_第9张图片

8. 接下去就可以进入调试了

寒江独钓Windows内核编程-双机调试1_第10张图片

9. 调试的规则与VS一模一样。

(完)

 

你可能感兴趣的:(Windows驱动编程,Windows驱动编程学习笔记)