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;
}
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的帮助文档里面的内核调试设置说明好了。
![](http://hiphotos.baidu.com/widebright/pic/item/6be0b4fdc44a2c1109244d0b.jpg)
![](http://hiphotos.baidu.com/widebright/pic/item/5b1fa9180d05280035fa4115.jpg)
.在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信息,调试起来方便直观很多的,不然什么结构啊都不会解析的出来的。
![](http://hiphotos.baidu.com/widebright/pic/item/d01dcdfca5247685b901a013.jpg)
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里面的配置相对应,然后确定就可以看到已经开始监控端口了, 这时就可以在客户机系统中启动系统。
![](http://hiphotos.baidu.com/widebright/pic/item/190daeaf1fe85fcb7cd92a1c.jpg)
如果上面的过程没出什么错的话,就会看到WinDbg的显示调试信息了,系统启动的时候WinDbg可能显示等待不可用状态,这时其实也随时可以自己中断系统的启动了。因为我的驱动是系统启动之后在自己加载的,所以进入直接系统之后,自己手工启动驱动,只要断点设置好了,就可以正确的断到了。
先到此为止,我水平有限,下次学会了什么再说了。
革命尚未成功,同志们还需努力!
![](http://hiphotos.baidu.com/widebright/pic/item/55332a38cb061523b8998f1e.jpg)
- vs2005与wdk 驱动开发环境配置 和 使用 WINDbg 和 Microsoft Virtual PC
- vs2005与wdk 驱动开发环境配置
- Virtual PC环境中调试WDK配置
- Windows 7 配置驱动开发环境(使用WDK)
- Windows7配置驱动开发环境(使用WDK)
- VS2008 PRO 、WDK 和DDKWizard搭建Vista驱动开发环境
- VS2008 PRO 、WDK 和DDKWizard搭建Vista驱动开发环境
- VS2008 PRO 、WDK 和DDKWizard搭建驱动开发环境
- VS2008 PRO 、WDK 和DDKWizard搭建驱动开发环境
- VS2008 PRO 、WDK 和DDKWizard搭建XP驱动开发环境
- VS2008 PRO 、WDK 和DDKWizard搭建XP驱动开发环境
- VS2008 PRO 、WDK 和DDKWizard搭建Vista驱动开发环境
- VS2008 、WDK 和DDKWizard搭建Win7驱动开发环境
- VS2008 、WDK 和DDKWizard搭建Win7驱动开发环境
- VS2008 PRO 、WDK 和DDKWizard搭建驱动开发环境
- VS2010 WDK 7.0配置驱动开发环境
- vs2008+wdk配置驱动开发环境
- VS+WDK配置驱动开发环境
- redhat版本说明
- 网络测量常见算法之一:直接位图法
- 101017 ~ 101023
- 反汇编学习日记-2010.11.13
- dotnetcharting数据更新的问题
- vs2005与wdk 驱动开发环境配置 和 使用 WINDbg 和 Microsoft Virtual PC
- IBM技术文档
- Java性能优化:基本类型 vs 引用类型
- 栈的应用(hdu1022)
- 在Centos上安装git
- 内存泄漏
- linux共有多少个版本(redhat,redflag,suse,ubuntu),各有什么特点和缺点?
- NANDFLASH调试
- 类声明是分配内存吗