S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
      放假回家就下定决心要把windbg搞定 否则以后的内核之路该咋走啊~呵呵 今天就网上零零碎碎的记了些命令用法  看了别人的调试教程
个人总结下

----------------------------------------------------------------------------
!drvobj 你的驱动对象 [标志位]
说明:这个指令可以查看驱动对象的具体信息 我们知道每个驱动程序在内核中都会对应一个驱动对象的结构,其实上面所说的驱动对象就是你的驱动名字,比如我要找aynet.sys这个驱动程序的驱动对象结构,那么我就!drvobj aynet 就好啦~
标志位是用来告诉windbg具体要显示什么内容的,标志位可以组合使用
Bit 0 (0x1)
显示所有跟这个驱动对象相关联的设备对象信息
Bit 1 (0x2)
显示所有跟这个驱动想关的派遣例程信息
Bit 2 (0x4)
显示这个驱动对象的详细信息 (需要标志位0)
ps: !object 可以查看对象的详细信息 比如该内核对象是什么内核对象(文件,进程等)
类似用法还有!handle(就是!后面跟结构名)等等
----------------------------------------------------------------------------
dt name
说明:dt用来查看本地|全局|结构变量内容的 , name是指你的变量类型是什么,你要看_DEVICE_OBJECT这个结构变量就直接打 dt _DEVICE_OBJECT  查看变量就直接输变量名
----------------------------------------------------------------------------
下面说说下断点的指令
bp 地址
在地址处下断点 也可以是函数名(其实函数名就对应着地址)
打个比方bp aynet!DriverEntry 说明在aynet这个驱动程序的driverentry函数处下断 也就是程序一执行到这里windbg就自动断下来了
还有个bu指令 延迟下断点 格式跟bp差不多

bm 匹配值
bm指令用于匹配模式下断点 比如说bm aynet!Driver* 可以把aynet驱动下所有跟Driver* 模式匹配的函数断下 但是注意~需要符号表的支持

ba 变量名
可以对内存访问下断点 比如说你程序里有个aynet驱动程序a变量,总被莫名其妙的修改了,那么你可以设置 ba aynet!a ,当这个a值被修改的时候就可以被windbg断下来了

还有其他常用命令比如
BL(List)列举断点,BC(Clear)清除断点,BE(Enable)启用断点,BD(Disable)禁止断点
这些很简单 就不累述了
----------------------------------------------------------------------------
注:一下指令区分大小
显示内存数据相关指令
格式:d[*] 变量名/地址
da--asc字符显示
db--byte&asc字符显示
dc--双字节&asc字符显示
dd--双字节变量显示
dD--双精浮点数显示
df--单精浮点数显示
dp--四字节数值显示
du--unicode字符显示
dw--字符(2个字节)显示
dW--字符和asc字符显示
dyb--二进制显示
dyd--二进制和双字节显示
举个例子:(注:xx是变量名 )
kd> dd xx      //双字节显示(即16进制)
8055b260  610f0f64 00000002 00000000 00000000
8055b270  00000000 00000000 00000000 00000000
8055b280  00000000 00000000 00000000 00000000
8055b290  00000000 00000000 00000000 00000000
8055b2a0  00000000 00000000 00000000 00000000
8055b2b0  00000000 00000000 00000000 00000000
8055b2c0  00000000 00000000 00000000 00000000
8055b2d0  00000000 00000000 00000000 00000000
kd> da xx  //asc字符显示
8055b260  "`."
kd> du xx  //unicode字符显示
8055b260  "..."

附加:
dv
查看本地变量用~

看内存内容的时候就会用到这个命令了~呵呵
----------------------------------------------------------------------------
今天就学了这么多
剩下的明天在看 呵呵
下次要说的内容是
堆栈显示指令kb , kp, kP , kv
反汇编指令 u,uf
跟踪指令 T,TA,TB,TC
执行相关指令 P,PA,PC
跟踪查看指令 WT
先记下来~省的我忘了~
要调试也就大概就用到这些命令了吧 以后就开始记我的调试过程了~


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理