Windows 内核驱动调试环境搭建及调试步骤

合集下载

windows驱动开发和调试环境搭建

windows驱动开发和调试环境搭建

Windows驱动开发和环境搭建【文章标题】: Windows驱动开发和调试的环境设置【文章作者】: haikerenwu【使用工具】: VC6.0,VMware6.0.3,Windbg【电脑配置】: 惠普笔记本xp sp3(一)VMWare安装篇VMWare的安装一路Next即可,关于其序列号,百度一下就能找到,虚拟机安装完成之后,需要安装操作系统,我在虚拟机中安装的是windows xp sp2系统。

点击“文件”----“新建”----“虚拟机”进入新建虚拟机的向导,配置虚拟系统参数选择虚拟系统文件的兼容格式(新手推荐选择默认选项)按照默认设置继续点击下一步,选择好您需要的操作系统,此处我选择的是Windows XP Prefessional。

设置虚拟机名称和虚拟操作系统安装路径,我单独空出来一个F 盘,将虚拟机和虚拟操作系统全部装在该盘。

配置网络模式(推荐选择NA T,一般主机不用做任何的设置虚拟机就可以利用主机上网)。

配置虚拟磁盘的容量。

在这里可以直接单击完成,来完成基本操作设置,磁盘默认空间是8GB,用户可以根据自己的实际使用情况来调整大小,也可以自定义分区。

操作完成之后,在“VM”菜单下有个“setting。

”菜单,点击此菜单,在CD-ROM中选择合适的选项,我使用的是Use ISO image 选项,将我的xp sp2操作系统的ISO映像路径设置好,安装操作系统。

点击ok之后,启动虚拟机,即开始安装操作系统,安装过程跟普通装机过程相同。

安装完成之后,启动操作系统,然后在VM菜单下点击“Install VMWare Tools”,把虚拟操作系统的驱动装好。

(二)VMWare设置篇虚拟操作系统安装完成之后,就是设置该系统为Windbg双机调试做准备。

关闭虚拟操作系统,添加一个虚拟串口,因为我的电脑是笔记本,现在的笔记本很少配置串口,所以要虚拟一个串口,这个过程由VMWare完成,图解如下。

WinDBG+VMware双机内核调试环境搭建

WinDBG+VMware双机内核调试环境搭建

WinDBG+VMware双机内核调试环境搭建因为接下来要写个文件过滤驱动,要有个内核调试环境,昨天天搭了一下,比较简单,网上已有详细步骤。

vmware中装个winxp,暂且称为SlaveOS吧。

相应的我们主系统成为MasterOS。

我的步骤如下:1.先在MasterOS上装WinDbg。

在桌面建一个快捷方式,修改程序启动参数。

具体操作为右键WinDBG快捷方式-》属性。

现在的目标内容为(假设):"E:\Program Files\Debugging Tools for Windows (x86)\windbg.exe",在它后边加上-b -k com:pipe,port=\\.\pipe\com_1,resets=0,注意,红字部分加在引号外面。

确定。

2.MasterOS设置结束,接下设置vmware虚拟机。

设置虚拟机需要在SlaveOS关闭的情况下进行。

打开虚拟设置,增加一个“Serial Port",如图1:图13.下一步选择”Output to named piped".如图2:图24.虚拟机配置完毕,接下来启动SlaveOS进行配置。

打开虚拟机c:\boot.ini。

在文件末尾加上:multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional Debug" /fastdetect /debugport=com_1 /baudrate=115200保存后重启。

启动菜单会新增一个debug的菜单。

如图3:图35.在上述界面按下上下箭头键。

回到MasterOS,通过快捷方式打开WinDBG,此时WinDBG会出现如下提示:Microsoft (R) Windows Debugger V ersion 6.11.0001.404 X86Copyright (c) Microsoft Corporation. All rights reserved.Opened \\.\pipe\com_1Waiting to reconnect...回到虚拟机,按下回车,windgb会显示连接信息。

windbg 调试驱动教程

windbg 调试驱动教程

使用WinDbg和虚拟机调试Windows驱动程序教程(转)驱动调试攻略(WinDbg)驱动调试是一个系统级调试方式,所以调试工具用WinDbg是最佳选择。

驱动调试一般情况下,需要两台电脑进行。

一台作为主机进行驱动调试,另一台作为目标机进行驱动安装。

当然如果没有多余的电脑,我们可以安装VMware模拟系统调试(虚拟机)。

只是对电脑的配置要求比较高。

本文介绍使用WinDbg及VMware进行调试的具体设置及方法。

这些资料在网络很难找到,笔者也是吸取了他人很多宝贵意见才完成的,供大家学习讨论。

其实用SoftIce可以单机调试驱动,但是有个问题就是在SoftIce启动前驱动可能已经启动了。

VMware Support 中说,自4.0.18.0 版本之后的WinDbg 都支持了通过pipe 来进行调试,不过微软对此并没有任何说明。

所以,在VMware中虚拟被调试的系统,然后通过VMware 虚拟一个com端口。

使用这个虚拟的端口,就可以用WinDbg 进行调试了。

具体步骤如下:1. 安装和设置WinDbg,VMware首先,请到微软官方网站/whdc/devtools/debugging/default.mspx,下载最新版本的WinDbg工具,建议使用6.0以上版本的WinDbg做为调试工具。

VMware也可以在网站上找到,当然使用高版本比较好。

安装过程比较简单,就不在此多做介绍。

唯一要注意的是,安装完虚拟机后,请在VMware主菜单“VM”中选择“Install VM Tools…”,完成系统驱动文件的安装。

安装完这两个软件后,请在VMware中安装跟你的电脑版本相同的操作系统。

例如:你的电脑安装的是WindowsXP Professional,那么最好在Vmware中安装相同版本。

至少是相同的系统,Windows XPßà Windows XP、Windows 2000ßà Windows 2000。

WINDOWS 7 配置驱动开发环境(wdk7.60)

WINDOWS 7 配置驱动开发环境(wdk7.60)

WINDOWS 7 配置驱动开发环境(wdk7.60)1. 安装VS2010,WDK7.60(GRMWDK_EN_7600_1)2. 新建VC 控制台项目(选择为空项目)3. 新建项目配置“driver” ,点击下拉按钮-点击(配置管理器)输入名称(Driver Debug)点击确定就可以了,其他的不要动哦!完成后的效果!点击确定按钮之后呈现出来的画面鼠标右击工程选择属性,会弹出以下窗口!4. 设置VC++路径<我把wdk安装在E盘下>a. 配置可执行文件目录:E:\WinDDK\7600.16385.1\bin\x86;b. 配置包含目录:E:\WinDDK\7600.16385.1\inc\ddkE:\WinDDK\7600.16385.1\inc\E:\WinDDK\7600.16385.1\inc\apic. 配置库目录: E:\WinDDK\7600.16385.1\lib\win7\i3865新建C/C++文件不然无C/C++设置选项<刚开始我们创建了一个空的项目所以项目里没有c++文件,现在要做的就是在空的项目-源文件-添加一个新建项c++文件>常规目标文件扩展名:.sys //必选6. 设置C/C++选项常规选项卡1 调试信息格式(C7 兼容(/Z7) //可选2 警告等级(2 级(/W2) //可选3 将警告视为错误(是(/wx) //可选优化选项卡优化(禁用/Od) //可选预处理器预处理器定义:WIN32=100;_X86_=1;WINVER=0x501;DBG=1 //必选如果是Release,那么可想而知,不需要DBG=1代码生成启用最小重新生成:否//可选基本运行时检查:默认值//可选运行时库:多线程调试(/MTd) 或多线程(/MT) //建议选<本人选择的是多线程调试(/MTd)>缓冲区安全检查:否//可选(可避免出现LINK : error LNK2001: 无法解析外部符号__security_cookie)高级调用约定__stdcall(/Gz) //必选7. 链接器设置常规启用增量链接:否(/INCREMENTAL:NO) //建议选上忽略导入库:是// 可选( 设置为此值时,必须在附加库目录中加:E:\WinDDK\7600.16385.1\lib\win7\i3865 这样项目就不会依赖IDE 环境的设置)如果否( 设置为此值时,将依赖IDE 的环境的相关设置)输入附加依赖项ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB //必选//NT式驱动ntoskrnl.lib WDM式驱动wdm.lib( HalXXX 函数在Hal.lib,WmiXXX 函数在wmilib.lib ,NdisXXX函数在ndis.lib ) ( 必要时需要增加微软的标准库MSVCRT.LIB MSVCRTD.LIB(调试库) LIBCMT.LIBIBCMTD.LIB(调试库) )( 如果源码中有source 文件,那么该文件的TARGETLIBS 字段会列出该项目需要的库)忽略所有默认库:是(/NODEFAULTLIB) //必选清单文件:启用用户账户控制(UAC)否//必选不然会出现>LINK : fatal error LNK1295: “/MANIFESTUAC”与“/DRIVER”规范不兼容;链接时不使用“/MANIFESTUAC”调试:生成调试信息是(/DEBUG) //可选生成映像文件:是(/MAP) //可选映像文件名:$(TargetDir)$(TargetName).map //可选系统(System)子系统: 控制台(/SUBSYSTEM:CONSOLE) //必选堆栈保留大小:4194304 //可选堆栈提交大小:4096 //可选驱动程序: 驱动程序(/DRIVER) //必选高级:入口点:DriverEntry //必选随机基址:清空//把框里的数据删掉。

Windows驱动程序开发环境配置

Windows驱动程序开发环境配置

Windows驱动程序开发笔记一、WDK与DDK环境最新版的WDK 微软已经不提供下载了这里:https:/// 可以下并且这里有好多好东东!不要走进一个误区:下最新版的就好,虽然最新版是Windows Driver Kit (WDK) 7_0_0,支持windows7,vista 2003 xp等但是它的意思是指在windows7操作系统下安装能编写针对windows xp vista的驱动程序,但是不能在xp 2003环境下安装Windows Driver Kit (WDK) 7_0_0这个高版本,否则你在build的时候会有好多好多的问题.上文build指:首先安装好WDK/DDK,然后进入"开始"->"所有程序"->"Windows Driver Kits"->"WDK XXXX.XXXX.X" ->"Windows XP"->"x86 Checked Build Environment"在弹出来的命令行窗口中输入"Build",让它自动生成所需要的库如果你是要给xp下的开发环境还是老老实实的找针对xp的老版DDK吧,并且xp无WDK 版只有DDK版build自己的demo 有个常见问题: 'jvc' 不是内部或外部命令,也不是可运行的程序。

解决办法:去掉build路径中的空格。

二、下载 WDK 开发包的步骤1、访问Microsoft Connect Web site站点2、使用微软 Passport 账户登录站点3、登录进入之后,点击站点目录链接4、在左侧的类别列表中选择开发人员工具,在右侧打开的类别:开发人员工具目录中找到Windows Driver Kit (WDK) and Windows Driver Framework (WDF)并添加到您的控制面板中5、添加该项完毕后,选择您的控制面板,就可以看到新添加进来的项了。

WinDebug+虚拟机---调试驱动的配置

WinDebug+虚拟机---调试驱动的配置

WinDebug+虚拟机---调试驱动的配置WinDebug+虚拟机---调试驱动的配置现在一直在做有关Windows驱动开发的工作,驱动开发非常重要的一环是驱动的调试。

对于Windebug结合虚拟机的双机驱动调试,其配置还是小有点麻烦的。

虽然原先自己配置的时候,都成功了,而且也进行了很多的开发和调试。

但某一天再来设置这些东西的时候,却发现出了问题,甚至去网上找的一些资料也没有用。

现在把自己调试驱动时的切身体会写下来,一方面自己以后也可以看看,也给广大初入门的朋友做以参考。

一、调试环境的安装(1)安装虚拟机(VM)及Windows XP系统(2)安装WinDebug二、配置调试环境(1)在WinDebug的快捷方式上添加:-k com:port=\\.\pipe\com_1,baud=115200,pipe。

例如我的主机上Windebug快捷方式设置以后如下:"C:\Program Files\Debugging Toolsfor Windows (x86)\windbg.exe" -k com:port=\\.\pipe\com_1,baud=115200,pipe (2)在虚拟机中,添加一个串行端口点击"Edit virtual machine settings",添加一个Serial Port,选择"Output to named pipe",然后下一步第一框里保持默认的""第二框里选"This end is the server."第三框里选"The other end is an application."选中"Connect at power on"然后点击"Finish然后在新窗口中选中"Yield CPU on poll"。

Windows 内核驱动调试环境搭建及调试步骤

Windows 内核驱动调试环境搭建及调试步骤

Windows 内核驱动调试环境搭建及调试步骤本文,系09年笔记记录整理,当时只有大概的步骤,最近又搭建环境,顺道比较详细的整理一下,以供自己备查。

较之前的笔记,只是DDK和VMWARE的版本增高了,基本步骤还是大差不差。

注意:如果是初次搭建环境,请大概浏览完全篇后,再参照本文搭建环境。

一、工具描述主机:XP sp3虚拟机:vmware9.0 +XP sp3WinDBGDDK:6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso注:主机:hostOS虚拟机:guestOS代码系《windows驱动开发技术详解》二、具体步骤guestOS设置:添加串口:VM->settings->hardware->add选择 serial设置如下图所示:修改guestOS的boot.ini文件在文件最末行添加如下内容:multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional Debug" /fastdetect /debugport=com2 /baudrate=115200 debugport=com2,要根据你虚拟出来的串口号来设置。

本人电脑里设置的是COM2,如上图所示。

注意:1、boot.ini 文件在C:根目录下,修改booti.in文件时,需要设置文件夹选项,详见下图的标注。

2、波特率进入系统(虚拟机),修改串口的波特率为115200,默认建立的时,波特率是9600。

电脑右键->属性->硬件->属性管理,在弹出的框框里找到COM2修改即可。

虚拟机(guestOS)上的配置基本完成。

hostOS配置:安装DDK版本:6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso,在微软网站可以下载到。

kmdf 驱动开发实例

kmdf 驱动开发实例

kmdf 驱动开发实例驱动开发是通过编写内核模块来与操作系统进行交互的一种技术。

而在Windows操作系统中,驱动开发的一种常见框架是Kernel-Mode Driver Framework(KMDf)。

本篇文章将以KMDf驱动开发实例为主题,逐步解释该实例的步骤和过程。

第一步:准备环境和工具在进行KMDf驱动开发之前,首先需要准备好相应的环境和工具。

这包括一台运行Windows的计算机、安装好Windows Driver Kit(WDK)和Visual Studio等开发工具。

第二步:创建驱动项目打开Visual Studio,选择新建项目(New Project),在模板(Templates)中找到"Kernel Mode Driver (KMDF)",然后填写项目名称和所需的目标Windows版本等信息。

这样就创建了一个KMDf驱动项目。

第三步:配置驱动项目在创建驱动项目后,需要对其进行配置。

这包括设置编译选项、指定目标平台、选择所需的驱动框架版本等。

配置完成后,可以开始编写驱动代码。

第四步:编写驱动代码在KMDf驱动项目中,主要的代码文件是驱动的入口点(DriverEntry),该函数在驱动加载时被调用。

在该函数中,可以进行一些初始化操作,如注册驱动、创建设备对象、为设备对象添加I/O回调函数等。

接下来,可以根据实际需求,编写其他的驱动逻辑代码。

例如,可以添加设备控制代码、I/O处理代码、定时器代码等。

这些代码将在驱动运行时被调用,以实现相应的功能。

第五步:编译和生成驱动在编写完驱动代码后,可以进行编译和生成驱动。

在Visual Studio中,选择生成解决方案(Build Solution),这将会将源代码编译成二进制文件。

生成的驱动文件会放置在指定的输出目录中。

第六步:安装和加载驱动生成驱动文件后,需要将其安装到操作系统中并加载。

在Windows中,可以使用DevCon等命令行工具来完成这一步骤。

Windows调试工具入门-7(驱动程序的源码调试)

Windows调试工具入门-7(驱动程序的源码调试)

Current Irp 00000000 RefCount 0 Type 00000022 Flags 000000c0
Dacl e10361f4 DevExt 00000000 DevObjExt 821380e8
ExtensionFlags (0000000000)
Device queue is not busy.
我们的测试程序只处理了 IRP_MJ_READ 和 IRP_MJ_DEVICE_CONTROL 两个请求。来试着 调试一下。
接着上面中断下来的调试会话,首先用 bp SrcDbgKnlDrv!DispatchRead 命令和 bp SrcDbgKnlDrv!DispatchIoCtrl 命令在程序的两个 Dispatch 例程上下断。F5 运行起来。在目标 机打开 SrcDbgKnlApp 程序点击 Open,会打开一个 SrcDbgKnlDrv.sys 驱动设备的句柄。这时 中断目标机,使用!devhandles 扩展命令就能看到有用的信息了:
如果我们的设备有附加到某个设备栈上的话,可以用!devstack 扩展命令显示设备栈的 信息。
kd> !devstack 82138030
!DevObj !DrvObj
!DevExt ObjectName
> 82138030 \Driver\SrcDbgKnlDrv00000000 SrcDbgKnlDrv
kd> !devhandles 82138030
Checking handle table for process 0x823b97c0 Handle table at e1002000 with 241 Entries in use 省略掉一部分……
Checking handle table for process 0x82164da0 Handle table at e1137000 with 34 Entries in use PROCESS 82164da0 SessionId: 0 Cid: 05e4 Peb: 7ffd6000 ParentCid: 05d0

Win7内核调试

Win7内核调试

1. 使用 bochs+vmware+windbg 分析调试 windows 7 内核 用 google 可以搜出很多“如何使用 windbg 调试 windows 内核的”的教程。

基本都差不多 我根据搜出的教程,再总结一下将自己实验过程写出来。

★ 我的 vmware 版本是: 6.0.4 build-93057 ★ windbg 版本是:6.11.0001.402 AMD64 ★ bochs 版本是:2.4.2 ★ 目标 windows 7 版本是:windows 7 ultimate x64 中文版 ------------------------------------------------------------------------------------------------------使用 vmware + windbg 就可以调试 windows 内核了,但是我喜欢还开上 bochs ,使用 bochs 很方便灵活。

vmware 里的 guest OS 作为被调试对象,Host OS 里使用 windbg 作为调试者。

guest OS 和 Host OS 通过 serial port 以 named pipe 方式作为联线。

一、在我的 vmware 上装上了最新的 windows 7 x64 中文旗舰版 bochs 也装上了同样的 windows 7 x64 中文旗舰版。

1、vmware 的设置 打开相应 vmware 虚拟机上的 “Virtaul Machine Settings”---> “Hardware”选项中 ----> 点击 “Add” 添加一个串口设备 Seiall Port ----> “Next” ----> 在 Serial Port 里选中“Output to named pipe” ----> “next” ----> “Finish” 最后,回到 “Virtual Machine Settings”页面时,在“I/O Mode” 里选中“Yield CPU on poll” 这样 vmware 的设置就好了。

windebug使用方法

windebug使用方法

windebug使用方法WinDbg 使用方法WinDbg 是一款强大的 Windows 调试工具,被广泛应用于开发人员和调试专家之间。

它提供了一系列功能,帮助用户分析和调试 Windows 操作系统、驱动程序和应用程序中的问题。

以下是 WinDbg 的使用方法。

1. 下载和安装 WinDbg:您可以从微软官方网站下载最新版本的 WinDbg。

安装过程很简单,按照向导提示逐步进行即可。

2. 配置符号路径:符号文件包含了源代码的调试信息,是进行高级调试的关键。

在 WinDbg 中,您需要配置符号路径以便正确加载符号文件。

您可以通过 "File" 菜单下的 "Symbol File Path" 选项来配置符号路径。

3. 载入调试目标:在 WinDbg 中,可以通过多种方式来载入调试目标。

您可以通过 "File" 菜单下的 "Open Crash Dump" 选项来打开崩溃转储文件,或者通过"File" 菜单下的 "Attach to Process" 选项来附加到正在运行的进程。

4. 设置断点:断点是调试过程中非常有用的工具,可以帮助您在应用程序中指定的位置停止执行。

在 WinDbg 中,可以通过输入 "bp <地址>" 命令来设置断点。

例如,"bp 0x00400000" 命令将在指定地址处设置一个断点。

5. 运行调试:一旦设置了断点并准备好调试,您可以通过 "Debug" 菜单下的"Go" 命令来开始运行调试过程。

当应用程序执行到断点处时,调试过程会自动停止。

6. 分析调试信息:当调试过程中断时,您可以使用 WinDbg 提供的各种命令和功能来分析调试信息。

例如,您可以使用 "p" 命令来显示变量的值,使用 "k" 命令查看调用栈,使用 "lm" 命令列出模块信息等。

windbg 内核调试原理(一)

windbg 内核调试原理(一)

windbg 内核调试原理(一)windbg 内核调试什么是 windbg 内核调试?•windbg 是一款强大的调试工具,可以用来调试 Windows 操作系统及其应用程序。

•内核调试是 windbg 的一个功能,用于调试操作系统内核,可以帮助开发人员定位和解决系统崩溃、死锁、性能问题等。

内核调试原理1.内核调试利用 Windows 的调试接口和调试驱动程序实现。

2.它通过在目标系统中安装一个调试驱动程序,与 windbg 配合使用,来进行调试。

3.此外,还需要使用串行线缆或网络连接将目标系统和调试主机连接起来。

准备工作•在进行内核调试之前,需要安装 windbg 和调试符号文件。

•调试符号文件包含了操作系统的调试信息,是进行调试的必要文件。

配置目标系统1.在目标系统中配置调试选项:•打开“控制面板”,找到“系统和安全”。

•点击“系统”,然后选择“高级系统设置”。

•在“高级” 选项卡下,点击“设置” 按钮。

•在“启动和故障恢复” 对话框中,点击“设置”。

•将“调试信息” 设置为“完全内存转储”。

2.进行启动选项配置:•打开“命令提示符”,输入以下命令:bcdedit /debug onbcdedit /dbgsettings serial debugport:1 baudrate:115200•这样将启用调试,并配置串行端口为 COM1,波特率为 115200。

配置调试主机1.在调试主机上打开 windbg:•首先,确保已经安装了 windbg。

•然后,在开始菜单中找到 windbg,并打开它。

2.配置串口调试选项:•点击“文件” -> “选项” -> “调试选项”。

•在“调试选项” 对话框中,选择“串行” 选项卡。

•选择正确的串行端口和波特率(与目标系统配置一致)。

连接目标系统和调试主机•使用串行线缆或网络连接将目标系统和调试主机连接起来。

开始内核调试•在 windbg 中,点击“调试” -> “启动调试”。

使用WinDbg调试入门(内核模式)

使用WinDbg调试入门(内核模式)

使⽤WinDbg调试⼊门(内核模式)windbg是⼀个内核模式和⽤户模式调试器,包含在Windows调试⼯具中。

这⾥我们提供了⼀些实践练习,可以帮助您开始使⽤windbg作为内核模式调试器。

设置内核模式调试内核模式调试环境通常有两台计算机:主机和⽬标计算机。

调试器在主机上运⾏,正在调试的代码在⽬标计算机上运⾏。

主机和⽬标通过调试电缆连接。

Windows调试程序⽀持以下类型的电缆进⾏调试:EthernetUSB 2.0USB 3.01394Serial (also called null modem)如果⽬标计算机运⾏的是Windows8或更⾼版本,则可以使⽤任何类型的调试电缆,包括以太⽹。

此图说明通过以太⽹电缆连接调试的主机和⽬标计算机。

如果⽬标计算机运⾏的Windows版本早于Windows 8,则不能使⽤以太⽹进⾏调试;必须使⽤USB、1394或串⾏。

此图说明了通过USB、1394或串⾏调试电缆连接的主机和⽬标计算机。

建⽴内核模式调试会话在设置好主机和⽬标计算机并⽤调试电缆将它们连接起来之后,您可以按照⽤于设置的同⼀主题中的说明建⽴内核模式调试会话。

例如,如果您决定设置主机和⽬标计算机以通过以太⽹进⾏调试,参考《》。

同样,如果您决定设置主机和⽬标计算机以通过USB 2.0进⾏调试,您可以找到建⽴内核模式调试会话的说明,参考《》开始调试1、在主机上,打开windbg并与⽬标计算机建⽴内核模式调试会话。

2、在windbg中,从帮助菜单中选择内容。

这将打开调试器⽂档chm⽂件。

调试程序⽂档也可以在这⾥在线获得。

3、当建⽴内核模式调试会话时,windbg可能会⾃动进⼊⽬标计算机。

如果windbg尚未插⼊,请从“调试”菜单中选择“中断”。

4、在windbg窗⼝底部附近的命令⾏中,输⼊以下命令:符号搜索路径告诉windbg在哪⾥查找符号(pdb)⽂件。

调试器需要符号⽂件来获取有关代码模块(函数名、变量名等)的信息。

Windows调试工具入门4(WinDbg内核调试配置)

Windows调试工具入门4(WinDbg内核调试配置)

WinDbg内核调试配置内核调试主要用来调试驱动代码、分析内核结构等。

WinDbg通过两台电脑可以实现内核调试,其中一台电脑运行WinDbg,被称为主机;另外一台电脑运行被调试的程序或系统,被称为目标机。

一般情况下两台电脑都是真实机器,这样调试最符合实际情况,两台电脑通过串口线、1394线或USB对联线连接起来实现双机内核调试。

如果没有两台电脑,也可以用虚拟机来模拟目标机,主机上运行WinDbg,虚拟机中安装Windows运行被调试的程序,虚拟机通过模拟的串口输出为主机上的一个命名管道,从而和主机上的WinDbg连接起来实现双机内核调试。

除双机内核调试外,WindowsXP后还引入了一种本机内核调试方式,只需要一台电脑,直接运行WinDbg就能查看修改系统内核结构等,不过所有和中断目标机系统相关的命令都不能执行,如断点命令。

如果采用虚拟机模拟目标机,调试响应速度有时候是个问题,比1394线连接的真实双机调试速度要慢不少,特别是执行操作大量内存的命令时(如搜索内存命令),感觉非常明星。

所以针对这种情况还会介绍一个特殊的辅助调试工具vmkd,该工具可以大大加速内核调试的速度,为咱们带来不少方便。

下面分节详细介绍各种内核调试情景下的配置,尽量每个步骤都截图说明。

真实机双机内核调试真实机之间的内核调试首先需要准备连接线,可以用串口线、1394线或者USB对联线。

串口线速度太慢,而且电脑城一般买不到可以直接使用的串口线,需要把线和接头买回来自己焊,按照WinDbg 帮助中的说明交叉焊接,就能得到一根可用来调试的串口线。

用串口线把两台电脑连接上后,先用Windows自带的超级终端工具,选择好串口和波特率连接。

如果在超级终端中按键能在另外一台电脑的超级终端上显示按键,则表示串口线连接成功。

接下来就可以用WinDbg连接串口调试。

某些笔记本上可能没有串口,可以买一个USB转串口的接头,然后设置USB转换后的串口号,就能把这台笔记本当作主机使用。

图文并茂的超级详细的WIND0WS7加WDF驱动开发环境配置

图文并茂的超级详细的WIND0WS7加WDF驱动开发环境配置

的设 置)
如果否 ( 设置为此值时,将依赖 IDE 的环境的相关设置 )
输入 附加依赖项
ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIB CMT.LIB //必选
//NT 式驱动 ntoskrnl.lib WDM 式驱动 wdm.lib ( HalXXX 函数在 Hal.lib, WmiXXX 函数在 wmilib.lib , NdisXXX 函数 在 ndis.lib ) ( 必要时需要增加微软的标准库 MSVCRT.LIB MSVCRTD.LIB(调试库) LIBCMT.LIBIBCMTD.LIB(调试库) )
其他为建议可选项目
优化: 优化选项可以选择为 已禁用/Od
代码生成: 缓冲区安全检查 否
8. “链接器” 选项卡中
8.1 输入: 在“附加依赖项”中输 入 ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib; MSVCRT.LIB;LIBCMT.LIB
高级
调用约定 __stdcall(/Gz)
//必选
//建议选 <本人
7. 链接器设置
常规
启用增量链接:否(/INCREMENTAL:NO)
//建议 选上
忽略导入库:是
// 可选
( 设置为此值时,必须在附加库目录中加:
E:\WinDDK\7600.16385.1\lib\win7\i3865 这样项目就不会依赖 IDE 环境
这样就会导致另外一个问题,Microsoft Visual Studio 10.0\VC\include\sal.h 中 include 了 CodeAnalysis\sourceannotations.h,所以如果在编译环境中调用 build,会出现错误找不到 sourceannotations.h,所以要:

使用Virtual PC进行Windows内核调试的详细过程

使用Virtual PC进行Windows内核调试的详细过程

使用Virtual PC进行Windows内核调试的详细过程使用WinDbg进行Windows内核调试通常需要两台计算机,一台是Debuggee,一台作为Debugger,又成为Host。

使用Virtual PC可以在同一台电脑上进行内核调试,对于某些调试任务来说还是非常有用的。

下面以Virtual PC 2004为例,介绍一下利用Virtual PC进行Windows内核调试的详细过程。

1,下载并安装Virtual PC 2004,从略。

2,启动Virutal PC Console(控制台),创建一台新的虚拟PC,安装向导的提示配置硬盘、内存等参数。

3,在刚才创建的虚拟PC上安装操作系统,这个操作系统应该是你要调试的Windows版本。

比如你想调试你的驱动程序在Windows Server 2003上出现的问题,那么就安装Windows Server 2003。

我们以Windows 2000为例。

4,配置虚拟PC的串行口,在Virtual PC的控制台中选择Windows 2000,然后点击Settings 按钮弹出设置对话框,然后在左侧的列表中(如下图)选择COM1。

右侧选择Named Pipe选项,即使用命名管道来模拟串行口,然后输入管道的完整名称:file&://./pipe/com_1,com_1可以为其它名称,但是前面的部分应该保持不变。

5,启动虚拟PC中的Windows 2000,然后进入命令行窗口,执行如下命令以便在启动菜单中增加调试选项:c:cd\attrib -r -hedit boot.ini然后将其最末一行复制,并加入调试选项,成为为如下状态:6,在虚拟PC中选择重新启动Windows 2000,当出现启动菜单时,按方向键使其停止自动计时,等待在这里。

7,在主机(debugger)上准备启动WinDbg,考虑每次输入命令行参数太麻烦,所以建议建立一个如下内容的批处理文件,并将其放到与WinDbg.exe同位置的目录中。

Windows驱动开发,vs+vm+wdk安装及hello,world

Windows驱动开发,vs+vm+wdk安装及hello,world

Windows驱动开发,vs+vm+wdk安装及hello,world近期接⼿了⼀个关于Windows系统内核驱动的开发任务,⾸先需要的就是熟悉相关开发环境的配置与调试,这⾥采⽤了vs2013+vm2015+wdk8.1的组合,已经亲测完成(踩了⽆数的坑),在此做⼀下记录,下次需要配置环境的时候可以⽤作参考。

vm,wdk,vs等⼯具先下载安装好。

1.⾸先需要安装win7虚拟机,这⾥需要注意系统的镜像需要时虚拟机专⽤镜像,所以在此保存⼀个64位的win7镜像,可直接下载:ed2k://|file|cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso|3265574912|E9DB2607EA3B3540F3FE2E388F8C53C4|/选择配置好虚拟机之后需要⾸先点击设置删除占⽤com1串⼝的打印机,然后添串⾏端⼝将管道命名为\\.\pipe\com_1(如图所⽰)。

2.虚拟机开机后以管理员权限运⾏cmd,输⼊如下命令开启相应串⼝并关闭64位驱动强制签名(64位驱动要求必须有数字签名才可运⾏,但是可以在测试中关闭)bcdedit /debug onbcdedit /dbgsettings serial debugport:n baudrate:115200bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS3.将主机中已安装的wdk⽬录中找到驱动⽬标程序将其复制进虚拟机中安装3.运⾏vs,创建新的空wdm项⽬新建first.c源程序输⼊helloworld代码#include <ntifs.h> //<ntddk.h>VOID DriverUnload(PDRIVER_OBJECT objDriver){// 避免编译器关于未引⽤参数的警告UNREFERENCED_PARAMETER(objDriver);// 什么也不做,只打印⼀⾏字符串DbgPrint("My Dirver is unloading...");}NTSTATUS DriverEntry(PDRIVER_OBJECT objDriver, PUNICODE_STRING strRegPath){// 避免编译器关于未引⽤参数的警告UNREFERENCED_PARAMETER(strRegPath);// 如果编译⽅式为Debug,则插⼊⼀个INT 3指令,⽅便我们调试// 打印⼀⾏字符串,并注册驱动卸载函数,以便于驱动卸载DbgPrint("My First Dirver!\r\n");//KdPrint(("KD My First Dirver!\r\n"));objDriver->DriverUnload = DriverUnload;return STATUS_SUCCESS;}其中两个函数,DriverEntry是程序⼊⼝相当于main,DriverUnload是卸载驱动时执⾏的函数。

Windows内核调试器

Windows内核调试器

Windows内核调试器Windows内核调试器原理浅析SoBeIt前段时间忽然对内核调试器实现原来发生了兴趣,于是简单分析了一下当前windows下主流内核调试器原理,并模仿原理自己也写了个极其简单的调试器:)WinDBGWinDBG和用户调试器一点很大不同是内核调试器在一台机器上启动,通过串口调试另一个相联系的以Debug方式启动的系统,这个系统可以是虚拟机上的系统,也可以是另一台机器上的系统(这只是微软推荐和实现的方法,其实象SoftICE这类内核调试器可以实现单机调试)。

很多人认为主要功能都是在WinDBG里实现,事实上并不是那么一回事,windows已经把内核调试的机制集成进了内核,WinDBG、kd之类的内核调试器要做的仅仅是通过串行发送特定格式数据包来进行联系,比如中断系统、下断点、显示内存数据等等。

然后把收到的数据包经过WinDBG处理显示出来。

在进一步介绍WinDBG之前,先介绍两个函数:KdpTrace、KdpStub,我在《windows异常处理流程》一文里简单提过这两个函数。

现在再提一下,当异常发生于内核态下,会调用KiDebugRoutine两次,异常发生于用户态下,会调用KiDebugRoutine一次,而且第一次调用都是刚开始处理异常的时候。

当WinDBG未被加载时KiDebugRoutine为KdpStub,处理也很简单,主要是对由int 0x2d引起的异常如DbgPrint、DbgPrompt、加载卸载SYMBOLS(关于int 0x2d引起的异常将在后面详细介绍)等,把Context.Eip 加1,跳过int 0x2d后面跟着的int 0x3指令。

真正实现了WinDBG功能的函数是KdpTrap,它负责处理所有STATUS_BREAKPOINT和STATUS_SINGLE_STEP(单步)异常。

STATUS_BREAKPOINT的异常包括int 0x3、DbgPrint、DbgPrompt、加载卸载SYMBOLS。

使用Windbg调试内核

使用Windbg调试内核

使⽤Windbg调试内核[原⽂:]Windbg是微软开发的免费源码级调试⼯具。

Windbg可以⽤于Kernel模式调试和⽤户模式调试,还可以调试Dump⽂件。

1.从下载Install Debugging Tools for Windows 32-bit Version2.从下载Windows Symbol Packages,安装到D:\Program Files\Symbols3.启动Windbg,File->Symbol File Path填写以上Symbols安装路径:D:\Program Files\Symbols4.File->Kernel Debug->Local,在下⾯执⾏lkd> !process出现以下错误:NT symbols are incorrect, please fix symbols这个可能是D:\Program Files\Symbols\exe\ntoskrnl.pdb破损所致。

解决⽅案:将第3步中的Symbol File Path填写为:D:\Program Files\Symbols;SRV*D:\Program Files\Symbols*/download/symbols按照这样设置,WinDbg将先从本地⽂件夹D:\Program Files\Symbols中查找Symbol,如果找不到,则⾃动从MS的Symbol Server上下载所需要的Symbol,并且在本地D:\Program Files\Symbols⽂件夹下维持⼀份拷贝。

5.内核调试FileàOpenExecutableà可以选择⼀个可执⾏⽂件进⾏调试;FileàAttache to a Processà可以选择⼀个运⾏中的进程,并对其进⾏调试;FileàKernel DebugàLocalà可以选择本地内核调试。

Windows调试工具入门3(WinDbg基本调试操作)

Windows调试工具入门3(WinDbg基本调试操作)

Windows调试⼯具⼊门3(WinDbg基本调试操作)Windows调试⼯具⼊门3—基本调试操作Windows调试⼯具⼊门-3基本调试操作基本调试操作⼀、调试器命令窗⼝1、简介使⽤Windows调试⼯具进⾏调试,⼤部分和调试器之间的交互都是通过调试器命令窗⼝来进⾏的。

命令的输⼊、输出都是在调试器命令窗⼝中显⽰出来。

对WinDbg来说,调试器命令窗⼝是名为”Command”的窗⼝;对于KD、CDB和NTSD来说,整个命令⾏窗⼝就是调试器命令窗⼝。

这⾥主要介绍WinDbg中的调试器命令窗⼝。

⼀般来说WinDbg运⾏之后都会打开⼀个标题为Command的⼦窗⼝,在没有调试⽬标的时候,这个窗⼝是不能接受输⼊输出的,这时WinDbg处于静⽌模式,只有在打开调试⽬标之后,才能够使⽤它和调试器交互。

窗⼝分为三个部分:位于上部的⾯积最⼤的是命令输出窗⼝。

所有的命令输出、⽬标程序的调试信息输出等等都会在⾥⾯显⽰出来。

上⼀篇中介绍的调试器⽇志中记录的就是显⽰在这⾥的内容。

下半部分左边是提⽰符窗⼝。

这⾥通过提⽰符能够快速知道调试器⽬前的状态。

上图中0:000>,冒号前的数字表⽰当前的进程号,同时调试多个进程时,每个进程都会被指派⼀个进程号;冒号后的000表⽰线程号。

进⾏内核调试时,如果是单处理器系统,提⽰符是kd>的形式;如果是多处理器系统,则是0: kd>的形式,前⾯的0表⽰处理器号。

提⽰符还可能是*BUSY*这样的字符串,以表⽰调试器正忙。

也可以通过命令来⾃定义提⽰符。

下半部分右边是命令输⼊窗⼝。

需要执⾏的命令就在这⾥输⼊。

调试器命令窗⼝中输⼊命令时可以使⽤⼀些快捷操作:上下⽅向键可以查找先前的命令。

ESC键⽤于清除当前⾏的命令。

TAB键⽤于⾃动补完命令。

例如⼀些符号可以只输⼊⼀部分,然后通过按下TAB⼀次或多次来找到需要的符号。

⿏标右键点击命令窗⼝,可以将剪贴板中的内容粘贴到命令输⼊框中。

直接按下ENTER键重复上⼀条命令。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Windows 内核驱动调试环境搭建及调试步骤
本文,系09年笔记记录整理,当时只有大概的步骤,最近又搭建环境,顺道比较详细的整理一下,以供自己备查。

较之前的笔记,只是DDK和VMWARE的版本增高了,基本步骤还是大差不差。

注意:
如果是初次搭建环境,请大概浏览完全篇后,再参照本文搭建环境。

一、工具描述
主机:XP sp3
虚拟机:vmware9.0 +XP sp3
WinDBG
DDK:6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso
注:
主机:hostOS
虚拟机:guestOS
代码系《windows驱动开发技术详解》
二、具体步骤
guestOS设置:
添加串口:
VM->settings->hardware->add
选择 serial
设置如下图所示:
修改guestOS的boot.ini文件
在文件最末行添加如下内容:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional Debug" /fastdetect /debugport=com2 /baudrate=115200 debugport=com2,要根据你虚拟出来的串口号来设置。

本人电脑里设置的是COM2,如上图所示。

注意:
1、boot.ini 文件在C:根目录下,修改booti.in文件时,需要设置文
件夹选项,详见下图的标注。

2、波特率
进入系统(虚拟机),修改串口的波特率为115200,默认建立的时,波特率是9600。

电脑右键->属性->硬件->属性管理,在弹出的框框里找到COM2修改即可。

虚拟机(guestOS)上的配置基本完成。

hostOS配置:
安装DDK
版本:
6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso,在
微软网站可以下载到。

DDK的安装,可以使用DEAMON tools 安装即可。

WinDBG设置:
创建一个windbg的快捷方式
右击windbg快捷图标,并在属性下的目标内容后面,
添加“-k com:port=\\.\pipe\com_1,baud=11520,pipe”后,确定即可。

设置符号路径
WinDbg->菜单->File->Symbol File Path或“Ctrl+S”打开设置窗体,符号路径一般有两个两者以分号隔开。

1、是你设置保存系统DLL的PDB文件的路径
直接从微软网站下载,下载时一定要注意版本,也就是要和你的操作系统版本一致。

Symbol下载地址中
/whdc/devtools/debugging/symbol pkg.mspx
例如
我将其安装在D:\WINDOWS\Symbols,则在框中输入“D:\WINDOWS\Symbols”
2、是你驱动的PDB的路径,即你驱动生成所在的目录。

至此,hostOS(主机)需要设置的基本完成。

联调基本步骤:
启动虚拟机
选择 XP的调试版本,先不要按“回车键”。

主机(hostOS)上运行Windbg程序。

运行虚拟机上的XP系统(在虚拟机的 debug选项上按“回车”)
Windbg界面的命令行窗口输入“bu helllwdm!driverentry”(不分大小写哦)
在驱动的DriverEntry函数的入口点下一个延迟断点,helllwdm是你的驱动名字。

在虚拟机上加载驱动程序
这里使用instDrv工具,网上搜索能搜到。

在虚拟机上,安装驱动,并启动
主机(hostOS)上的Windbg,就断下来了,可以单步调试你的驱动了,如下图所示:
至此,本文的任务完成。

相关文档
最新文档