windbg常用命令1

!PROCESS 0 1 explorer.exe  !process 2f72 1和!process 81b3a980 1 结果1一样  (2f72是explorer的PID

 

bp /p 820dbbe0 win32k!xxxxx

/t 就是线程

 

bp win32k!xxxxxx"

.if(@$tpid != 0x999) {

g;

}

"

 

 

bu kernel32!LoadLibraryExW ";as /mu ${/v:MyAlias} poi(@esp+4); .if ( $spat( \"${MyAlias}\", \"*MYDLL*\" ) != 0 ) { kn; } .else { g }"

 

1. $t-$t19 伪寄存器 使用 r $t0=123 /r? $t0=123 前者的$t0是默认整形,后者是自动获取类型

 

2. &可以用来取变量地址,例如r? $t1=&@$peb->ldr ,这样$t1就是ldr变量的地址(不是值)

 

3. dt 用来显示一个结构例如dt -r1 nt!_EPROCESS ,其中r是用用显示其下的子结构

dt  nt!_EPROCESS -y ActiveProcess用来显示指定字段

dt l 用来显示链表,复杂,后面补上

 

4. !address xxx显示指定地址的内存类型,不指定地址参数则显示整个地址空间

 

 

5。修改内存(字符串)  ea eu eza ezu xxxx "ffff",有没z的区别是不会自动在末尾补0。修改数值命令: eb ed eq

 

6。搜索

字符串(任意) s -[l33]sa startaddress llength ,搜索随意字符串,其中[l33]可以省略,省略后默认的长度好像是4个字节

搜索指定字符串,其中-a是批ascii,-u就是unicode

0:000> s -a 400000 l123 "MZ"

00400000  4d 5a 90 00 03 00 00 00-04 00 00 00 ff ff 00 00  MZ........

 

搜索数值的有和上者一样,不过是-a 换成-d -b 或者-w

7。显示字符串

du 或者da显示一般的unicode和ascii类型字符串

dS和ds分别显示Unicode_String和string类型

 

8。显示数值的我一般用dps,dd ,!dd ,db,dps会像栈一样显示,一行4个字节,显示栈esp的时候有意思,其它的容易了!dd是显示物理内存

(补:poi用于取指针的值,这是有符号的

 

9。~显示当前进程所有线程,~1 n 挂起1号线程,n换成m就是唤醒线程 ,换成g,运行指定的线程(当所有线程挂起时)

 

10。bl显示断点列表,bc清除断点 bc 1 清除1号断点,bc *清除所有断点 bc 0-2,4清除0,1,2和4号断点,还有 be bd分别用于激活和禁止断点

 

11。下断点:

针对线程断点~0 bp xxxx针对0号线程,这个是用户程序调用才有的。

内核中是用/p和/t来指定的,如bp /p 0x8231231 NtOpenProcess,则当EPROCESS为0x8231231 的程序经过ntOpenProcess时就断下

 

ba r1    ba e    ba w1 分别用来读,执行,写断点.有个叫做一次命中断点的是 bp /1 NtOpenProcess,命中后就清除这个断点,不晓得有什么用,手工删除不就行了吗?

 

bu module!xxxx这个断点可以用来下断指定模块的函数,本质区别是这个module还没加载的时候也可以下断

 

12。条件执行        ——有此后面可以加个数字参数,意思是命中多少回才中断下来,默认是1

p 单步步过    (后面加L参数可以去掉每一步都显示寄存器状态

t 单步步入

pa 123 单步执行到123

pc 执行到call指令停止

pt 执行到返回指令

tb 执行到分支    只能用于内核

gu 执行到函数返回

wt指令可以统计一个函数执行过的轨迹

 

 

 

13。ln 3123123用来搜距离地址最近的符号    ,x nt!*    用于显示符号,同时给出符号的值

 

 

14。lm用于显示加载的模块(模块后面如果有deferred)表示模块已经加载,但是还没加载符号

lkd> lm m nt    显示指定模块    可用*号来做通配符

lm l显示只加载了符号的,e 显示有问题的,o显示模块加载的,v显示更详细信息,如lm v m nt

!lmi nt显示nt模块的信息

.load xxx加载指定xxx模块

 

 

15。内核调试时上下文

进程的有.process 显示当前的上下文,后面加eprocess的地址表示切换过去,还有个.context和这个同意义,.context就是用来切换cr3

线程使用.thread,后面加参数用于切换,不加则表示恢复以前情况

 

16。hi,low by wo ,dwo分别取得指定值的高16,低16位,后面的是取指定地址的值,注意,是地址指向的值,分别是字节,2字节,4字节

还有个poi这个其实和dwo一样了,不过发现poi是符号的,而dwo是无符号的

 

17。tlist列出正在运行进程,.time显示系统时间,.ttime显示线程时间

vertarget也显示系统时间,

posted @ 2012-06-08 21:58  kkindof  阅读(695)  评论(0编辑  收藏  举报