OD调试带有时钟的易语言程序时
要干掉时钟 我知道的有四种方法 (新增一种方法 请看后面)
恒大工具包地址:http://www.xuepojie.com/thread-1957-1-1.html
移除所有定时器
2,在 事件call 下条件断点
F9运行起来后 看图:
值得注意的是:如果程序不只一个时钟呢 那么要怎么写条件断点呢
举个相反的例子 在事件call 下条件断点 只让时钟函数断下来
要做到这个效果 我先把两时钟都停下来 按界面的两个停止按钮即可
好了 以上两个方法 都是 恒大 教的 之前我根本就不懂的
3,使用API KillTimer 【干掉时钟】 (这个才是我真正要介绍的)
它有两个参数 具体看图
首先要知道它的函数地址
看上图: 地址为 77D18C42
两个参数:
TimerID的值是固定的 0x3E8 【就是十进制的1000】
那么时钟的句柄怎么找呢 看下图
函数地址:77D18C42
两个时钟句柄:000F02A2 和 0011028A
TimerID : 0x3E8
接下来就是使用KillTimer 函数了 还是看图吧
004010D0 /. 55 push ebp
004010D1 |. 8BEC mov ebp,esp
004010D3 |. 68 E8030000 push 0x3E8
004010D8 |. 68 A2020F00 push 0xF02A2
004010DD |. E8 607B9177 call 77D18C42
004010E2 |. 8BE5 mov esp,ebp
004010E4 |. 5D pop ebp
004010E5 \. C3 retn
禁用 事件call断点 F9 看效果
a,你修改的时钟函数 写入的时钟句柄刚好是本时钟的句柄 那么停止后可能有问题 时钟自己停止自己
b,你修改的时钟函数 写入的时钟句柄 是 另一个时钟的句柄 意思是这个时钟 停止另一个时钟
总结:虽然调用API KillTimer 来干掉时钟 很麻烦 但是是一个不错的思路 大家可以试试 使用 SetTimer 来改变时钟周期
4,作废SetTimer (开启时钟用的)
作废SetTimer 来干掉时钟是最省事的 大家学到了没?最后, 思路不只是针对这个程序 所以的程序都可能适用 恒大 说过 要灵活点 要懂得举一反三!!!
觉得对你有帮助,记得加“热心”哦!
免币下载地址:
本帖隐藏的内容
链接:http://pan.baidu.com/s/1i3lQQSd 密码:i8a8
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。