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

  • 相关阅读:
    百练 1936 ll in All 解题报告
    百练 2804 词典 解题报告
    POJ 1226 Substrings 解题报告
    百练 2797 最短前缀 解题报告
    百练 2743 字符串判等 解题报告
    java创建线程的两种方式
    使用.Net Remoting传送Image对象
    Links [IronPython Workflow WCF]
    Hello World!
    Links [ .Net 3.0 Atlas ]
  • 原文地址:https://www.cnblogs.com/kkindof/p/2542318.html
Copyright © 2020-2023  润新知