windbg 参数断点

合集下载

WinDbg入门教程

WinDbg入门教程

WinDbg入门教程你可能有许多理由来使用这样的调试器,比如,在你家里的机器上没装开发环境,但是一个程序一次次的崩溃。

其实根据堆栈的dump就可以判断出IE的崩溃是否是由于一个第三方的插件。

对于WinDbg,我目前为止还没有发现很好的快速入门的教程。

这篇文章结合实例讨论了WinDbg的使用。

我首先假设你熟悉调试的基本概念:stepping in, stepping out,断点以及远程调试的基本概念。

注意,这本来是座位一个入门的文档,你可以阅读并且开始使用WinDbg. 如果对于特定的命令有疑问,请查阅WinDbg的文档。

你可以在任何微软提供的调试器中使用这篇文章中提到的命令,比如在VS的命令行窗口中。

这篇文章是基于WinDbg 6.3.这仅仅是一系列关于调试技术的文章中的第一篇。

在下一篇文章中,我会解释如何针对调试器编写扩展DLL.调试器一览下面大概介绍了你可以从微软网站上下载到的调试器:· KD-内核调试器。

你可以用它来调试蓝屏一类的系统问题。

如果是开发设备驱动程序是少不了它的。

· CDB-命令行调试器。

这是一个命令行程序· NTSD-NT调试器。

这是一个用户模式调试器,可以用来调试用户模式应用程序。

它实际上是一个CDB的windows UI增强。

· WinDbg-用一个漂亮的UI包装了KD和NTSD。

WinDbg即可以调试内核模式,也可以调试用户模式程序。

· VS, -使用同KD和NTSD相同的调试引擎,并且相比于同样用于调试目的的WinDbg,提供了功能更丰富的界面。

调试器之间的比较功能KDNTSDWinDbgVisual Studio .NET内核模式调试YNYN用户模式调试YYY非托管调试YYYY托管调试YYY远程调试YYYY附加到进程YYYY从进程分离YYYYSQL调试NNNYWinDbgWinDbg实际上包装了NTSD和KD并且提供了一个更好用的用户界面。

驱动的断点写法

驱动的断点写法

在编程中,"断点" 是指程序执行过程中暂停的位置,通常用于调试目的,以便程序员可以检查代码执行时的状态。

驱动程序的断点写法可以根据所使用的调试工具和编程语言而异。

下面是一些常见的在驱动程序中设置断点的方法:
1.使用调试器:大多数操作系统提供了调试器工具,可以用来调试驱动程序。

您可以在调试器中设置断点来暂停程序执行并检查当前的变量值、寄存器状态等。

例如,在 Windows 操作系统中,您可以使用 WinDbg 或 Visual Studio 来调试驱动程序。

在 Linux 环境下,您可以使用 GDB 调试器。

2.调试打印语句:在驱动程序中,您可以插入调试打印语句来输出关键变量的
值或执行位置信息。

这样,当程序执行时,您可以通过查看控制台或日志文件来了解程序的执行情况。

这种方法可以帮助您找出程序执行的具体位置并检查特定变量的值。

3.条件断点:一些调试器允许您设置条件断点,即只有当满足特定条件时才会
触发断点。

您可以根据特定的条件来设置断点,以便在满足条件时暂停程序的执行。

4.动态分析工具:除了调试器外,还有一些动态分析工具可以帮助您分析驱动
程序的执行情况。

这些工具可以提供更深入的分析,例如跟踪内存分配、检测内存泄漏等。

设置断点时应该考虑代码执行的特定情况,并选择最适合您的调试需求的方法。

在驱动程序开发过程中,合理设置断点有助于快速定位和解决问题。

windbg常用命令列表

windbg常用命令列表

bp KERNELBASE!CreateFileW+0x5"dU /c 50 poi(@ebp + r eax;if(@eax<0){.echo hit}.else{gc}" 软件断点
bp KERNELBASE!CreateFileW+0x5"dU /c 50 poi(@ebp+ bp `d4dtest!d4dtestdlg.cpp:196` ba w4 0006fc74 bm /a nt!Dbgk*
bl g gu $$ 返回到父函数 p p "dv" $$单步后自动执行dv命令 pc $$单步到下一条call指令 t tc $$跟踪到下一条call指令 tb $$跟踪到下一条分支指令 wt - 13 u nt!PsGetCurrentProcessId uf RtlLeaveCriticalSection ub 773c78e9 a<地址> !locks !cs -1 !alpc /m 9322a230 dt _RTL_CRITICAL_SECTION dt _ERESOURCE dt _KEVENT -r !pcr dg @fs !idt -a !cpuid !cpuinfo !irpl dt -KPCR !drvobj ser2pl !devobj 85163500 !devstack 85163500 !devnode 0 1 !irp 85163e70 dt _IO_STACK_LOCATION 85879d60 dt _IRP dt _DRIVER_OBJECT dt _DEVICE_OBJECT !arbiter 2 $$物理地址的分配情况 !pci ff 0 2 0 0 ff !pcitree ib 510 ob 510 0a !amli dns /s \_sb_.pci0.bat0 !loadby sos mscorwks .load clr10\sos.dll !name2ee clihello CliHello.CliHello.Main !ip2md 0x7ff 001c0dbd

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 命令可以查看设备被打开的句柄。目前在这个地方使用的话,由于没有句 柄被打开,还看不到什么有用的信息,在后面进行演示。

WinDBG调试命令大全

WinDBG调试命令大全

WinDBG调试命令⼤全转载收藏于:#调试命令窗⼝+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#使⽤gflags.exe⼯具(在windbg所在⽬录下),让某个进程启动时,拉取windbg进⾏调试如下截图:当名称为captcomm.exe的进程启动时,拉起windbg调试也可通过脚本命令来实现:// 运⾏captcomm.exe时,启动windbg调试reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\captcomm.exe" /v Debugger /t REG_SZ /d "C:\Program Files\Debugging Tools for Windows (x86)\windbg.exe" /f// 解除启动时windbg调试reg delete"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\captcomm.exe" /f// 64位系统上,也可以设置以下注册表节点reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\captcomm.exe" /v Debugger /t REG_SZ /d "C:\Program Files\Debugging Tools for Windows (x86)\windbg.exe" /f// 解除启动时windbg调试reg delete"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\captcomm.exe" /f// 测试发现:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options和HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options指向的是同⼀数据,修改其中任何⼀安全软件可能会禁⽌修改注册表的Image File Execution项:-- 对于360安全卫⼠,在“设置”中去掉“开启360⾃我保护”的勾选来关闭-- 对于McAfee,需要禁⽌IPS(Intrusion Prevension Systems)。

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 使用教程

详解用法详解第30章WinDBG用法WinDBG是个非常强大的调试器,它设计了极其丰富的功能来支持各种调试任务,包括用户态调试、内核态调试、调试转储文件、远程调试等等。

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

尽管WinDBG是个典型的窗口程序,但是它的大多数调试功能还是以手工输入命令的方式来工作的。

目前版本的WinDBG共提供了20多条标准命令,140多条元命令(Meta-commands),和难以计数的大量扩展命令。

学习和灵活使用这些命令是学习WinDBG的关键,也是难点。

上一章我们从设计的角度分析了WinDBG,本章将从使用(用户)的角度介绍WinDBG。

我们先介绍工作空间的概念和用法(第1节),然后介绍命令的分类和不同种类的命令提示符(第2节)。

第3节介绍不同的调试模式,也就是如何与不同特征的调试目标建立调试会话。

第4节介绍上下文的概念和在调试时应该如何切换和控制上下文。

第5节介绍调试事件和如何定制调试事件的处理方式。

从第6节到第9节我们将分别介绍如何在WinDBG中完成典型的调试操作,比如控制调试目标(第6节)、设置断点(第7节)、观察栈(第8节)以及如何观察和修改数据(第9节)。

30.1 工作空间WinDBG使用工作空间(Workspace)来描述和存储一个调试项目的属性、参数、以及调试器设置等信息。

其功能类似于集成开发环境的项目文件。

分类30.1.1分类WinDBG定义了两种工作空间,一种称为缺省的工作空间(Default Workspace),另一种称为命名的工作空间(Named Workspace)。

当没有明确使用某个命名的工作空间时,WinDBG总是使用缺省的工作空间,因此缺省的工作空间也叫隐含的(implicit)工作空间,命名的工作空间也叫显式的(explicit)工作空间。

使用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。

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

Windbg是一款Windows系统下的调试工具,它可以用于分析和调试应用程序和操作系统。

Windbg支持多种类型的断点,其中包括参数断点。

参数断点可以在函数调用时暂停程序执行,并检查函数的参数值,以便更好地进行调试。

Windbg中设置参数断点的步骤如下:
打开Windbg,并加载需要调试的程序。

在Windbg命令窗口中输入“bp”,然后按下Tab键,可以看到Windbg支持的所有断点类型。

选择“bp”后面的数字,表示设置参数断点。

例如,输入“bp3”表示设置参数断点。

在参数断点设置命令后面输入函数名和参数序号。

例如,输入“bp3 myfunction+0x4 1”表示在myfunction函数的第一个参数上设置参数断点。

运行程序,当程序执行到设置的参数断点时,Windbg会暂停程序执行,并显示函数的参数值。

需要注意的是,设置参数断点需要知道函数名和参数序号,因此需要对程序进行逆向工程和代码分析。

此外,参数断点可能会影响程序的性能和稳定性,因此需要谨慎使用,并在调试完成后及时删除。

相关文档
最新文档