无符号整形 发表于 2016-10-22 11:39:44

WDK10.0.14393.0配置方法(仅供参考,欢迎探讨并且指出错误[3](使用WinDbg调试驱动)

本帖最后由 无符号整形 于 2016-10-23 11:29 编辑

还不会使用InstDrv加载驱动?点我!

*可以跳过,非必需,如果调试文件过滤驱动等危险,有蓝屏风险的驱动,请不要使用物理机调试

说起调试器,大家第一个想到肯定就是OllyDbg,但是很可惜,它只能调试Ring3程序,不能调试运行在Ring0上的驱动程序。
第二个想到的肯定就是WinDbg,真的,WinDbg特别牛逼,既可以调试Ring0程序,也可以调试Ring3程序,是硬件开发人员的首选。
如果要调试一个运行在Ring0下的驱动程序,要进入Kernel Debug模式。
但是WinDbg的Kernel Debug模式不能单机调试(一台电脑上调试一个程序),Kernel Debug只能双机调试(一台电脑和另外一台电脑
连起来,调试发起者叫调试机,被调试者叫被调试机,调试机具有被调试机的完全控制权利。)
有条件的鱼油可以把两台电脑接起来,使用WinDbg调试另外一台电脑(接起来的方法有多种,比如有NET(网络连接),USB(USB连接),1394(1394口),COM(串口))。
那么,没有怎么办?没事,我们可以使用虚拟机作为被调试机,但是前面说了,需要连起来,也没事,可以使用管道虚拟出一个串口。

如果要双机调试,必须让被调试机以调试模式启动,被调试机可以是虚拟机

用前面的方法创建一个工程,工程名随你便,一定不要加载它,代码如下:
#include <ntddk.h>

VOID DriverUnload(PDRIVER_OBJECT driver)
{
        UNREFERENCED_PARAMETER(driver);
}

NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
        UNREFERENCED_PARAMETER(driver);//不使用的参数用宏掩盖
        UNREFERENCED_PARAMETER(reg_path);

        __asm int 3

        driver->DriverUnload = DriverUnload;

        return STATUS_SUCCESS;
}

有个int3的汇编指令,不要在物理机里面执行它,因为有可能引发蓝屏或者死机,所以请在虚拟机里执行。因为虚拟机变成了
被调试机,所以即使死机蓝屏了,我们也可以控制它继续执行。

下面是第一次配置虚拟机(被调试机)的方法

安装VMWare,(已经安装了的请忽略)下载一个Windows 7及以上的版本的操作系统的ISO(如果在VMWare里面已经装了Windows 7及以上的版本的操作系统可以掠过,直接进入配置方法)
最后,把那个操作系统装入VMWare

配置方法(第一次)

1.右键单击你的虚拟机,选择“设置”


2.点击“添加”(请原谅一下,因为实验已经有了一个串口了请无视)


3.硬件类型选择串行端口,然后点下一步


4.选择“输出到命名管道”


5.然后设置成下图所示,点击完成:


6.然后就成功了,记一下,新建的串口是串行端口几,等会搭建调试环境时要用到。

比如我是串行端口2,就要记住,是2。
然后点击确定

7.开启虚拟机。


8.在虚拟机里面以管理员身份打开CMD,依次输入以下命令。(注:第一条命令的字符串部分可以乱改)

bcdedit /copy {current} /d "Windows 7"
bcdedit /debug ON
bcdedit /bootdebug ON


9.在虚拟机里面按下Win+R,输入MSConfig


10.选择"引导",然后选择第一个操作系统,最后选择“高级选项”


11.还记得第六步记下来的号码吗?这时候要派上用场了。
如果第六步记下来的串口号是1,就选择COM1
如果第六步记下来的串口号是2,就选择COM2,
依次类推……

然后保存并且关闭,重启,记得不要选择调试模式。

12.重新启动之后,转到物理机,新建一个目录(哪个盘都行,我的是D:\DRIVERS),把编译出来的驱动和InstDrv(加载器 ,请到上一篇下载)拷进去,等会要弄共享目录

13.点击你的虚拟机,选择”设置“


14.选择“选项”->“共享文件夹”
(1).设为“总是启用”
(2).勾上“在Windows 客户机中映射为网络驱动器”
(3).点击“添加”,把你的刚才的文件夹加进去
注:共享路径和共享名可以自己制定。

然后确定再确定,保存退出。

15.在虚拟机里面打开那个那个虚拟的网络驱动器,把上面的东西全部拷到别的地方(比如桌面)。


16.重启,进入调试模式。进入调试模式之后会黑屏,这是操作系统在等待WinDbg的命令。

17.按下Win键打开物理机的开始菜单,找到Windows Kits,点一下,找到WinDbg x86(WinDbg ARM),双击它以启动它


18.在WinDbg中选择File->Kernel Debug..
选择com,勾上pipe,Port处输入"\\.\pipe\com_1",然后点击确定。


19.然后WinDbg就会出现连上的信息。

只要WinDbg断下来了,只需要输入“g”即可继续

20.选择File->Symbol File Path
输入“srv*C:\Symbols*http://msdl.microsoft.com/download/symbols”
注:路径可以改成你想要的。

21.打开你的驱动工程的目录/Debug,把.pdb文件拷贝到第20步设的路径里面



22.在虚拟机里面以管理员身份打开InstDrv,加载那个驱动(点击安装,再点击加载)因为有int3断点,虚拟机会卡死。

23.WinDbg会提示你有int3断点,输入g即可继续虚拟机里面的Windows的执行。

这个时候你可以修改变量的值等操作

到23步首次配置就基本完成了。

非第一次使用WinDbg调试驱动方法:
1.把驱动拷贝到第14步指定的文件夹。
2.打开工程目录/Debug 或者 工程目录/Release,复制里面的PDB文件到第20步的路径。
3.以调试方式启动Windows,再使用17~20步的方法打开WinDbg的Kernel Debug模式。
4.打开虚拟机里面14步虚拟出来的网络驱动器,把要调试的驱动考到其他地方,再用InstDrv加载他
5.然后调试正式开始。


成功了的话,恭喜你,WDK环境配置完毕!可以开始学习驱动了!

Qyears 发表于 2016-10-23 00:59:27

{:10_256:}{:10_256:}{:10_256:}赞一个

dh6633 发表于 2017-8-20 22:34:58

{:5_108:}很详细

dh6633 发表于 2017-8-20 23:01:40

连接到被调试机,暂停了被调试机,打开了这个内核符号表并设置好,但是多次选择图片左下角的Reload 重装,都是提示 Loading unloaded module list
......Unable to enumerate user-mode unloaded modules, Win32 error 0n30

YOUBADBAD 发表于 2017-8-22 10:06:04

你这样配置巨麻烦
内核调试,32位是可以本机的
64位,拷贝一份出来,然后把当前设置成调试即可,不超过三句CMD命令
页: [1]
查看完整版本: WDK10.0.14393.0配置方法(仅供参考,欢迎探讨并且指出错误[3](使用WinDbg调试驱动)