鱼C论坛

 找回密码
 立即注册
查看: 9895|回复: 4

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

[复制链接]
发表于 2016-10-22 11:39:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 无符号整形 于 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(串口))。
那么,没有怎么办?没事,我们可以使用虚拟机作为被调试机,但是前面说了,需要连起来,也没事,可以使用管道虚拟出一个串口。

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

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

  2. VOID DriverUnload(PDRIVER_OBJECT driver)
  3. {
  4.         UNREFERENCED_PARAMETER(driver);
  5. }

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

  10.         __asm int 3

  11.         driver->DriverUnload = DriverUnload;

  12.         return STATUS_SUCCESS;
  13. }
复制代码


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

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

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


配置方法(第一次

1.右键单击你的虚拟机,选择“设置”
2016-10-22 (14).png

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

3.硬件类型选择串行端口,然后点下一步
2016-10-22 (16).png

4.选择“输出到命名管道”
2016-10-22 (18).png

5.然后设置成下图所示,点击完成:
2016-10-22 (19).png

6.然后就成功了,记一下,新建的串口是串行端口几,等会搭建调试环境时要用到。
2016-10-22 (20).png
比如我是串行端口2,就要记住,是2。
然后点击确定

7.开启虚拟机。
2016-10-22 (21).png

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

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

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

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

11.还记得第六步记下来的号码吗?这时候要派上用场了。
如果第六步记下来的串口号是1,就选择COM1
如果第六步记下来的串口号是2,就选择COM2,
依次类推……
72.JPG
然后保存并且关闭,重启,记得不要选择调试模式。

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

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


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

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

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

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

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

19.然后WinDbg就会出现连上的信息。
76.JPG
只要WinDbg断下来了,只需要输入“g”即可继续

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

21.打开你的驱动工程的目录/Debug,把.pdb文件拷贝到第20步设的路径里面
77.JPG
2016-10-22 (28).png

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

23.WinDbg会提示你有int3断点,输入g即可继续虚拟机里面的Windows的执行。
78.JPG
这个时候你可以修改变量的值等操作

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

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


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

评分

参与人数 2荣誉 +13 鱼币 +13 贡献 +8 收起 理由
dh6633 + 5 + 5 + 3 谢谢,学习了
拈花小仙 + 8 + 8 + 5 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-23 00:59:27 | 显示全部楼层
赞一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-20 22:34:58 | 显示全部楼层
很详细
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-20 23:01:40 | 显示全部楼层
连接到被调试机,暂停了被调试机,打开了这个内核符号表并设置好, QQ截图20170820225210.png 但是多次选择图片左下角的Reload 重装,都是提示 Loading unloaded module list
......Unable to enumerate user-mode unloaded modules, Win32 error 0n30
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-22 10:06:04 | 显示全部楼层
你这样配置巨麻烦
内核调试,32位是可以本机的
64位,拷贝一份出来,然后把当前设置成调试即可,不超过三句CMD命令
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 00:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表