第三十篇: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.(与上文第三点有出入)

时间: 2024-08-25 16:13:42

第三十篇:Windbg的基础知识的相关文章

【算法?日更?第三十三期】网络流基础知识(最大流)

▎写在前面 小编早就听说过了网络流这种神奇的东西,一直以为很高端大气上档次,但是很难,就没学. 今日一见也不过如此,一点也不高端,不大气,不上档次. ▎网络流 ?『定义』 网络流(network-flows)是一种类比水流的解决问题方法,与线性规划密切相关.网络流的理论和应用在不断发展,出现了具有增益的流.多终端流.多商品流以及网络流的分解与合成等新课题.网络流的应用已遍及通讯.运输.电力.工程规划.任务分派.设备更新以及计算机辅助设计等众多领域.(copy自百度) ?『介绍』 其实上面的度娘写

自了法师全集 | 无量寿经科注第四回学习班分享三十篇

释自了法师 净土指归 1月28日 南无阿弥陀佛 欢迎点击上方关注“净土指归” 自了法师 无量寿经科注第四回学习班分享三十篇全集 目录 生死心不切,若真为生死之心不发,一切开示皆为戏论 凡修净业,以决志求生西方为本 佛一边念,生死爱根一边长 重新认识净土法门 时时作临终想 念佛法门,首为凡夫 常念不绝,则得道捷 日暮途远 摄耳谛听 历代祖师示真信切愿 是心是佛,是心作佛 印光大师述<无量寿经>缘起 都摄六根,净念相继 欲报亲恩唯念佛 ——浅谈祭祖最重要的内涵 不信佛.不信佛力 ——从占察忏现象引

NodeJs&gt;-------&gt;&gt;第三章:Node.js基础知识

第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info  方法 1 console.log("this is a test string."); 1 node app1.js 1> info.log 1 console.log("This is a test String ."); 2 3 //从第二个参数开始,依序输出所有的字符串 4 console.log("%s","

Python黑帽编程3.0 第三章 网络接口层攻击基础知识

3.0 第三章 网络接口层攻击基础知识 首先还是要提醒各位同学,在学习本章之前,请认真的学习TCP/IP体系结构的相关知识,本系列教程在这方面只会浅尝辄止. 本节简单概述下OSI七层模型和TCP/IP四层模型之间的对应关系,最后是本章教程需要的几个核心Python模块. 3.0.1 TCP/IP分层模型 国际标准化组织(ISO)在1978年提出了"开放系统互联参考模型",即著名的OSI/RM模型(Open System Interconnection/Reference Model).

[WebGL入门]三,3D绘图的基础知识

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 二维和三维 三维空间--我们生活这个这个现实的世界就是一个三维空间. 在三维的世界里,所有的东西都由横,竖,深度.将这些东西重现,就是一个实时3D渲染.但是再现这个3D空间,我们是在一个2D的显示器上来实现的. 电脑和手机的屏幕,都是一个2D的显示器.至少现在还没有一个3D的显示设备,当然,研

【WPF学习】第三十六章 样式基础

原文:[WPF学习]第三十六章 样式基础 前面三章介绍了WPF资源系统,使用资源可在一个地方定义对象而在整个标记中重用他们.尽管可使用资源存储各种对象,但使用资源最常见的原因之一是通过他们的保存样式. 样式是可应用于元素的属性值集合.WPF样式系统与HTML标记中的层叠样式表(Cascading Style Sheet,CSS)标准担当类似的角色.与CSS类似,通过WPF样式可定义通用的格式化特性集合,并且为了保证一致性,在整个应用程序中应用他们.与CSS一样,WPF样式也能够自动工作,指定具体

Web学习篇之---html基础知识(一)

html基础知识(一) 本篇文章主要介绍HTML头部所包括的信息. 一.下面都是在标签<head>...</head>之间的内容: 1.<title>-</title> 标题元素,帮助用户更好识别文件,有且仅仅有一个.当作为首页或收藏时做文件名称. 2.<link>-</link> 显示本文档和其他文档之间的关系:<link rel="stylesheet" href="example.css&qu

iOS开发——总结篇&amp;IOS开发基础知识

IOS开发基础知识 1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例 实例一: Person *person = [[Person alloc] init]; //父

php高级进阶系列文章--第二篇(PHP基础知识复习)

php基础知识复习 本文中对于简单的知识点只会提及一下(例如什么控制结构什么的),对于较有难度的详细复习下(例如面向对象的反射等等) 再次申明,本系列文章不是从最基础的开始复习,对于零基础的可能不适用,本文的初衷是我要准备攻读源码,在攻读前将之前的知识牢固下,太过简单的就写在文中了 1,echo print echo 可以输出一个或者多个字符串 print 只可以输出一个字符串,返回值总为1 2,PHP7中的组合比较符 echo 1 <==> 1 // 0 echo 1 <==>

php高级进阶系列文章--第五篇(redis基础知识复习)

在实际工作中不仅需要使用到非常重要的关系型数据库mysql,同时也需要使用到redis,memcached,mongodb等进行数据存储,完成特定的产品需求,本节先复习redis的基础知识,高深部分后续会继续探讨 1,redis与其他的key-value形式缓存数据库的特点: 支持数据持久化,将内存中的数据保存到磁盘中,重启的时候再次加载进行使用 redis不仅有key-value格式的数据,同时也有list,set,zset,hash格式的数据结构存储数据 redis支持数据的备份,即Mast