windbg 驱动调试

合集下载

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

Windows调试工具入门7(WinDbg驱动程序源码调试)
1. 开始源码调试 1. 设置
系列前面的几篇文章已经介绍过对符号路径和源码路径的设置。调试自己编写的驱动时,如 果是主控机上编译,在目标机上运行,那么一般都不需要专门设置 路径 WinDbg 就能找到正 确的符号和源文件。如果驱动不是在主控机上编译的,或者编译之后移动了源码或符号文件 就必须要进行设置。在这里我是这样设置 的:
1.准备
Windows 调试工具优于目前的其他内核调试器很重要的一点,就是能够非常方便的对自己编 写的驱动程序进行源码调试。为了能够更好的说明,我们首先需要做一些准备工作,分别编 写一个测试驱动程序和一个应用程序来使用驱动的功能。 驱动程序 首先实现一个最简单的驱动程序,除了 DriverEntry 等框架代码之外,我们添加一个 IRP_MJ_READ 的 Dispatch 例程,当应用程 序调用 ReadFile 时返回一个值递增的字节。另 外,实现两个 DeviceIoControl Code,一个调用 DbgPrint 向调试器显示信息并返回,另一 个访问非法指针造成崩溃。代码片断如下,完整的代码和编译出来的文件可以在附件中获取:
pstIrpStack = IoGetCurrentIrpStackLocation( Irp); pbyUserBuffer = (PUCHAR)Irp->UserBuffer; ulSize = pstIrpStack->Parameters.Read.Length;
if ( ulSize == 1) {
Device Object list: 82138030 kd> !devobj SrcDbgKnlDrv Device object (82138030) is for: SrcDbgKnlDrv \Driver\SrcDbgKnlDrv DriverObject 8219f5f0 Current Irp 00000000 RefCount 0 Type 00000022 Flags 000000c0 Dacl e10361f4 DevExt 00000000 DevObjExt 821380e8 ExtensionFlags (0000000000) Device queue is not busy. 如果我们的设备有附加到某个设备栈上的话,可以用!devstack 扩展命令显示设备栈的信 息。 kd> !devstack 82138030 !DevObj !DrvObj !DevExt ObjectName > 82138030 \Driver\SrcDbgKnlDrv00000000 SrcDbgKnlDrv 这里看到的输出说明 SrcDbgKnlDrv 没有附加到任何设备栈。 通过!devhandles 命令可以查看设备被打开的句柄。目前在这个地方使用的话,由于没有句 柄被打开,还看不到什么有用的信息,在后面进行演示。

怎样在虚拟机中搞驱动

怎样在虚拟机中搞驱动

两台电脑调试跟借助VMware调试有所不同,不同之处有以下几个方面。
(1) 需要自己制作一条Null Modem Cable. 请参考以下电路。将两台电脑连接起来。
6,1 4 Data Set Ready and Carrier Detect
6 20 Data Set Ready and Carrier Detect
-y:设置符号文件路径
现在我们假设你的驱动代码放在D:\mydriver目录中;系统级Symbol文件存放在C:\WINDOWS\Symbols目录中,这些Symbol文件是从微软的网站上/download/symbols下载而来,这个网址是不可以用IE直接打开的,WinDbgà Fileà Symbol File Path...界面中选择Reload,WinDbg会自动帮你下载;驱动生成的Symbol文件存放在D:\mydriver\objchk_wxp_x86\i386目录中。
编辑虚拟机中C盘根目录下的boot.ini文件。
在c:\下,可以找到boot.ini,可以用记事本打开它,或者命令行方式
C:\>attrib -s -h -r boot.ini
C:\>notepad boot.ini
我们需要在 guest os 的启动项上加些参数,才能够使用WinDbg调试它。我们可以在现有的行后面直接加参数,不过强烈推荐复制一个新行,在新行的后面加参数。这样在调试启动有问题的时候,我们可以方便的换回原来的启动方式。下面就是我改好的boot.ini。
运行 VMware ,点击 "Edit virtual machine settings"
点击 "Add..." 来运行 VMware 的

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。

使用Windbg双机调试驱动

使用Windbg双机调试驱动

困扰我多天的问题终于在今天解决了,感觉很轻松啊!调试Windows内核程序不能象r3层的应用层一样,可以随便调试!毕竟人家是运行在r0层的!你要是设置中断的话,会导致整个操作系统暂停!据说以前都使用SoftICE调试,这个是一个单机调试的软件,使用后会使系统很不稳定,后来NuMega公司宣布停止SoftICE的开发,因此估计现在也不太会有人用了!!微软出的WinDbg是利用双机调试的一款软件,当然按照书上说的,肯定使用虚拟机和主机这样“双”机调试!在调试的时候要设置很多东西,我就是因为设置这些东西困惑了我整整半个学期!现在我把自己的设定写一下,也是根据书上的,但是书上说的实在是他娘的太模糊了!!下载安装winDbg和VMWare虚拟机我就不说了,已经虚拟机安装xp系统!先在虚拟机的windows安装目录下C盘下有个boot.ini(当然是处于隐藏状态,选择工具-》文件夹选项-》把隐藏受保护的操作系统文件这个选项去掉)修改boot。

ini内容改为[boot loader]timeout=30default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS[operating systems]multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /noguibootmulti(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug/debugport = com1/baudrate=115200// 红色我本机绿色背景的是增加的[boot loader]timeout=5default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS[operating systems]multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetectC:\GHLDR=一键GHOST v2010.10.10然后关闭虚拟机系统,在VMware的Commands栏中单击Edit virtual machine setting“,选择Hardware页,然后单击Add,选择Serial Port(串口),单击下一步,选择Output to named pipe 单击下一步,保持前2个不变,分别为\\.\pipe\com_1和This end is the server,第三个修改为The other end is an application,这样虚拟机就算设置好了,接下来设置主机,转到你安装WinDbg的目录下,然后右击WinDbg。

windb 调试原理

windb 调试原理

windb 调试原理Windbg是一种强大的Windows调试工具,它可以用于分析和解决各种系统和应用程序的问题。

它提供了很多功能和命令,可以帮助开发人员和调试人员定位和修复程序中的错误。

本文将介绍Windbg调试的原理及其相关概念。

一、Windbg简介Windbg是由微软公司开发的一款免费的调试工具。

它可以在Windows操作系统上运行,并支持多种架构和平台。

Windbg可以连接到正在运行的进程或者通过调试器驱动程序连接到目标计算机上的内核模式进程。

它可以对进程进行实时监控,捕捉异常,查看内存和寄存器状态,以及跟踪函数调用等。

二、Windbg调试的原理Windbg调试的原理是通过在目标进程中注入调试器驱动程序来实现的。

当Windbg连接到目标进程时,它会将自己的调试器驱动程序加载到目标进程的地址空间中,并通过调试器驱动程序与目标进程进行通信。

调试器驱动程序可以截获目标进程的系统调用和异常,从而实现对目标进程的监控和控制。

三、Windbg调试的基本概念1. 符号表:符号表是一个存储了程序中函数和变量信息的数据库。

在调试过程中,Windbg可以使用符号表来解析函数和变量的名称和地址,从而方便开发人员进行代码分析和调试。

2. 断点:断点是调试过程中的一个重要概念,它可以让开发人员在程序执行到指定位置时中断程序的执行。

在Windbg中,可以通过命令设置断点,并在断点触发时查看程序的状态和调用栈信息。

3. 寄存器:寄存器是CPU中的一组特殊的存储单元,用于存储程序执行过程中的临时数据。

在Windbg中,可以查看和修改寄存器的值,以及使用寄存器的值来分析程序的执行流程。

4. 调用栈:调用栈是程序执行过程中的一个重要数据结构,用于保存函数调用的相关信息。

在Windbg中,可以查看和分析调用栈的信息,从而了解函数的调用关系和参数传递情况。

5. 内存窗口:内存窗口是Windbg中的一个功能,可以用来查看和修改目标进程的内存数据。

windbg使用方法

windbg使用方法

windbg使用方法Windbg是一款由微软公司开发的调试工具,它可以帮助开发人员分析和诊断Windows操作系统和应用程序的问题。

本文将介绍Windbg的基本使用方法,希望能够帮助读者更好地利用这个工具进行调试和分析。

首先,我们需要了解如何安装Windbg。

通常情况下,Windbg是作为Windows驱动程序开发工具包(Windows Driver Kit)的一部分发布的,也可以在微软的官方网站上下载到独立安装包。

安装完成后,我们可以在开始菜单或者安装目录中找到Windbg的可执行文件。

接下来,我们需要了解如何打开并配置Windbg。

在打开Windbg 后,我们可以通过“文件”菜单中的“符号文件路径”选项来设置符号文件的路径,以便Windbg能够正确地加载符号文件。

符号文件对于调试非常重要,它包含了源代码和可执行文件之间的映射关系,能够帮助我们更好地理解程序的运行状态。

在Windbg中,我们可以通过“文件”菜单中的“打开转储文件”选项来打开需要分析的转储文件(dump file)。

转储文件是程序崩溃时生成的一种内存快照,包含了程序崩溃时的内存状态和调用栈信息。

通过分析转储文件,我们可以找出程序崩溃的原因,并进行相应的调试和修复。

除了分析转储文件外,我们还可以通过“调试”菜单中的“附加到进程”选项来附加到正在运行的进程,以实时地监视和分析程序的运行状态。

这对于调试一些无法通过转储文件分析的问题非常有帮助,比如内存泄漏、死锁等问题。

在Windbg中,我们可以使用各种命令来进行调试和分析。

比如,通过“!analyze”命令可以自动分析转储文件,并给出可能的崩溃原因;通过“kb”命令可以查看当前线程的调用栈信息;通过“!heap”命令可以查看进程的堆内存分配情况等等。

熟练掌握这些命令对于高效地进行调试和分析非常重要。

除了命令之外,Windbg还提供了丰富的调试工具,比如内存窗口、寄存器窗口、线程窗口等,这些工具可以帮助我们更直观地了解程序的运行状态。

Windbg调试驱动

Windbg调试驱动
bd[id] 禁用断点,d=Disable,id即断点编号
be[id] 启用断点,e=Enable,id为断点编号
来个简单的实践过程,步骤如下:
1.编译好你的驱动,假设名为ShowSSDT.sys,并把驱动符号文件ShowSSDT.pdb发送到MySysSymbols文件夹下(之前设定的自己的调试符号文件夹)
键入!thread和Kp,查看当前的线程详细信息和堆栈(或者Alt+6也可以看stack).
!process [PID] 0, 查到当前进程:
ቤተ መጻሕፍቲ ባይዱ
在lm命令列出的信息中,start是模块的起始地址,通过键入"u 驱动起始地址",我们可以反汇编出它的代码
fffff800`044d51b2 4c8d1587e72300 lea r10,[nt!KeServiceDescriptorTable (fffff800`04713940)]
6.把ShowSSDT.sys拖到虚拟机中,在虚拟机系统中启动InstDrv,加载此驱动
7.回到Windbg窗口,如果一切正常的话,你会看到已经中断在ShowSSDT.sys的入口代码处了
接下来,要单步还是要下断点、要继续执行什么的,就全由你来作主了~~
指定需要查看的变量的名字
dv /V VariableName
fffff800`044d51b9 4c8d1dc0e72300 lea r11,[nt!KeServiceDescriptorTableShadow (fffff800`04713980)]
bl 列出所有断点,L=List
bc[id] 清除断点,c=Clear,id是bl查看时的断点编号
2.启动虚拟机,选择调试方式进入系统

Windbg调试技巧

Windbg调试技巧

目录1Windbg简介 (1)2Windbg设置条件断点 (1)3事件处理与异常 (3)4调试dll和ocx控件 (6)5进程调试与程序死锁 (8)6结语 (11)关键词:软件调试,调试技巧,windbg摘要:Windbg是微软提供的一款免费的软件调试工具,具有强大的功能和扩展性,满足各种各样的调试需求。

本文对windbg进行了简单的介绍,对几个我比较关心的主题进行了详细的讲解,并给出了一些调试技巧,配合一些示例。

由于软件调试是一个广阔的领域,windg的命令使用与调试技巧也很多,本文也不能一一涉及,文章最后给出了一些参考资源,可以进一步深入研究。

1Windbg简介Windbg是微软开发的一款免费软件调试工具,WinDBG 是个非常强大的调试器,它设计了极其丰富的功能来支持各种调试任务,包括用户态调试、内核态调试、调试转储文件、远程调试等等。

WinDBG 具有非常大的灵活性和可扩展性,用来满足各种各样的调试需求,比如用户可以自由定义调试事件的处理方式,编写调试扩展模块来定制和补充WinDBG 的调试功能。

此外windbg通过SOS.dll支持可以调试.net应用程序,使得windbg成为windows下软件调试的首选。

WinDbg主要适用于以下这些场合:1.商业软件的Debug(缺乏源码)和客户支持(需要远程调试)2.内核驱动的调试,以及对驱动进行逆向工程时进行动态调试3.研究Windows本身的内核或者软件4.疑难BUG的调试,如死锁、COM调用、资源泄露、堆栈或者堆溢出5.以性能优化为目的的调试6.对调试目标基本不造成影响的非侵入式调试(windbg特有)Windbg具备极为强大的功能,可以调试可执行文件(exe),动态链接库(dll)、Activex控件,程序dump 文件和在运行进程,涵盖了软件调试的方方面面,windbg的操作命令和使用技巧也很多,这里仅列举我比较关心和常用的几个主题。

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

本文主要记录个人安装VMware+Windgb+Win7内核驱动调试的笔记。

一、安装环境
1主机:Windows Vista Bussiness
2虚拟机:VMware 7
3GUestOS: Win7
4Windbg: 6.11
二、虚拟机配置
打开相应vmware 虚拟机上的“Virtaul Machine Settings“
2.“Hardware”选项中—-> 点击“Add”添加一个串口设备SeriallPort .
3.”Next”,在“Serial Port”里选中“Output to named pipe”
4.”next”,然后如下设置:
5.确定之后,回到如下界面,在右脚”Virtual Machine Settings”页面时,在“I/O Mode”里选中“Yield CPU on poll“
6. Ok之后就设定完毕了。

三、Windbg设置
下载地址:Windbg
安装之后,设置一个桌面快捷方式,然后,右键->属性,在Target中的引号后面添加如下:-b -k com:pipe,port=\\.\pipe\com_1,resets=0
或者是:-b -k com:port=\\.\pipe\com_1,baud=115200,pipe 【二者似乎皆可】
四、GuestOS设置
Vista和XP不同, 没有boot.ini文件, 需要用bcdedit进行启动设置。

1. 在administrator权限下, 进入command line模式, 键入bcdedit命令, 会出现以下界面:
2. 然后, 设置端口COM1, baudrate为115200 (除COM1外, 也可以用1394或USB. 1394用起来比COM口快多了, 当然前提是你需要有1394卡及其驱动. 很恶心的是Vista不再支持1394的文件传输协议, 但是用windbg双机调试还是可以的)命令为:bcdedit /dbgsettings {serial [baudrate:value][debugport:value] | 1394 [channel:value] | usb }
3.接着, 我们需要复制一个开机选项, 以进入OS的debug模式
命令为:
bcdedit /copy {current} /d DebugEnty
DebugPoint 为选项名称, 名字可以自己定义. 然后复制得到的ID号.
4. 接着增加一个新的选项到引导菜单
bcdedit /displayorder {current} {ID}
这里的{ID}的ID值是刚生成的ID值.
5. 激活DEBUG : bcdedit /debug {ID} ON
这里的{ID} 的ID值还是刚才的ID值.
6. 命令执行成功后, 重新启动机器.或者更简单的图形界面设置:在msconfig界面中,选Boot,再选Advanced options,在选择Debug、Debug port、Baud rate都打上钩。

如果所示:
7. 选择DebugEntry[debug]作为等入口。

启动后,打开windbg.可以看到类似如下的信息:
Microsoft (R) Windows Debugger Version 6.11.0001.404 X86
Copyright (c) Microsoft Corporation. All rights reserved.
Opened \\.\pipe\com_1
Waiting to reconnect…
Connected to Windows 7 7600 x86 compatible target at (Thu Dec 10 17:46:36.928 2009 (GMT+8)), ptr64 FALSE
Kernel Debugger connection established. (Initial Breakpoint requested)
Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path. *
* Use .symfix to have the debugger choose a symbol path. *
* After setting your symbol path, use .reload to refresh symbol locations. *
**************************************************************************** Executable search path is:
*********************************************************************
* Symbols can not be loaded because symbol path is not initialized. *
* *
* The Symbol Path can be set by: *
* using the _NT_SYMBOL_PATH environment variable. *
* using the -y <symbol_path> argument when starting the debugger. *
* using .sympath and .sympath+ *
*********************************************************************
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntkrpamp.exe -
Windows 7 Kernel Version 7600 MP (1 procs) Free x86 compatible
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 7600.16385.x86fre.win7_rtm.090713-1255
Machine Name:
Kernel base = 0x83e0f000 PsLoadedModuleList = 0x83f57810
Debug session time: Thu Dec 10 17:46:32.658 2009 (GMT+8)
System Uptime: 0 days 0:06:18.429
Break instruction exception – code 80000003 (first chance)
*******************************************************************************
* *
* You are seeing this message because you pressed either *
* CTRL+C (if you run kd.exe) or, *
* CTRL+BREAK (if you run WinDBG), *
* on your debugger machine’s keyboard. *
* *
* THIS IS NOT A BUG OR A SYSTEM CRASH *
* *
* If you did not intend to break into the debugger, press the “g” key, then *
* press the “Enter” key now. This message might immediately reappear. If it *
* does, press “g” and “Enter” again. *
* *
*******************************************************************************
nt!DbgBreakPointWithStatus+0×4:
83e7a394 cc int 3
五、操作方式提示
1. 我发现,如果在GuestOs -win7启动过程中,如果打开了windbg之后,整个系统就像死机,不动了。

估计是windbg启动后设定了断点做调试,试试按F5,或者go这样就可以恢复原来的状态。

相关文档
最新文档