OD調試帶有時(shí)鐘的易語(yǔ)言程序時(shí)
要干掉時(shí)鐘 我知道的有四種方法 (新增一種方法 請看后面)
恒大工具包地址:http://www.xuepojie.com/thread-1957-1-1.html
移除所有定時(shí)器
2,在 事件call 下條件斷點(diǎn)
F9運行起來(lái)后 看圖:
值得注意的是:如果程序不只一個(gè)時(shí)鐘呢 那么要怎么寫(xiě)條件斷點(diǎn)呢
舉個(gè)相反的例子 在事件call 下條件斷點(diǎn) 只讓時(shí)鐘函數斷下來(lái)
要做到這個(gè)效果 我先把兩時(shí)鐘都停下來(lái) 按界面的兩個(gè)停止按鈕即可
好了 以上兩個(gè)方法 都是 恒大 教的 之前我根本就不懂的
3,使用API KillTimer 【干掉時(shí)鐘】 (這個(gè)才是我真正要介紹的)
它有兩個(gè)參數 具體看圖
首先要知道它的函數地址
看上圖: 地址為 77D18C42
兩個(gè)參數:
TimerID的值是固定的 0x3E8 【就是十進(jìn)制的1000】
那么時(shí)鐘的句柄怎么找呢 看下圖
函數地址:77D18C42
兩個(gè)時(shí)鐘句柄:000F02A2 和 0011028A
TimerID : 0x3E8
接下來(lái)就是使用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斷點(diǎn) F9 看效果
a,你修改的時(shí)鐘函數 寫(xiě)入的時(shí)鐘句柄剛好是本時(shí)鐘的句柄 那么停止后可能有問(wèn)題 時(shí)鐘自己停止自己
b,你修改的時(shí)鐘函數 寫(xiě)入的時(shí)鐘句柄 是 另一個(gè)時(shí)鐘的句柄 意思是這個(gè)時(shí)鐘 停止另一個(gè)時(shí)鐘
總結:雖然調用API KillTimer 來(lái)干掉時(shí)鐘 很麻煩 但是是一個(gè)不錯的思路 大家可以試試 使用 SetTimer 來(lái)改變時(shí)鐘周期
4,作廢SetTimer (開(kāi)啟時(shí)鐘用的)
作廢SetTimer 來(lái)干掉時(shí)鐘是最省事的 大家學(xué)到了沒(méi)?最后, 思路不只是針對這個(gè)程序 所以的程序都可能適用 恒大 說(shuō)過(guò) 要靈活點(diǎn) 要懂得舉一反三?。?!
不知道以上有沒(méi)有營(yíng)養 謝謝觀(guān)看。
覺(jué)得對你有幫助,記得加“熱心”哦!
免幣下載地址:
本帖隱藏的內容
鏈接:http://pan.baidu.com/s/1i3lQQSd 密碼:i8a8
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。