windbg实用命令

来源:互联网 发布:php空格 编辑:程序博客网 时间:2024/04/29 11:25

!PROCESS 0 1 explorer.exe    和!process 81b3a980 1 结果1一样

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也显示系统时间,

原创粉丝点击