首页
社区
课程
招聘
[求助]诚恳请教:WM_COMMAND 和WM_LBUTTONDOWN的区别
发表于: 2009-3-2 12:20 5676

[求助]诚恳请教:WM_COMMAND 和WM_LBUTTONDOWN的区别

2009-3-2 12:20
5676
我用win32汇编写了一个模态对话框,在消息处理函数对控件处理是用WM_COMMAND消息,但是我用OD调试它的时候下WM_COMMAND的消息的断点就是断不下,而在BUTTON上下WM_LBUTTONDOWN or WM_LBUTTONUP 可以断下,我想请教一下,windows在处理他们有什么不同吗?下断点的时候有什么不同吗?恳请赐教!谢谢了
ps:附近是我写的程序,帮忙看下了

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
对话框的消息在DialogProc里处理,OD里的“消息断点”是对ClassProc(或者WndProc,我记不清了)下条件断点来实现的(可以自行验证一下)。

所以,OD的“消息断点”对对话框不适用。

只要手动在DialogProc中下断点就可以了。通常的方法是先断DialogBoxParamA/W(不过既然你是用汇编程序编写的,一般载入程序后直接往下翻就能看到DialogBoxParam了),查看参数找到DialogProc,然后再到DialogProc那里下断点。

为了模拟OD的“消息断点”,在DialogProc处下断点时,加上断点条件[esp+8]==WM_COMMAND就可以了。
2009-3-2 13:30
0
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
mark
我比较郁闷的。
从来没用成功od的消息断点

每次在WM_LBUTTONUP 下断都提示:

”无法读取调试进程的内存,位于FFFF09CF的断点已被删除“

有人知道是为什么吗?
2009-3-2 16:22
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
4
只因你下断的窗口是系统创建的,窗口过程是内核空间,ring3的调试器自然无法访问。

有很多系统的窗口和控件,它们的ClassProc都是在内核中。

建议:“消息断点”实际中很少使用,只有当程序使用自定义的窗口类并且自己创建窗口时,才有效。其它情况,比如MFC、或Delphi、或Dialog等,直接使用“消息断点”功能不太管用。

还是要提高自己分析能力,想办法对程序可能调用的API下断点,这才是正确的方向。“消息断点”不是万能的,甚至可以说只在很少的情况下才有效。
2009-3-2 19:54
0
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
原来如此。我说奇怪我怎么老是没法用消息断点。
受教受教
2009-3-3 14:19
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
6
谢谢斑竹了,要涨知识了
2009-3-3 15:07
0
游客
登录 | 注册 方可回帖
返回
//