在调试一个程序,使用RegQueryValueEx Api读取注册表数据中遇到一个奇怪的问题,用$spat指令比较数据时总是返回False.
在windbg调试器中执行如下命令,在RegQueryValueExW Api设置条件断点:
bu kernel32!RegQueryValueExW "r $t1=poi(esp+8);.echo ---------------------------------------------------------------;.block{.if(@$t1!=0){r $t2=poi(esp+0x14);as /mu $vn $t1;.printf \"ValueName:%mu\",$t1;.echo ;al;.if($spat(\"${$vn} \",\"Load*\")){.echo 找到数据;.al $vn;!handle poi(esp+4) f;ad ${/v:$vn};}.else{.echo 没找到数据;ad ${/v:$vn};gc;}}.else{gc;}}"
以上命令的本意是想让程序在执行RegQueryValueExW系统调用时,当读取的注册表值的名称中以"Load"开头时断下,读取其它值名称时跳过。然后当读取到一个注册表的值为"LoadAppInit_DLLs"时,并未打印出“找到数据”的提示,不知道错在哪里,求帮助,谢谢。(我参考过:http://advdbg.org/forums/4279/PrintPost.aspx,可还是不知道错哪了,觉得本人有些愚钝,汗。。。)
有图有真像,我将调试的结果抓图做为附件上传到论坛了。
附件中的图片无法查看,请点击如下链接查看:http://www.triplabel.com/images/Qcmdspat.jpg