vs2005与wdk 驱动开发环境配置 和 使用 WINDbg 和 Microsoft Virtual PC

来源:互联网 发布:淘宝怎么合并订单付款 编辑:程序博客网 时间:2024/06/11 12:34

vs2005与wdk 驱动开发环境配置

1、首先在VS2005中建立一个C++ DLL的空项目

2、打开配置管理器,新建配置一个配置如myprofile,把myprofile设为活动的。注意不要使用Debug或Realse,否则后面会出现奇怪错误。

3.打开项目配置,点击c/C++页,在附加包含目录中,添加

    D:/WinDDK/7600.16385.0/inc/crt
    D:/WinDDK/7600.16385.0/inc/api
    D:/WinDDK/7600.16385.0/inc/ddk


4、”调试信息格式“   选择  C7兼容(/Z7) 用Z7模式产生调试信息
5、取消显示启动版权标志   选择    是(/nologo)  (默认)
6、警告等级  选择    3 级(/W3)
7、将警告视为错误    选择   是(/WX)
8、在优化选项卡中,禁用/Od

9、预处理中 添加 WIN32=100;_X86_=1;DBG=1  宏
10、在高级中,调用约定使用标准的 __stdcall (/Gz)
11、进入链接器中
12、修改输出文件的扩展名为 sys

13、不启用增量链接
14、在附加依赖项中,添加Wdm.lib,

并不继承父级或项目默认设置  “ntoskrnl.lib ntstrsafe.lib hal.lib BufferOverflowK.lib wdm.lib $(NOINHERIT)”
15、不生成清单
16、生成调试信息
17 、进入系统中
18、选择本机子系统
19、选择wdm驱动程序

20、进入高级
21、设置入口点DriverEntry
22、目标计算机    MachineX86 (/MACHINE:X86)
23、随机基址 为默认值
24、数据执行保护DEP为默认值
25、在常规中设置,附加目录 添加

D:/WinDDK/6001.18002/lib/crt/i386;
D:/WinDDK/6001.18002/lib/wxp/i386
下面是测试的代码


#include <ntddk.h>
  
// 提供一个Unload函数只是为了
VOID DriverUnload(PDRIVER_OBJECT driver)
{
  // 但是实际上我们什么都不做,只打印一句话:
  DbgPrint("first: Our driver is unloading…/r/n");
}

// DriverEntry,入口函数。相当于main。
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
#if DBG
//       _asm int 3
#endif
  // 这是我们的内核模块的入口,可以在这里写入我们想写的东西。
  // 我在这里打印一句话。因为”Hello,world” 常常被高手耻笑,所以
  // 我们打印一点别的。
  DbgPrint("first: Hello, my wdk dirver!");
 
  // 设置一个卸载函数便于这个函数能退出。
  driver->DriverUnload = DriverUnload;
  return STATUS_SUCCESS;
}
使用 WINDbg 和 Microsoft Virtual PC  调试Windows XP内核学习
在windbg.bat 批处理文件中加入下列的代码
windbg.exe -y F:/WDKProject/First/checked;srv*G:/symbols*http://msdl.microsoft.com/download/symbols -k com:pipe,port=//./pipe/com_1 -Q
在客户机中配置调试启动模式,
1.
在客户机中配置调试启动模式,
在 “文件夹选项”中取消 隐藏受保护的系统文件 和 选择显示所有的隐藏文件选项,就可以在C盘根目录下看到
boot.ini这个文件了,复制文件最后一行,粘帖,并加上调试选项:
multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Microsoft Windows XP Professional Debug"     /fastdetect /debug /debugport=COM1 /baudrate=57600

上面设置表示调试端口采用COM1,波特率为57600.。什么不明白看看WinDbg的帮助文档里面的内核调试设置说明好了。

 

2
.在Virtual PC 2007中设置客户机的COM1端口名字,采用命名管道 //./pipe/com_1 

3.
启动客户机系统,出现选择菜单时,选择调试模式,然后停在那里,等待windbg中开始监视COM1端口后,再按Enter键进入系统。

 

4.
1)启动WinDbg ,File->Symbols Path设置调试符号路径,设置为Symbols 文件夹路径,我前面说了,我从微软主页下载了一个winXp的Symbols了,就装在C:/Symbols,有800多M。这里就是填的这个了。有了Symbols信息,调试起来方便直观很多的,不然什么结构啊都不会解析的出来的。

2)添加自己的驱动的symbols路径。我是要调试我自己驱动的,使用WinDDK编译驱动后,会生成一个objfre_wxp_x86/i386文件夹,在下面就有个 *.pdb 就是符号文件了,所以也要把objfre_wxp_x86/i386这个文件夹路径添加到symbols路径里面去。不同的symbols路径使用逗号分开就行了。这个路径设置很重要的,windbg正确的找到symbols文件才能 进行源代码级的调试,不然全部是乱七八糟的汇编估计没几个人看得懂。

3)打开你自己的内核源代码文件 *.c     。
       只要WinDbg能够找的到你你既驱动的symbols文件 ,在中断状态下就可以在你的源代码里面设置断点了。当驱动加载,Windbg找到代码就会中断在相应的地方。我是在DriverEntry函数开始的地方设置个断点,然后就可一步一步的执行查看了,在local 视图里面还可以看到各种结构的信息,和调试用户程序一样方便了。

4) File-> Kernel Debug     ,     在弹出来的窗口里面设置监控COM的端口 名字, 选上 name pipe ,和在Virtual PC 2007里面的配置相对应,然后确定就可以看到已经开始监控端口了, 这时就可以在客户机系统中启动系统。


如果上面的过程没出什么错的话,就会看到WinDbg的显示调试信息了,系统启动的时候WinDbg可能显示等待不可用状态,这时其实也随时可以自己中断系统的启动了。因为我的驱动是系统启动之后在自己加载的,所以进入直接系统之后,自己手工启动驱动,只要断点设置好了,就可以正确的断到了。

 

先到此为止,我水平有限,下次学会了什么再说了。
革命尚未成功,同志们还需努力!

 

 

 

原创粉丝点击