WinDBG中条件字符串设断点

以我在notepad.exe中设置CreateFileW特定文件名断点为例。

bp kernel32!CreateFileW "r $t1=poi(esp+4);as /mu $FileName $t1;.block{.if($sicmp(\"${$FileName}\",\"C:\\abc.txt\")!=0){.echo c:\\abc.txt}.else{.echo nonono;gc}}"

bp kernel32!CreateFileW "r $t1=poi(esp+4);as /mu $FileName $t1;.block{.if($spat(\"${$FileName}\",\"*abc.txt\")!=0){.echo c:\\abc.txt}.else{.echo nonono;gc}}"

bp kernel32!CreateFileW "r $t1=poi(esp+4);as /mu $FileName $t1;.block{.if($scmp(\"${$FileName}\",\"*abc.txt\")!=0){.echo c:\\abc.txt}.else{.echo nonono;gc}}"

解释: 1..echo命令显示注释字符串 如:.echo String

2.r $t1=poi(esp+4),poi(esp+4)取地址的值,并赋给伪寄存器$t1 ;

       3.as /mu $FileName $t1 ,定义$t1 所指地址一个别名$FileName,用来在下面的$spat中使用/mu代表Unicode字符串,/ma代表ASCII字符串;

4.scmp/sicmp/spat进行字符串比较,scmp大小写敏感;sicmp不区分大小写;spat模糊匹配,用*代替模糊词组;

5..block:代码块

bp CreateFileW "du /c 50 poi(@esp+4) ;gc"打印出断点函数的第一个参数内容;


你可能感兴趣的:(字符串,windbg,条件断点)