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调试内核的更多相关文章

  1. xp+WinDBG+VMware调试内核

    呵呵,搞点突兀的标题而已.其实说的还是如何使用WinDBG和VMware来搭建调试内核的环境而已,这些网上已经有数不清的教程了,不过我喜欢自己亲手写一下.第一,把这个过程写一遍能加深印象,就算以后忘记 ...

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

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

  3. 内核,配置WinDbg,调试操作系统(双机调试)

    配置WinDbg,调试操作系统(双机调试) PS: 设置双机调试之前,请先安装虚拟机,并且安装好XP系统.这里不做演示.直接设置. 一丶WinDbg的设置 1) 配置WinDbg的环境,在path变量 ...

  4. 64位内核开发第六讲,Windbg调试ring3跟Ring0.一起调试

    目录 驱动第六讲_Windbg连续调试Ring3.与Ring0 一丶Windbg连调试 驱动第六讲_Windbg连续调试Ring3.与Ring0 一丶Windbg连调试 有时候我们调试一个程序.可以使 ...

  5. 调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令

    调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令 调试SQLSERVER (一)生成dump文件的方法调试SQLSERVER (二)使用Windbg调试SQLSERVER ...

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

    调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置 调试SQLSERVER (一)生成dump文件的方法调试SQLSERVER (三)使用Windbg调试SQLSERVER ...

  7. 使用WinDbg调试SQL Server——入门

    这篇文章我想探究下SQL Server里完全不同的领域:如果使用WinDbg(来自针对Windows的调试工具)调试SQL Server.在我们进入枯涩细节之前,我想详细解释下为什么选择这样晦涩的话题 ...

  8. WinDbg调试流程的学习及对TP反调试的探索

    基础知识推荐阅读<软件调试>的第十八章 内核调试引擎 我在里直接总结一下内核调试引擎的几个关键标志位,也是TP进行反调试检测的关键位. KdPitchDebugger : Boolean ...

  9. WinDbg调试命令汇总

    一. 1. !address eax 查看对应内存页的属性 2. vertarget 显示当前进程的大致信息 3 !peb 显示process Environment Block 4. lmvm 可以 ...

随机推荐

  1. MySql中创建用户,授权

    第一天搞MySql好多东西都不会,幸好有网络的强大资源,首先需要注意的是任何一条sql语句都是要以分号结尾的,不然很是蛋疼的 1.新建用户. //登录MYSQL @>mysql -u root  ...

  2. 基础(一):SCSI硬盘与IDE硬盘有什么区别

    硬盘接口是硬盘与主机系统间的连接部件,作用是在硬盘缓存和主机内存之间传输数据.不同的硬盘接口决定着硬盘与计算机之间的连接速度,在整个系统中,硬盘接口的优劣直接影响着程序运行快慢和系统性能好坏.从整体的 ...

  3. hive UDAF开发和运行全过程

    介绍 hive的用户自定义聚合函数(UDAF)是一个很好的功能,集成了先进的数据处理.hive有两种UDAF:简单和通用.顾名思义,简单的UDAF,写的相当简单的,但因为使用Java反射导致性能损失, ...

  4. BZOJ 1565: [NOI2009]植物大战僵尸(网络流+缩点)

    传送门 解题思路 最大权闭合子图.但是要注意一些细节,假如有一堆植物形成一个环,那么这些植物都是无敌的,并且他们保护的植物是无敌的,他们保护的保护的植物是无敌 的.所以要缩点,然后拓扑排序一次判无敌, ...

  5. NX二次开发-基于MFC界面对话框与NX交互的开发

    打开VS2013 点击新建,选择MFC DLL 点击确定 点下一步 什么都不改,直接点完成 进来之后先编译一下,看是否编译成功 打开项目属性,更改这几处 $(UGII_BASE_DIR)\ugopen ...

  6. Linux-vim编辑器 常用命令 复制粘贴

    Linux-vim编辑器 一.vim三种工作模式 1.1.命令模式 在此模式下,可以使用上.下.左.右键或者 k.j.h.l 命令进行光标移动,还可以对文件内容进行复制.粘贴.替换.删除等操作. 1. ...

  7. css 导航样式

    html  结构 <div class="nav-menu float-r"> <ul class="menu-item"> <l ...

  8. linux下根据根据进程号查端口、根据端口号查进程号汇总,以及netstat的相关资料(工作中匮乏的知识)

    根据端口查进程: lsof -i:port netstat -nap | grep port 根据进程号查端口: lsof -i|grep pid netstat -nap | grep pid 根据 ...

  9. 函数的四种调用模式.上下文调用.call.apply

    闭包:函数就是一个闭包,一个封闭的作用域;         返回函数,要返回多个函数就用一个对象封装一下,         立即执行函数+return 回调函数   JS动态创建的DOM,不会被搜索引 ...

  10. Bagging vs Boosting vs Stacking

    原文地址:https://www.jianshu.com/p/9dacdc88d3ec Bagging 用于减小方差. 使用训练数据的不同随机子集(大小常等于训练数据,采用不放回的方式进行抽取)来训练 ...