使用Windbg调试内核
Windbg是微软开发的免费源码级调试工具。Windbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。
1.从http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx下载Install
Debugging Tools for Windows 32-bit Version
2.从http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx下载Windows
Symbol Packages,安装到D:\Program Files\Symbols
3.启动Windbg,File->Symbol
File Path填写以上Symbols安装路径:
D:\Program Files\Symbols
4.File->Kernel Debug->Local,在下面执行lkd>
!process出现以下错误:
NT symbols are incorrect, please fix symbols
这个可能是D:\Program
Files\Symbols\exe\ntoskrnl.pdb破损所致。
解决方案:将第3步中的Symbol
File Path填写为:
D:\Program Files\Symbols;
SRV*D:\Program Files\Symbols*http://msdl.microsoft.com/download/symbols
按照这样设置,WinDbg将先从本地文件夹D:\Program
Files\Symbols中查找Symbol,如果找不到,则自动从MS的Symbol
Server上下载所需要的Symbol,并且在本地D:\Program
Files\Symbols文件夹下维持一份拷贝。
5.内核调试
FileàOpenExecutableà可以选择一个可执行文件进行调试;
FileàAttache
to a Processà可以选择一个运行中的进程,并对其进行调试;
FileàKernel
DebugàLocalà可以选择本地内核调试。
一旦连接到了内核调试模式中,你可以使用众多的内核扩展命令(以“!”开头)来显示内核数据结构的内容。
6.用内核扩展命令查看常见内核对象数据结构(每条命令以分号隔开)
(1)进程:lkd> !process
[0 0];dt nt!_eprocess;dt
nt!_kprocess;
(2)线程:lkd> !thread;dt
nt!_ethread;dt nt!_kthread;
(3)I/O请求包:lkd> dt
nt!_irp;!irpfind;
(4)常见同步对象:lkd> dt
nt!_kevent;lkd> dt
nt!_kmutant;lkd> dt
nt!_ksemaphore;
(5)作业:lkd> !job;会话(lkd> !session);内存管理(lkd> !vm)的命令等。
显示内核符号中所包含的类型信息的内核结构列表àlkd> dt
nt!_*,若需递归显示子结构请使用“-r”开关。在.hh后面添加关键字,将显示该命令的帮助,例如:lkd>.hh
irp。
详情参考:Debugging Tools For Windows help referenceàDebuggersàDebugger
ReferenceàDebugger Extension Commands。
下图是内核模式调试显示I/O完成端口IO_COMPLETION_CONTEXT数据结构和进程控制块。

有兴趣的可以参考以下文章,进一步学习Debugging Tools for Windows.
《Windbg配置和使用基础》
http://hi.baidu.com/estellejiang/blog/item/34d308fab249078a9f514638.html
《使用Windbg调试程序》
http://hi.baidu.com/cppiod/blog/item/58efaf86eb696d3f67096ec2.html
《用Windbg调试一个Windows自带扫雷程序的逻辑bug》
http://blog.csdn.net/v_jzho/archive/2008/10/03/3014681.aspx
《windbg调试实例(4)--句柄泄露》
http://www.cnblogs.com/vivilisa/archive/2009/04/16/1437529.html
使用Windbg调试内核的更多相关文章
- xp+WinDBG+VMware调试内核
呵呵,搞点突兀的标题而已.其实说的还是如何使用WinDBG和VMware来搭建调试内核的环境而已,这些网上已经有数不清的教程了,不过我喜欢自己亲手写一下.第一,把这个过程写一遍能加深印象,就算以后忘记 ...
- 使用WinDbg调试入门(内核模式)
windbg是一个内核模式和用户模式调试器,包含在Windows调试工具中.这里我们提供了一些实践练习,可以帮助您开始使用windbg作为内核模式调试器. 设置内核模式调试 内核模式调试环境通常有两台 ...
- 内核,配置WinDbg,调试操作系统(双机调试)
配置WinDbg,调试操作系统(双机调试) PS: 设置双机调试之前,请先安装虚拟机,并且安装好XP系统.这里不做演示.直接设置. 一丶WinDbg的设置 1) 配置WinDbg的环境,在path变量 ...
- 64位内核开发第六讲,Windbg调试ring3跟Ring0.一起调试
目录 驱动第六讲_Windbg连续调试Ring3.与Ring0 一丶Windbg连调试 驱动第六讲_Windbg连续调试Ring3.与Ring0 一丶Windbg连调试 有时候我们调试一个程序.可以使 ...
- 调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令
调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令 调试SQLSERVER (一)生成dump文件的方法调试SQLSERVER (二)使用Windbg调试SQLSERVER ...
- 调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置
调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置 调试SQLSERVER (一)生成dump文件的方法调试SQLSERVER (三)使用Windbg调试SQLSERVER ...
- 使用WinDbg调试SQL Server——入门
这篇文章我想探究下SQL Server里完全不同的领域:如果使用WinDbg(来自针对Windows的调试工具)调试SQL Server.在我们进入枯涩细节之前,我想详细解释下为什么选择这样晦涩的话题 ...
- WinDbg调试流程的学习及对TP反调试的探索
基础知识推荐阅读<软件调试>的第十八章 内核调试引擎 我在里直接总结一下内核调试引擎的几个关键标志位,也是TP进行反调试检测的关键位. KdPitchDebugger : Boolean ...
- WinDbg调试命令汇总
一. 1. !address eax 查看对应内存页的属性 2. vertarget 显示当前进程的大致信息 3 !peb 显示process Environment Block 4. lmvm 可以 ...
随机推荐
- C#接口的作用实例解析
一.接口的作用: 我们定义一个接口: public interface IBark { void Bark(); } 1. 再定义一个类,继承于IBark,并且必需实现其中的Bark()方法 pub ...
- 【基础】Pipeline
1. 参考的优秀文章 Request/Response protocols and RTT 2. 来源 原来,系统中一个树结构的数据来源是Redis,由于数据增多.业务复杂,查询速度并不快.究其原因, ...
- 二维差分前缀和——cf1202D(好题)
直接枚举每个点作为左上角是可以做的,但是写起来较麻烦 有一种较为简单的做法是对一列或一行统计贡献 比如某一行的B存在的区间是L,R那么就有三种情况 1.没有这样的区间,即一行都是W,此时这行对答案的贡 ...
- go指定分隔符格式化时间
一.代码 package main import ( "fmt" "strings" "strconv" "time" ...
- ()centos7 安装python36
centos7 默认安装 python2.7 1.先安装python36和对应pip yum install python-pip #安装python2的pip yum install python3 ...
- Java学习之集合(List接口)
List特有的常见方法:有一个共性特点:都可以操作角标 1.添加 void add(int index, E element); void addAll(int index, collection& ...
- samba环境部署
安装samba yum install -y samba samba-client vim /etc/samba/smb.conf (共享一个目录,任何人都可以访问但不能写修改) workgroup ...
- 利用OpenFileDialog 获取图片存储到数据库中
private void button1_Click(object sender, EventArgs e) { string fName; ...
- js基本包装类型
基本包装类型 3种特殊的引用类型 为了便于操作基本类型值,es还提供了3种特殊的引用类型: Boolean,Number,String. 每当读取一个基本类型值的时候,后台就会创建一个对应的基本包 ...
- python接口自动化(post请求)
python接口自动化(post请求) 一.post请求的作用:新增资源 二.data格式的参数请求(data是字典对象) #1.导包 import requests #2.调用post方法 #请求的 ...