第三十篇:Windbg的基础知识

2024-08-29 17:08

本文主要是介绍第三十篇:Windbg的基础知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Windbg是一个非常强大的工具.


刚刚开始,是为了替代SoftICE调试自己开发的AVStream/BDA驱动程序,以及分析由此驱动软件产生的Kernel Dump.


之后,参与xHCI USB3.0/3.1 IP的开发,Windbg主要用来分析该硬件产生的Kernel Dump.

第二篇:欲善其事,先利其器-USB3.0 Kernel debug extension

第五篇:风起于青萍之末-电源管理请求案例分析(上, 中, 下)

第十三篇:无征不信,不信民弗从--USB-IF官方驱动BSOD案例分析

这五篇博文是对其中几个实例的分析过程。


最近,参与了一个用户模式的DLL的开发,虽然是用户模式的DLL,但由于涉及到显示驱动、显示后台服务程序方面的相关联的操作,于是,又开始使用了Windbg.

通过Windbg的NET方式双机调试DLL。

使用Windbg来分析DLL产生的user mode application dump.

以及通过Windbg来产生kernel dump,以便进一步分析显示服务&DLL crash时的系统状态与原因。


Windbg调试在实际工作中的需要,加上朋友的推荐, 买了两本张银奎的调试方面的书籍

《Software debugging》, 《格蠹汇编》, 有兴趣的朋友,可以借以参考。


这篇博文,主要将一些基本概念作一梳理:

第一方面,关于modes与targets

大家在看Windbg的帮助文档的时候,每一条命令都会包括modes, targets.

这里所说的modes包括user mode与kernel mode。

典型的user mode为,在Windbg--> File--> Open Executable与Windbg-->File-->Attach to a Process, 调试目标(debugee)是应用程序,此时调试器(debugger)运行在user mode下。

所有双机调试(包括USB2,USB3,1394,NET,COM)以及Local(debugger, debugee运行在同一系统中)都是在kernel mode下。

注:本人没用过虚拟机的双机调试


kernel mode与user mode的差别:

部分命令只能运行在KERNEL MODE,部分命令只能运行在USER MODE, 还有其它部分则在两种MODE下都能运行。

除了Local kernel mode debug(另当别论,可以认为是双机调式下的KERNEL MODE的一个子集功能), 其它双机联调方式在目标系统中断到调试器后,则整个目标系统都处于停止状态; 而user mode下针对于一个Application的调试,在目标进程中断到调试器时,只是调试目标处于停止状态,系统中的其它进程仍然在正常运行。


再说一下Targets

这里所指的targets可以分成两类

一类为live,另一类为crash dump.

所谓的live,则包括了双机调试,local kernel debug, 与user mode debug, 可以理解为一个动态的概念。

而crash dump,无论是kernel dump,还是user application dump,都归到crash dump一类,这是对静态系统的分析。


第二,关于32bit与64bit Windbg的使用选择。

这里参照Windbg帮助文档的:

Choosing the 32-Bit or 64-Bit Debugging Tools

Host computer running a 32-bit version of Windows

If your host computer is running a 32-bit version of Windows, use the 32-bit debugging tools. (This situation applies to both x86-based and x64-based targets.)

x64-based host computer running a 64-bit version of Windows

If your host computer uses an x64-based processor and is running a 64-bit version of Windows, the following rules apply:

  • If you are analyzing a dump file, you can use either the 32-bit debugging tools or the 64-bit debugging tools. (It is not important whether the dump file is a user-mode dump file or a kernel-mode dump file, and it is not important whether the dump file was made on an x86-based or an x64-based platform.)

  • If you are performing live kernel-mode debugging, you can use either the 32-bit debugging tools or the x64 debugging tools. (This situation applies to both x86-based and x64-based targets.)

  • If you are debugging live user-mode code that is running on the same computer as the debugger, use the 64-bit tools for debugging 64-bit code and 32-bit code running on WOW64. To set the debugger for 32-bit or 64-bit mode, use the .effmach command.

  • If you are debugging live 32-bit user-mode code that is running on a separate target computer, use the 32-bit debugging tools.


这里作了比较清楚的说明,首先,如果主机运行的是32位WINDOWS系统,则只有X86 WINDBG可以使用。

如果主机是X64 CPU, 而且运行的是64位WINDOWS系统(X86硬件不能安装64位系统,但X64硬件可以安装32位系统),则有如下情况:

对于dump file分析,无论该DUMP FILE是KERNEL还是USER, 也不管该DUMP产生的目标机是X86还是X64(这个PLATFORM如何理解?), X86 X64 WINDBG都可以用来分析该DUMP.

对于live kernel mode, 也是不管目标是X86还是X64(这个TARGETS如何理解?),都可以使用。

对于live user mode, 使用64 WINDBG调试64BIT代码(与运行在WOW64位上的32BIT代码),使用32 WINDBG调试运行在目标机上的32BIT代码。


不过,按照实际的试验,存在以下有待考证的地方:

1. 在LOCAL KERNEL DEBUG情况下, 笔者的主机是WIN7 64系统, 笔者发现,只能运行X64, 不能运行X86。(与上文第二点有出入)

2. 在WIN7 64系统下,USER MODE DEBUGGING, 无论是X86还是X64 WINDBG都可以调试Windows/system32目录下的calc.exe.(与上文第三点有出入)








这篇关于第三十篇:Windbg的基础知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1118457

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

计组基础知识

操作系统的特征 并发共享虚拟异步 操作系统的功能 1、资源分配,资源回收硬件资源 CPU、内存、硬盘、I/O设备。2、为应⽤程序提供服务操作系统将硬件资源的操作封装起来,提供相对统⼀的接⼝(系统调⽤)供开发者调⽤。3、管理应⽤程序即控制进程的⽣命周期:进程开始时的环境配置和资源分配、进程结束后的资源回收、进程调度等。4、操作系统内核的功能(1)进程调度能⼒: 管理进程、线

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

关于回调函数和钩子函数基础知识的整理

回调函数:Callback Function 什么是回调函数? 首先做一个形象的比喻:   你有一个任务,但是有一部分你不会做,或者说不愿做,所以我来帮你做这部分,你做你其它的任务工作或者等着我的消息,但是当我完成的时候我要通知你我做好了,你可以用了,我怎么通知你呢?你给我一部手机,让我做完后给你打电话,我就打给你了,你拿到我的成果加到你的工作中,继续完成其它的工作.这就叫回叫,手机

有关机械硬盘的基础知识

1,机械硬盘的品牌   目前市场中常见的笔记本电脑的机械硬盘品牌主要有希捷、西部数据、三星等。   2,机械硬盘的容量   硬盘容量,即硬盘所能存储的最大数据量。虽然笔记本电脑硬盘的容量会因单位密度的提升而增加,不过和台式电脑的大容量比起来,笔记本电脑硬盘的容量仍然落后许多。笔记本电脑的硬盘除了对磁盘有体积较小和数量较少的要求之外,对功耗、耐用程度、抗震性及成本等的考虑,也让笔记

OpenGL ES学习总结:基础知识简介

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库。 为桌面版本OpenGL 的一个子集。 OpenGL ES管道(Pipeline) OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工

计算机基础知识复习9.6

点对点链路:两个相邻节点通过一个链路相连,没有第三者 应用:PPP协议,常用于广域网 广播式链路:所有主机共享通信介质 应用:早期的总线以太网,无线局域网,常用于局域网 典型拓扑结构:总线型 星型(逻辑总线型) 介质访问控制  静态划分信道 信道划分介质访问控制 频分多路复用FDM 时分多路复用TDM 波分多路复用WDM 码分多路复用CDM 动态分配信道 轮询访问介质访问控

Gitflow基础知识

0.理想状态 现状 听完后的理想状态 没使用过 git 知道 git 是什么,会用 git 基础流程命令 用过 git,但只通过图形化界面操作 脱离图形化界面操作,通过 git 命令操作 会 git 命令 掌握 gitflow 规范,合理使用 rebase 和解决代码冲突问题 1.Git 的基础流程&命令 1.1 基础概念 工作区:代码生产基地,pycharm

[JAVA基础知识汇总-1] 创建线程的几种方式

文章目录 1. 继承Thread类2. 实现Runnable接口3. 实现Callable接口4. 线程池 可以认为有四种方式,也可以认为有一种,因为都跟Runnable接口有关 1. 继承Thread类 代码 public class Thread1ExtendsThread extends Thread {// public Thread1(String n