首页
社区
课程
招聘
[讨论]OD如何下断OnTimer(UINT nIDEvent)函数?
发表于: 2013-12-2 19:17 7142

[讨论]OD如何下断OnTimer(UINT nIDEvent)函数?

2013-12-2 19:17
7142
我用VC6写了个小程序,截图如下:

----------------------------------------------------------------
设置定时器的代码如下:

SetTimer(2013,1000,NULL);

-------------------------------------------------------------------
//定时器响应函数
void CRandDlg::OnTimer(UINT nIDEvent)
{
     CDialog::OnTimer(nIDEvent);
    SetDlgItemInt(IDC_TXB,rand());//显示产生的随机数
}

--------------------------------------------------------------------------
现在我想在OD中对定时器响应函数OnTimer()下断点,发现断不了

百度了一下,没找到什么有用的资料,我如何才能对OnTimer()下断点呢?

或者说我如何在OD中找到OnTimer()的开始位置呢?

程序很小,我上传上来了。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 288
活跃值: (212)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
bp SetTimer

004012F1   .  6A 00         PUSH 0                                   ; /Timerproc = NULL
004012F3   .  68 E8030000   PUSH 3E8                                 ; |Timeout = 1000. ms
004012F8   .  68 DD070000   PUSH 7DD                                 ; |TimerID = 7DD (2013.)
004012FD   .  51            PUSH ECX                                 ; |hWnd
004012FE   .  FF15 EC234200 CALL DWORD PTR DS:[<&USER32.SetTimer>]   ; \SetTimer
2013-12-2 20:18
0
雪    币: 7885
活跃值: (2285)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个我试过了,是可以断下来,关键是这样下断点,

我如何知道OnTimer()函数的开始地址呢?
2013-12-2 20:40
0
雪    币: 135
活跃值: (63)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
以前我也研究过一点mfc的程序,不过也不是很懂基本都忘光了。
你应该看看mfc消息传递,就是那个框架,侯捷的深入浅出mfc有专门讲解。然后看看mfc的代码,有2条以上的线能引发类的虚函数的调用,就是AfxCallWndProc之类这种非类的函数调用到CWnd::WndProc类的函数的过程。那些消息的声明都是用宏的,找到那个调用过程可以在内存中搜到这个数据结构,长度是6个DWORD就是一个处理函数的地址。(那个数据结构里面里面还有参数,类型什么的)。那个函数的查找我看过有帖子说使用特征码找,有时候可以从ida看到关键的函数,比如那个OnCommand什么的。网上和论坛都有专门的帖子,和工具(名字忘了,应该做得很好,不过跟mfc的版本有关)。delphi的vcl,这个也有工具,好像叫dede。我说的也不清楚,因为我也是个菜鸟,不过感觉原理大概是这样。
2013-12-3 00:18
0
雪    币: 1596
活跃值: (30)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
5
当使用SetTimer函数的时候,就会生成一个定时器,函数中nIDEvent指的是定时器的标识,也就是名字。nElapse指的是时间间隔,也就是每隔多长时间触发一次事件。第三个参数是一个回调函数,在这个函数里,放入你想要做的事情的代码,你可以将它设定为NULL,也就是使用系统默认的回调函数,系统默认的是OnTimer函数。这个函数怎么生成的呢?你需要在需要计时器的类的生成OnTimer函数:在ClassWizard里,选择需要计时器的类,添加WM_TIMER消息映射,就自动生成OnTimer函数了。然后在函数里添加代码,让代码实现功能。每隔一段时间就会自动执行一次。

断USER32.CallWindowProcA,条件是消息参数为WM_TIMER试试
2013-12-8 09:11
0
游客
登录 | 注册 方可回帖
返回
//