以我在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"打印出断点函数的第一个参数内容;