关闭

针对LdrLoadDll下条件断点过滤指定名称DLL加载时断点生效

285人阅读 评论(0) 收藏 举报
分类:

针对加载*ser32.dll下断点:

bu ntdll!LdrLoadDll "r $t0=poi(poi(esp+c)+4);as /mu ${/v:dllname} @$t0;.block{.if($spat(\"${dllname}\",\"*ser32.dll\")){kbn}; .else{ad ${/v:dllname};g}}"


------------------------------------------------
命令: as
功能: 定义别名
/ma  参数指定的内存地址当做ASCII字符串。
/mu  参数指定的内存地址当做Unicode字符串。
/msa  参数指定的内存地址当做ANSI_STRING字符串。
/msu  参数指定的内存地址当做UNICODE_STRING字符串。
/f  别名等于参数指定文件的内容。
/e  别名等于参数指定的环境变量。

------------------------------------------------
命令: ${} (说明:准确说不是命令,是Command Tokens类似.if之类)
功能: ${}是别名解释器,可以使用windbg帮助手册查看详细信息
Text ${Alias} Text 
Text ${/d:Alias} Text 
Text ${/f:Alias} Text 
Text ${/n:Alias} Text 
Text ${/v:Alias} Text 

/v:  保持别名原样,不翻译,在定义和删除的时候用。
/n:  如果别名定义就翻译为内容,否则不做任何翻译。
/f:  如果别名定义就翻译为内容,否则翻译为空。
/d:  如果别名被定义,翻译为1,否则翻译为0,相当于#ifdef。

-----------------------------------------------
命令: 20个伪寄存器
User-Defined Pseudo-Registers
There are 20 user-defined pseudo-registers ($t0, $t1, ..., $t19). These pseudo-register are variables that you can read and write through the debugger. You can store any integer value in these pseudo-registers. They can be especially useful as loop variables.


To write to one of these pseudo-registers, use the r (Registers) command, as the following example shows.


0:000> r $t0 = 7
0:000> r $t1 = 128*poi(MyVar)
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1323096次
    • 积分:17155
    • 等级:
    • 排名:第570名
    • 原创:170篇
    • 转载:1416篇
    • 译文:0篇
    • 评论:49条
    最新评论