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