首页
社区
课程
招聘
[求助]关于windbg条件断点之字符串比较
发表于: 2015-3-19 18:43 7475

[求助]关于windbg条件断点之字符串比较

2015-3-19 18:43
7475
先起了个cmd,然后windbg attach这个cmd进程,设置条件断点如下:
0:000> bl
 0 e 7577204d     0001 (0001)  0:**** kernel32!CreateProcessW "r @$t1=poi(esp+4); as /mu ${/v:pszCP} @$t1; 
.if($spat(\"${pszCP}\", \"*epad.exe\")){kv; du @$t1} .else{gc}"

就是想在cmd中启动notepad.exe时断下来。
在cmd中交替启动calc.exe和notepad.exe发现两个个问题(见图):
1.当前一次断在创建notepad进程后,下一次启动calc.exe时,也会断下来
2.当前一次运行的是calc.exe没有断下时,下一次运行notepad也不断下来,再下一次才能断下
请问大家有没有出现这个诡异的问题?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 97
活跃值: (141)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
ad * 清一下别名
2015-3-19 20:38
0
雪    币: 93
活跃值: (52)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
清了之后,启动calc.exe都断不下来了啊,但输出$spat()比较的结果又没问题啊~(如图所示)
bp命令如下:
bp kernel32!CreateProcessW "r @$t1=@rcx;
as /mu ${/v:pszKC} @$t1;
.if($spat(\"${pszKC}\", \"*calc.exe\")){du @rcx; kv; ad ${/v:pszKC}}
.else{? $spat(\"${pszKC}\", \"*calc.exe\"); du rcx; ad ${/v:pszKC};gc}"
上传的附件:
2015-3-19 21:55
0
雪    币: 93
活跃值: (52)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
设置两个断点,第一个处理别名,第二个真断,测试可以直接断下来,没有出现断在下一个的问题!
bp kernel32!CreateProcessW "r @$t1=poi(esp+4); as /mu ${/v:pszCP} @$t1; gc"
bp kernel32!CreateProcessW+2 ".if($spat(\"${pszCP}\", \"*epad.exe\")){kv; du @$t1} .else{gc}"
2015-3-20 10:12
0
雪    币: 97
活跃值: (141)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
bu kernel32!CreateProcessW "r @$t1=poi(esp+8);
as /mu pszKC @$t1;

.block
{
.if( $spat(${pszKC}, \"*calc.exe\"))
{
   .echo;  .printf \"Stop Process:%mu  \r\n\",@$t1;
   ad *;
}
.else
{
    .echo;  .printf \"Pass Process:%mu  \r\n\",@$t1;
     ad *;
     gc;
  }
}"
2015-3-20 15:03
0
雪    币: 97
活跃值: (141)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
保存到1.txt
然后 $$><c:\1.txt
2015-3-20 15:05
0
雪    币: 93
活跃值: (52)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
非常感谢,确实得放在.block{}中,还有一个疑惑,就是为什么每次需要ad*清一下别名,不是如果别名已经定义,再定义就会重新定义吗“If Name is already the name of an existing alias, that alias is redefined.“
2015-3-21 08:52
0
雪    币: 97
活跃值: (141)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
为了别名干净。

as /mu pszKC @$t1;

个人经验,有时候@t1内字符串回赋值不到pszKC中。
2015-3-21 20:32
0
雪    币: 93
活跃值: (52)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
我试了好多次,确实得清别名,不清的话,每次都断在下一次~
还有我今天又遇到了一个问题:
就是比如我按照上面设置createfile的条件断点如下:
bp kernel32!CreateFileW "
as /mu ${/v:filename} poi(esp+4);
.block{
    .if ($sicmp(\"${filename}\", \"c:\\1.txt\") == 0){
        .echo \"open 1.txt\";
        r
    }
}
ad ${/v:filename};
gc;
"
但当我打开C盘时,又出了问题,此时的filename为C:\,此时$sicmp(\"${filename}\", \"c:\\1.txt\")
就相当于$sicmp("C:\", "C:\1.txt"),此时C:\"中的\"会转义成",因此会出现$sicmp语句
会出现语法错误,请问有什么办法解决没,尝试在"${filename}"加@禁止转义,但仍有
问题。
加@的方法可以解决下面的问题,如:
$sicmp(@"C:\", @"c:\1.txt")此时是正确的,但由于在设置条件断点时,后面的语句本身在
""里面,所以@的方式似乎不行。
不知道有没有解决的好方法。
2015-3-21 20:56
0
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
http://blog.csdn.net/autohacker/article/details/49076461
2015-10-13 09:35
0
游客
登录 | 注册 方可回帖
返回
//