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的操作命令和使用技巧也很多,这里仅列举我比较关心和常用的几个主题。

WinDGB双机调试

WinDGB双机调试

假设某台计算机在运行某个驱动时蓝屏(运行代码在WinDbg教程\代码文件夹中)。

如下图:这时我们可以通过WinDGB进行双机调试。

首先选择两台电系统之间的通信方式,WinDGB支持串行口、1394、USB三种方式。

选择好通信方式后,就可以将合适的电缆插到两台系统的相应端口上。

然后在主机上启动WinDBG,在其―File(文件)‖选择―Kernel Debug(内核调试)‖,或者按―Ctrl+K‖。

如下图:在内核调试对话框中选择要与通信电缆和目标机器一致的类型和参数,然后点击―确定‖。

WinDBG进入等待壮态,等待来自目标系统的调试数据。

如下图所示:连接到目标系统后,第一步是使用!analyze扩展命令。

该扩展执行大量的自动分析,分析结果在调试器命令窗口中显示。

若要数据的全冗长模式显示,还应该使用-v选项。

这里输入!analyze –v命令,如下图所示:输入!analyze –v命令后的显示:kd> !analyze -v******************************************************************************** Bugcheck Analysis ********************************************************************************SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M (1000007e)This is a very common bugcheck. Usually the exception address pinpointsthe driver/function that caused the problem. Always note this addressas well as the link date of the driver/image that contains this address.Some common problems are exception code 0x80000003. This means a hardcoded breakpoint or assertion was hit, but this system was booted/NODEBUG. This is not supposed to happen as developers should never havehardcoded breakpoints in retail code, but ...If this happens, make sure a debugger gets connected, and thesystem is booted /DEBUG. This will let us see why this breakpoint ishappening.Arguments:Arg1: 80000003, The exception code that was not handledArg2: f8d55578, The address that the exception occurred atArg3: f8afdb90, Exception Record AddressArg4: f8afd88c, Context Record Address//上面给出了相应的四个参数,第二列是代号,第三列是解释。

windbg双机调试的配置方法(1394版)

windbg双机调试的配置方法(1394版)

windbg双机调试的配置方法(1394版)学习各种外挂制作技术,马上去百度搜索"魔鬼作坊"点击第一个站进入、快速成为做挂达人。

昨天在Berry的指导下开始了双机调试之旅(两台笔记本)准备的材料:两台都有1394的机器,我这里用的是笔记本,一根1394线(1394线有3种,4对4,4对6,6对6,一般笔记本都是4口的,所以我买了一根4对4的线,市场价大概30元吧,也许还有更便宜的)下面,被调试机称target,调试机称Host。

target机配置:2000-2003的配置:在boot.ini里面加一行:multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP1394"/noexecute =optin/fastdetect/debug/debugport=1394/channel=20红颜色的是关键,前面的根据各人的电脑自己配置,网上配置虚拟机调试的教程很多,不多说了,注意我这里最后的channel是20,然后禁用1394(2000必须禁用,xp以上不需要,系统会在进debug后自己禁用),重启,选这个选项进系统host机配置:安装windbg(最好是用微软的安装包安装,不是copy),然后把1394线拔了(这里我搞了半个小时,最后快放弃了才成功的关键点,也许是我的host机器太老了,1394设备太烂,插了线就不认),然后打开windbg,按Ctrl+K,选择1394,填入20(这里的20是上面的channel),然后确定,这时候windbg会自动安装一个虚拟的1394的驱动,然后会wait to connect,这时候插上线,就可以调试了。

以后可以在windbg的快捷方式里面填上启动选项-k1394:channel=20,symlink=instance这样可以快速启动1394调试1394的调试速度很快,双机调试确实很爽,呵呵注意,vista以上的启动选项比较复杂,不能通过改boot.ini来配置在上篇的中我们介绍了API编程的基础知识和一些比较“酷”的API调用,这期我们将配合专题介绍关于注册表编程的API函数及其应用实例,使读者朋友何能够将前面学到的注册表知识推广到VB编程中,继续向VB高手迈进(路漫漫……)。

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简介
控制和使用调试符号
加载


ld [ModuleName] 重新加载 .reload (.reload user) 设置选项 .symopt !sym noisy|quiet|prompts|prompts off 查找符号 ln 0xXXXXXXXX 检查符号 x nt!Dbgk*
INT3指令, 8086引入
软件断点的基础 追踪标志(TF),8086引入 单步跟踪的基础 调试寄存器,80386引入 硬件断点的基础,监视变量、IO访问,也可以针对代码 分支监视和记录, Pentium Pro引入 按分支单步的基础,记录软件的执行流程
IA-32的异常分类
CPU的调试支持
WinDBG的三类命令
常规命令(d*,e*,b*,r)
WinDBG简介
实现核心调试功能 1) 访问调试目标:读写内存、寄存器、IO等. r eip = XXXXXXXX 2) 控制调试目标: 断点、跟踪. bp nt!KiDispatchException ba W4 XXXXXXXX 内建在调试器中 元命令(.reload,.reboot,.symfix,.sympath) 内建在调试器中 扩展命令 (!process,!thread) 实现在动态加载的扩展模块(DLL)中
WinDBG简介
设置路径
.srcpath
源码路径 .exepath 可执行映像的路径 .sympath 符号文件的路径 .extpath 扩展命令模块的搜索路径
调试符号文件
存储调试符号的文件
WinDBG简介
单独的文件,如.PDB 存放在可执行文件中 微软使用的符号文件 PDB, VC1.0引入, C/C++, .Net程序 DBG, 已经过时 PDB的格式保密, 提供API访问 使用PEView 和SymView查看符号信息

Windbg的设置

Windbg的设置

Windbg的设置Windbg本身可以直接从微软的网站上下载下载地址:/whdc/devtools/debugging/default.mspxWindbg的设置其实主要是关于调试符号的设置,没有符号你会很不爽,会忽视掉许多细节,因此调试符号之于Windbg是非常重要的.1.系统调试符号的设置本帖隐藏的内容需要回复才可以浏览首先找个空间足够的位置,XP sp2的调试符号完整一点大概需要1G的空间~~比如我是在D盘,建立一个MyLocalSymbols文件夹,用来存放系统的符号文件.然后你可以从微软的网站上下载相应的调试符号包(大要180M~200M大小),要根据你虚拟机中的相应系统版本来下载,安装到MyLocalSymbols文件夹下.当然,不安装符号包的话也可以设置成调试时自动从网上下载(即使你安装了符号包,有部分内容还是要到网上下载),具体怎么设置稍后讲.不过我比较喜欢一次搞完,免得每次用的时候都要等它到网上下载比较慢~~2.自己的调试符号的设置再建一个文件夹,用于存放我们自己编译出来的驱动的符号文件.单独存放,不要跟系统的混到一起.我这里就仍在D盘建立一个MySysSymbols文件夹,用于存放自己的符号文件.然后给这个文件夹创建一个快捷方式,把它放到C:\Documents and Settings\你的用户名\SendTo文件夹下.这样,以后编译完驱动以后,直接在符号文件上右击->发送到"MySysSymbols"就可以了,很方便~~ 3.环境变量的设置如果你想Windbg启动时自动识别符号路径的设置的话,我们就来建立一个环境变量在"我的电脑"上右击,"属性"->"高级"->"环境变量",然后我们给当前用记新建一个名为_NT_SYMBOL_PATH的环境变量值为:D:\MyLocalSymbols;D:\MySysSymbols;SRV*D:\MyLocalSymbols*http://msdl.microsoft.c om/download/symbols这样设置以后,系统的调试符号就在D:\MyLocalSymbols下,而我们自己驱动的调试符号就在D:\MySysSymbols下当符号文件不匹配时,Windbg会自动连网从/download/symbols下载符号文件到D:\MyLocalSymbols,下次再用到时就不用下载了设置好保存就可以了,修改环境变量需要重新启动系统才能生效~到这里我再说一点,当你用了一段时间之后,常用的符号文件基本上就全有了,不想等,也可以用一些方法让Windbg马上下载符号文件直接打一些正确的但是当前符号包中不正确或不匹配的符号名称可以"刺激"Windbg马上到网上下载,我为了节约时间就是这么干的.比如打dt nt!_KPCR,如果你的内核文件TimeDataStamp不匹配(内核等几个核心文件由于更新经常会这样)使得Windbg无法正确显示此符号,它就会马上乖乖地到网上把整个符号文件下载回来~~在调试符号基本全了以后(调试时基本不再出现Windbg再连网下载符号文件的情况),建议把环境变量中联网的部分去掉。

驱动调试方法

驱动调试方法

驱动调试方法When it comes to driver debugging, it can be a challenging task for many developers. One effective method that can be used is to utilize debugging tools provided by the operating system such as WinDbg for Windows or GDB for Linux. These tools can help developers to quickly identify and debug issues within the driver code.当涉及驱动调试时,对许多开发人员来说可能是一个具有挑战性的任务。

一个有效的方法是利用操作系统提供的调试工具,如Windows的WinDbg 或Linux的GDB。

这些工具可以帮助开发人员快速识别和调试驱动程序代码中的问题。

Another approach that can be taken is to incorporate print statements into the driver code. By strategically placing print statements throughout the code, developers can get a better understanding of the flow of the code and where potential issues may lie. This method can be particularly useful for drivers that are not easily debugged using traditional tools.另一种方法是将打印语句纳入驱动程序代码中。

windbg调试器的简单分析

windbg调试器的简单分析

/* Initialize the Time Slip DPC */ KeInitializeDpc(&KdpTimeSlipDpc, KdpTimeSlipDpcRoutine, NULL); KeInitializeTimer(&KdpTimeSlipTimer); ExInitializeWorkItem(&KdpTimeSlipWorkItem, KdpTimeSlipWork, NULL); /* First-time initialization done! */
下面继续:
<Kdinit.c> /* Initialize the debugger if requested */ if ((EnableKd) && (NT_SUCCESS(KdDebuggerInitialize0(LoaderBlock)))) { /* Now set our real KD routine */ KiDebugRoutine = KdpTrap;//更换调试函数为 kdpTrap /* Check if we've already initialized our structures */ if (!KdpDebuggerStructuresInitialized) { /* Set the Debug Switch Routine and Retries*/ KdpContext.KdpDefaultRetries = 20; KiDebugSwitchRoutine = KdpSwitchProcessor;
<Kdinit.c> /* Set the Debug Routine as the Stub for now */ KiDebugRoutine = KdpStub;

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转换后的串口号,就能把这台笔记本当作主机使用。

Windows调试工具入门1(WinDbg调试工具介绍)

Windows调试工具入门1(WinDbg调试工具介绍)

用户态调试方面:
Windows 调试工具包 OllyDbg
Visual Studio 调试器
原理
Windows 的用户程序调 Windows 的用户程 Windows 的用户程序调试
试支持
序调试支持
支持
系统和平 台支持
主要基于 NT 系统,9x 内核下支持不佳并且 需要安装附加模块
主要支持 NT 系统, 新版本的 VisualStudio 不 9x 下也可以使用 支持在 9x 系统下安装。
Windows 调试工具包中的调试器包括 WinDbg、KD、CDB 和 NTSD。其中, KD 用于 内核调试;CDB 和 NTSD 用于用户态调试,在功能和使用上几乎完全一致;WinDbg 是内 核调试器和用户态调试器的综合体,由于功能完善并且具有图形界面,所以是最常用的工具。 它们能够在 x86、Itanium 和 x64 机器上的所有 NT 平台操作系统中运行。
公司发布的软件,有用户反馈和 XXX 安全软件冲突老是造成系统崩溃, 但是搭建环境之后却又没有办法重现;对方是个普通用户,鼠标都抓得 不太稳。用户很火大,闹着要抓个老虎到公司来找你上司做俯卧撑,后 果很严重,怎么办?
在现实环境中,有很多复杂的调试场景,我们需要专业级的调试器来解决这些问题。而 WinDbg 恰恰提供了这种商业软件环境下的专业级软件调试功能,它和其他很多我们熟知的 调试器的区别也在于此。
驱动程序怎么才能源码调试?SoftICE 不支持新系统,我要在 Vista 上调试 怎么办?
软件中包含一个 Windows 服务组件,但是每次还没有登陆到桌面之前就 崩溃了,怎么进行动态调试?
我想调试 Explorer,调试 IE,调试 CSRSS,调试……,但是调试器一附 加上去,系统就会出问题。怎么办?

WinDbg远程调试配置方法

WinDbg远程调试配置方法

WinDbg远程调试配置方法1. 调试环境:目标机:VMware 5.5.1 + Windows XP SP2主机:Windows XP SP2 + WinDbg 6.52. 目标机配置(虚拟机)2.1 通过VMware虚拟一个com端口关闭目标机系统,运行 VMware ,点击Edit virtual machine settings -> Add -> Serial Port -> Output to named pipe;第一框里保持默认的 "\\.\pipe\com_1";第二框里选"This end is the server."第三框里选"The other end is an application."选中"Connect at power on";然后点击 "Advanced>>",选中"Yield CPU on poll",然后点完成。

2.2 设置目标机操作系统的boot.ini在目标机操作系统的boot.ini文件加入一行multi(0)disk(0)rdisk(0)partition(1) \WINNT="Microsoft Windows XP Professional - debug" /fastdetect /debug /debugport=com1 /baudrate=115200。

目标机配置完成。

3. 主机配置安装WinDbg并在桌面创建一快捷方式,点右键属性,在快捷方式目标处填写为:(此处WinDbg装在C盘)C:\Program Files\Debugging Tools for Windows\windbg.exe -k com:port=\\.\pipe\com_1, baud=11520, pipe4. 调试顺序(1) 启动目标机,进入调试程序模式(2) 运行主机中桌面的WinDbg快捷方式,就可以连接上目标机5. 附注:5.1 如何单步调试调试驱动程序时,在目标机把驱动安装完成后,需在主机的WinDbg配置Symbol、Source 以及Image的路径,配置完成后,就可以进行驱动程序的源码单步调试。

  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这样就可以恢复原来的状态。

相关文档
最新文档