大家好!我是风动鸣 ![]() 第一次发教程,请大家多多指教 多多包涵 ![]() OD调试带有时钟的易语言程序时 要干掉时钟 我知道的有四种方法 (新增一种方法 请看后面) ![]() 1,使用工具 附上工具
![]() 恒大工具包地址:http://www./thread-1957-1-1.html ![]() 移除所有定时器 ![]() 2,在 事件call 下条件断点 ![]() ![]() ![]() F9运行起来后 看图: ![]() 值得注意的是:如果程序不只一个时钟呢 那么要怎么写条件断点呢 ![]() ![]() ![]() 举个相反的例子 在事件call 下条件断点 只让时钟函数断下来 要做到这个效果 我先把两时钟都停下来 按界面的两个停止按钮即可 ![]() ![]() ![]() ![]() ![]() 好了 以上两个方法 都是 恒大 教的 之前我根本就不懂的 3,使用API KillTimer 【干掉时钟】 (这个才是我真正要介绍的) 它有两个参数 具体看图 ![]() 要调用 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://www./thread-13269-1-1.html 不知道以上有没有营养 谢谢观看。 ![]() 觉得对你有帮助,记得加“热心”哦! 免币下载地址: 本帖隐藏的内容链接:http://pan.baidu.com/s/1i3lQQSd 密码:i8a8附上程序和源码:
![]() |
|