-
-
看来SICE也要求机器性能够劲才好使~
-
发表于:
2007-2-24 19:24
3960
-
拦截一个消息处理函数,在函数如口处设了一条件断点,bpx xxxxxxxx IF *(esp+c)==400.
有趣的事情就出现了.在一台古董P3机器上,发现SI无法拦下来,而且还出现随机的死机.而如果我把这个断点改成在函数内部的一个分支处,比如这样:
mov eax, [esp+1c];取消息码放入eax
cmp eax, 111h; 判断消息,我在这条指令上设断,条件改成IF eax==400.
OK,啥问题就没有了.
刚开始莫名其妙,后来想是不是因为这个函数是个工作频率极高的函数,没准每秒钟上百万次呢,HOHO~所以设在入口的话,由于处理器速度慢导致SI拦截出错.而设在内部分支处的话,频率就大大降低了,SI工作正常.
于是我在另一台P4机器上,同样的方法,证实了我的想法.这台P4机器上在入口处拦截一点问题都没有.
由此得出结论,用SI下断点也要考虑断点处的工作频率和机器的性能,否则就可能会出现理论上本不该出现的错误.还有一般拦截API函数我们都是bpx 函数名.看来这样是不好的,因为API是整个系统共享的,其工作频率也可能极高.比较好的办法是在想跟踪的软件上,下一个IAT表的读断点.这样就只拦截被跟踪软件的API了.保证了拦截的可靠性~
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!