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

windbg是一个内核模式和用户模式调试器,包含在Windows调试工具中。这里我们提供了一些实践练习,可以帮助您开始使用windbg作为内核模式调试器。

设置内核模式调试

内核模式调试环境通常有两台计算机:主机和目标计算机。调试器在主机上运行,正在调试的代码在目标计算机上运行。主机和目标通过调试电缆连接。Windows调试程序支持以下类型的电缆进行调试:

  • Ethernet
  • USB 2.0
  • USB 3.0
  • 1394
  • Serial (also called null modem)

如果目标计算机运行的是Windows8或更高版本,则可以使用任何类型的调试电缆,包括以太网。此图说明通过以太网电缆连接调试的主机和目标计算机。

如果目标计算机运行的Windows版本早于Windows 8,则不能使用以太网进行调试;必须使用USB、1394或串行。此图说明了通过USB、1394或串行调试电缆连接的主机和目标计算机。

建立内核模式调试会话

在设置好主机和目标计算机并用调试电缆将它们连接起来之后,您可以按照用于设置的同一主题中的说明建立内核模式调试会话。例如,如果您决定设置主机和目标计算机以通过以太网进行调试,参考《通过网线手动设置内核模式调试》。同样,如果您决定设置主机和目标计算机以通过USB 2.0进行调试,您可以找到建立内核模式调试会话的说明,参考《通过USB 2.0电缆手动设置内核模式调试

开始调试

1、在主机上,打开windbg并与目标计算机建立内核模式调试会话。

2、在windbg中,从帮助菜单中选择内容。这将打开调试器文档chm文件。调试程序文档也可以在这里在线获得。

3、当建立内核模式调试会话时,windbg可能会自动进入目标计算机。如果windbg尚未插入,请从“调试”菜单中选择“中断”。

4、在windbg窗口底部附近的命令行中,输入以下命令:

.sympath srv*

符号搜索路径告诉windbg在哪里查找符号(pdb)文件。调试器需要符号文件来获取有关代码模块(函数名、变量名等)的信息。输入此命令,通知windbg执行符号文件的初始查找和加载:

.reload

5、查看加载模块的列表,请输入以下命令:

lm

6、让目标计算机运行,请输入以下命令:g

7、要再次打断,请从“调试”菜单中选择“打断”。

8、输入此命令以检查NT模块中的_FILE_OBJECT

dt nt!_FILE_OBJECT

9、输入此命令检查NT模块中的某些符号:

x nt!*CreateProcess*

10、输入此命令以在MmCreateProcessAddressSpace:处放置断点:

bu nt!MmCreateProcessAddressSpace

输入 g 让目标机运行

11、如果目标计算机没有立即进入调试器,请在目标计算机上执行一些操作(例如,打开记事本)。调用mmcreateProcessAddressSpace时,目标计算机将进入调试器。要查看堆栈跟踪,请输入以下命令:

.reload

k

12、在“视图”菜单上,选择“反汇编”。

在“调试”菜单上,选择“跳过”(或按F10)。在观察反汇编窗口时,再输入几次STEP命令。

13、通过输入以下命令清除断点: bc *

输入g让目标计算机运行。从“调试”菜单中选择“中断”或按Ctrl-Break再次中断。

14、查看所有进程的列表,请输入以下命令: !process 0 0

15、复制一个进程的地址,然后输入以下命令:!process Address 2

For example: !process ffffe00000d5290 2

16、复制一个线程的地址,然后输入以下命令:!thread Address

For example: !thread ffffe00000e6d080

17、查看即插即用设备树中的所有设备节点,请输入以下命令: !devnode 0 1

18、查看设备节点及其硬件资源,请输入以下命令:!devnode 0 9

19、查看服务名称为磁盘的设备节点,请输入以下命令:!devnode 0 1 disk

20、复制devnode 0 1输出显示节点的物理设备对象(PDO)的地址,然后输入以下命令: !devstack PdoAddress

For example: PdoAddress!devstack 0xffffe00001159610

21、获取有关driver disk.sys的信息,请输入以下命令:!drvobj disk 2

22、!drvobj的输出显示调度例程的地址:例如,classpnp!类别全局显示。要在ClassGlobalDispatch上设置和验证断点,请输入以下命令: bu CLASSPNP!ClassGlobalDispatch bl

输入g让目标计算机运行。 如果目标计算机没有立即进入调试器,请在目标计算机上执行一些操作(例如,打开记事本并保存文件)。调用ClassGlobalDispatch时,目标计算机将进入调试器。要查看堆栈跟踪,请输入以下命令:.reload k

23、结束调试会话,请输入以下命令:qd

原文地址:https://www.cnblogs.com/yilang/p/11428530.html

时间: 2024-10-09 15:16:44

使用WinDbg调试入门(内核模式)的相关文章

windbg 如何再内核模式调试用户空间的程序

1:使用!process 0 0 获取用户空间的所有的进程的信息 !process 0 0 **** NT ACTIVE PROCESS DUMP ****    PROCESS 80a02a60  Cid: 0002    Peb: 00000000  ParentCid: 0000    DirBase: 00006e05  ObjectTable: 80a03788  TableSize: 150.    Image: System ..... 2:使用.process /p + 你需要断

浅析Windows系统调用——2种切换到内核模式的方法

首先总结2种切换到内核模式方法的各自流程: 内存法(中断法): (用户模式)WriteFile() -> ntdll!NtWriteFile() -> ntdll!KiIntSystemCall() -> int 2Eh -> 查找IDT的内存地址,偏移0x2E处 ->(内核模式)nt!KiSystemService() -> nt!KiFastCallEntry() -> nt!NtWriteFile() 通过0x2E中断转移控制到内核模式后,系统服务分发/调度

使用WinDbg调试SQL Server——入门

这篇文章我想探究下SQL Server里完全不同的领域:如果使用WinDbg(来自针对Windows的调试工具)调试SQL Server.在我们进入枯涩细节之前,我想详细解释下为什么选择这样晦涩的话题来写这篇文章. 缘由 当使用SQL Server时,你到底需不需要像WinDbg这样的调试器?简单回答:从不需要!SQL Server是一个稳定的产品,使用它提供的技术(扩展事件,DMVs/DMFs)进行故障排除已经可以了,从不会用到WinDbg.如果你有疑问的话,在你独自尝试调试讨厌的SQL Se

通过USB 2.0电缆手动设置内核模式调试

Windows的调试工具支持通过USB 2.0电缆进行内核调试.本文介绍如何手动设置USB 2.0调试.通过USB 2.0电缆进行调试需要以下硬件: USB 2.0调试电缆.此电缆不是标准USB 2.0电缆,因为它有一个额外的硬件组件,使其与USB2调试设备功能规范兼容.您可以在Internet上搜索“USB 2.0调试电缆”一词来找到这些电缆. 在主机上,有一个ehci(usb 2.0)主机控制器 在目标计算机上,支持调试的ehci(usb 2.0)主机控制器. 设置目标计算机 1.在目标计算

WinDbg调试.NET程序入门

俗话说:万事开头难! 自从来到新公司遇到性能问题后,需要想办法解决这个问题,但是一直没有合适的性能分析工具,然后找到StevenChennet 大神帮忙,他用WinDbg工具远程帮我分析了一个 dump文件,但是只看到键盘 “啪啪啪”,得到了结果,却不是很清楚WinDbg神奇具体如何使用的.结果,第二天,性能问题又来了,总不能每次劳烦大神驾到,所以不得不自己开始学习WinDbg,这里记录一个入门过程. 1,首先,下载并安装WinDbg程序 从下面的地址打开:https://msdn.micros

调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置

调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置 调试SQLSERVER (一)生成dump文件的方法调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令 大家知道在Windows里面,调试可以分为两个领域: 1.内核态调试 2.用户态调试 一般的程序都是运行在用户态,包括SQLSERVER,SQLServer 会依赖于操作系统的Win32/Win64 API去调用I/O或者其他他需要的服务 用户态程序调试和内核态程序调试是不太一样的,即使

Windbg调试命令详解

发表于2013 年 8 月 23 日由张佩 转载注明>> [作者:张佩][原文:http://www.yiiyee.cn/Blog] 1. 概述 用户成功安装微软Windows调试工具集后,能够在安装目录下发现四个调试器程序,分别是:cdb.exe.ntsd.exe.kd.exe和Windbg.exe.其中cdb.exe和ntsd.exe只能调试用户程序,Kd.exe主要用于内核调试,有时候也用于用户态调试,上述三者的一个共同特点是,都只有控制台界面,以命令行形式工作. Windbg.exe在

掌握VS2010调试 -- 入门指南

Reference from : http://blog.csdn.net/kingzone_2008/article/details/8133048 1 导言 在软件开发周期中,测试和修正缺陷(defect,defect与bug的区别:Bug是缺陷的一种表现形式,而一个缺陷是可以引起多种Bug的)的时间远多于写代码的时间.通常,debug是指发现缺陷并改正的过程.修正缺陷紧随debug之后,或者说二者是相关的.如果代码中存在缺陷,我们首先要识别造成缺陷的根本原因(root cause),这个过

使用WinDbg调试SQL Server查询

上一篇文章我给你介绍了WinDbg的入门,还有你如何能附加到SQL Server.今天的文章,我们继续往前一步,我会向你展示使用WinDbg调试SQL Server查询需要的步骤.听起来很有意思?我们开始吧! 假设在你面前有个简单的查询,你想在WinDbg里调试那个特定的查询.听起来很简单,但一旦你开始考虑这个问题,就会碰到很多问题: 在我特定执行的查询上,我如何标识出正确的工作者线程? 在sqlservr.exe里,我应该在哪里设置断点? 我们来具体讲解下这2个问题. 标识出正确的工作者线程