使用WinDbg调试入门(内核模式)
设置内核模式调试
内核模式调试环境通常有两台计算机:主机和目标计算机。调试器在主机上运行,正在调试的代码在目标计算机上运行。主机和目标通过调试电缆连接。Windows调试程序支持以下类型的电缆进行调试:
- Ethernet
- USB 2.0
- USB 3.0
- 1394
- Serial (also called null modem)

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

建立内核模式调试会话
在设置好主机和目标计算机并用调试电缆将它们连接起来之后,您可以按照用于设置的同一主题中的说明建立内核模式调试会话。例如,如果您决定设置主机和目标计算机以通过以太网进行调试,参考《通过网线手动设置内核模式调试》。同样,如果您决定设置主机和目标计算机以通过USB 2.0进行调试,您可以找到建立内核模式调试会话的说明,参考《通过USB 2.0电缆手动设置内核模式调试》
开始调试
2、在windbg中,从帮助菜单中选择内容。这将打开调试器文档chm文件。调试程序文档也可以在这里在线获得。
3、当建立内核模式调试会话时,windbg可能会自动进入目标计算机。如果windbg尚未插入,请从“调试”菜单中选择“中断”。
4、在windbg窗口底部附近的命令行中,输入以下命令:

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

6、让目标计算机运行,请输入以下命令:g
7、要再次打断,请从“调试”菜单中选择“打断”。
8、输入此命令以检查NT模块中的_FILE_OBJECT

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

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

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

12、在“视图”菜单上,选择“反汇编”。
13、通过输入以下命令清除断点: bc *
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
23、结束调试会话,请输入以下命令:qd
使用WinDbg调试入门(内核模式)的更多相关文章
- 使用WinDbg调试入门(用户模式)
windbg是一个内核模式和用户模式调试器,包含在Windows调试工具中.在这里,提供个实践练习,帮助我们开始使用windbg作为用户模式调试器. 用WinDbg调试记事本 1.导航到安装目录,然后 ...
- .NET高级调试系列-Windbg调试入门篇
Windbg是.NET高级调试领域中不可或缺的一个工具和利器,也是日常我们分析解决问题的必备.准备近期写2篇精华文章,集中给大家分享一下如果通过Windbg进行.NET高级调试. 今天我们来一篇入门的 ...
- windbg 如何再内核模式调试用户空间的程序
1:使用!process 0 0 获取用户空间的所有的进程的信息 !process 0 0 **** NT ACTIVE PROCESS DUMP **** PROCESS 80a02a60 ...
- 【旧文章搬运】Windbg+Vmware驱动调试入门(四)---VirtualKD内核调试加速工具
原文发表于百度空间,2009-01-09========================================================================== 今天又想起 ...
- 使用WinDbg调试SQL Server——入门
这篇文章我想探究下SQL Server里完全不同的领域:如果使用WinDbg(来自针对Windows的调试工具)调试SQL Server.在我们进入枯涩细节之前,我想详细解释下为什么选择这样晦涩的话题 ...
- Windows内核开发-5-(2)-内核模式调试
Windows内核开发-5-(2)-内核模式调试 普通用户模式的调试,采取的是给进程添加一个线程来挂起断点,作为一个调试器的线程在进程中使用.照这样来类推,对操作系统调试相当于添加一个进程来限制操作系 ...
- ------- 软件调试——挫败 QQ.exe 的内核模式保护机制 -------
------------------------------------------------------------------------ QQ 是一款热门的即时通信(IM)类工具,在安装时刻会 ...
- 【旧文章搬运】Windbg+Vmware驱动调试入门(三)---Windbg基本调试入门
原文发表于百度空间,2009-01-09========================================================================== 这一节的内 ...
- 【旧文章搬运】Windbg+Vmware驱动调试入门(一)---Windbg的设置
原文发表于百度空间,2009-01-08========================================================================== Windb ...
随机推荐
- git学习笔记 ---添加远程库
现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举 ...
- 3.使用 Code First 迁移更新数据库
1.更新 SeedData 类,使它提供新列的值. 示例更改如下所示,但可能需要对每个 new Movie 块做出此更改. context.Movie.AddRange( new Movie { Ti ...
- MongoDB和Java(5):Spring Data整合MongoDB(注解配置)
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...
- Elasticsearch 主要监控指标 -- 描述了es监控的几个维度,相当不错!
转发自:https://blog.csdn.net/majianxiong_lzu/article/details/90437559 主要指标梳理 Cluster Health – Nodes and ...
- js正则表达式【续】(相关字符的解释含义)
1.字符类[直接量] . (点号,小数点) 匹配任意单个字符,但是行结束符除外\d 匹配一个0-9之间的阿拉伯数字.等价于[0-9]\D 匹配任意一个不是0-9之间阿拉伯数字的字符.等价于[^0 ...
- vscode+phpstudy构建php调试环境
由于vs code开源和跨平台,而且插件很多,所以打算以后编写和调试php都用vs code. 配置vs code+phpstudy的php调试环境步骤如下: 1.配置phpstudy,其他选项菜单- ...
- insmod/rmmod
insmod -f 不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入 -k 将模块设置为自动卸除 -m 输出模块的载入信息 -o <模块名称> 指定模块的名 ...
- kindedtor 数据传输问题
<script src="/static/kindeditor/kindeditor-all.js"></script><script src=&qu ...
- vue.js下移动端绑定click事件失效,pc端正常的问题
原因可能是 我在项目中使用到了 better-scroll,默认它会阻止 touch 事件.所以在配置中需要加上 click: true 即可. 例如: mounted () { this.scrol ...
- Docker04-镜像
目录 镜像介绍 获取镜像 案例:获取 redis 5.0.0的镜像 查询本地镜像 搜索镜像 删除镜像 案例:删除redis:latest镜像 镜像加速 镜像介绍 镜像是Docker的三大核心概念之一. ...