WinDbg调试手册

来源:互联网 发布:vue.js radio默认选中 编辑:程序博客网 时间:2024/06/13 04:53
https://bbs.pediy.com/thread-178808-2.htm    ---看雪的windbg调试手册
http://blog.csdn.net/wangningyu/article/details/6748138   ----程序异常收集代码

https://msdn.microsoft.com/en-us/library/cc704588.aspx   ---所有内核错误码对照

http://blog.csdn.net/lixiangminghate/article/details/52232285  --解决win7/win8.1 驱动调试KdPrint不能输出的问题

http://blog.csdn.net/keidoekd2345/article/details/50125747  ---Windbg调试命令详解

http://blog.csdn.net/chenlycly/article/details/37912755   ----堆栈调试基础,讲解的很详细
http://blog.csdn.net/wangyezi19930928/article/details/16921927     ----Linux下的函数调用栈分析
--------------------------------------------
设置条件断点:
简单设置:
bp CSFDrv!PfpCommonCreate+0x14d2 ".if(bFirstOpen<7) {.echo \"Breakpoint hit, condition myVar\"};gc;" ---表示满足条件bFirstOpen值小于7,打印,然后gc表示断点继续运行,这个例子断点是不会停的
bp CSFDrv!PfpCommonCreate+0x14d2 ".if(bFirstOpen==0) {.echo \"Breakpoint hit, not first open!\"}.else{.echo\"first open\";gc;}"  ---->注意红色的语法
bp CSFDrv!PfpCommonCreate+0x14d2 "dt FileFullPath;gc;}"   ---直接打印有具体类型的值,FileFullPath, 然后不断,继续执行,查看FileFullPath的值变化

-----------------------------------------
!Analyze   -v
!sym noisy    ---重新检测符号表 
.reload   ---重新
lm   ----列出当前系统加载的模块
x Filesfilter!Driver*       ----列出该驱动的函数查找
k*命令显示给定线程的调用堆栈,
u 查看汇编 例如: kd> u ffffffff9551e350
.reload /f Filesfilter.sys    ---强制重载
.frame 0   ---切换堆栈

设置断点
1: kd> bp Filesfilter!DriverEntry      -----该断点没效,因为bp需要在运行的时候才可以设置
1: kd> g
bl   ---显示所有断点
bc 0 1 2   ----删除断点    cancel, 不可恢复
bd 0-2    ---取消0-2的所有断点,包含0和2
be 3     ---恢复3号断点      

bu  Filesfilter!DriverEntry     ---------可以不运行就设置断点

dv /V VariableName    ---指定查看的变量名称, 变量的结构也已经有显示了。 display value

dt Filesfilter!gSFilterDriverObject    ----显示该模块的全局变量, dt 是display type的缩写

------------------------------------------------------------------------
.open -a funcGetProcessInfoForCurProc    ---- 打开源码文件,并直接定位找到funcGetProcessInfoForCurProc位置
.open -a TestDrv!DeviceIoControl   ----也可以这样打开
du poi(ptrbuffer)    -----Poi操作符在WinDBG中可以被用来对指针进行解引用. 类似C语言中对指针的操作符*
dd ptr   ---显示内存地址信息,有点类似gdb的p /x ptr 

dt type addr ---给地址以type的结构强转显示

!handle   ---显示所有系统句柄


------------------------------------------------------------------------
  • .cls     ---清屏命令
  • uf 函数名称 ----反汇编
  • x  *!*NtCreateFile*    ---符号全局搜索(/f:将只显示函数符号;并且会显示函数的详细定义)
  • ln 7c8179f0     ----(根据给定的地址)列出附近一定范围内的所有符号

  • d /p [地址范围]     ----此选项用来显示物理内存信息,只能用于内核模式中
  • dt [结构体]    ---查看结构体信息

查看结构体

dt -v _tagPfpProcessInfo----查看结构信息,struct的定义,不能是typedef的!
?? sizeof(_tagPROCESSINFO)   ----查看结构大小
dx pProcessInfo->ProcessHashValue   ----------查看某个变量值
dv -------显示所有变量值

5.1 查看内存

            有非常丰富的内存查看命令,它们被统一为d*格式,如下所示:

  • d[类型]  [地址范围]

            d代表Display,类型包括:字符、字符串、双字等。具体来说,d*命令共有这几种:d、 da、db、dc、dd、dD、df、dp、dq、du、dw、dW、dyb、dyd、ds、dS。解释如下:

内存类型 

基本类型

  • dw = 双字节WORD格式;
  • dd = 4字节DWORD格式 ;
  • dq = 8字节格式;
  • df = 4字节单精度浮点数格式;
  • dD =8字节双精度浮点数格式;
  • dp = 指针大小格式,32位系统下4字节,64位系统下为8字节。

基本字符串

  • da = ASCII字符串格式;
  • du = UNICODE字符串格式;
  • db =字节 + ASCII字符串;
  • dW = 双字节WORD + ASCII字符串;
  • dc = 4字节DWORD + ASCII字符串。

高级字符串:

  • ds = ANSI_STRING类型字符串格式;
  • dS = UNICODE_STRING类型字符串格式。

二进制 + 基本类型

  • byb = 二进制 + 字节;
  • byd = 二进制 + DWORD值


工具:
http://www.dependencywalker.com/    ---查看依赖关系
winobj   ----------查看所有的设备
调试:
打开vmmonitor.exe, 注意windbg窗口不能经常关闭,要重新设置路径。
注意: 每次更新驱动,一定要重新安装,即确保widows\system\driver下的驱动文件是最新的,再sc start Drvier
SRV*d:\localsymbols*http://msdl.microsoft.com/download/symbols;;D:\Work\code\testProject\filefilterDrvier\Debug

D:\Work\code\testProject\filefilterDrvier\FileSfilter

使用可视化的查看local变量,watch之类的

参考:
http://blog.csdn.net/AloneSword/article/details/3696839
原创粉丝点击