马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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(串口))。
那么,没有怎么办?没事,我们可以使用虚拟机作为被调试机,但是前面说了,需要连起来,也没事,可以使用管道虚拟出一个串口。
如果要双机调试,必须让被调试机以调试模式启动,被调试机可以是虚拟机
用前面的方法创建一个工程,工程名随你便,一定不要加载它,代码如下:#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环境配置完毕!可以开始学习驱动了! |