能力值:
(RANK:260 )
2 楼
对话框的消息在DialogProc里处理,OD里的“消息断点”是对ClassProc(或者WndProc,我记不清了)下条件断点来实现的(可以自行验证一下)。
所以,OD的“消息断点”对对话框不适用。
只要手动在DialogProc中下断点就可以了。通常的方法是先断DialogBoxParamA/W(不过既然你是用汇编程序编写的,一般载入程序后直接往下翻就能看到DialogBoxParam了),查看参数找到DialogProc,然后再到DialogProc那里下断点。
为了模拟OD的“消息断点”,在DialogProc处下断点时,加上断点条件[esp+8]==WM_COMMAND就可以了。
能力值:
( LV4,RANK:50 )
3 楼
mark
我比较郁闷的。
从来没用成功od的消息断点
每次在WM_LBUTTONUP 下断都提示:
”无法读取调试进程的内存,位于FFFF09CF的断点已被删除“
有人知道是为什么吗?
能力值:
(RANK:260 )
4 楼
只因你下断的窗口是系统创建的,窗口过程是内核空间,ring3的调试器自然无法访问。
有很多系统的窗口和控件,它们的ClassProc都是在内核中。 建议:“消息断点”实际中很少使用,只有当程序使用自定义的窗口类并且自己创建窗口时,才有效。其它情况,比如MFC、或Delphi、或Dialog等,直接使用“消息断点”功能不太管用。
还是要提高自己分析能力,想办法对程序可能调用的API下断点,这才是正确的方向。“消息断点”不是万能的,甚至可以说只在很少的情况下才有效。
能力值:
( LV4,RANK:50 )
5 楼
原来如此。我说奇怪我怎么老是没法用消息断点。
受教受教
能力值:
( LV13,RANK:350 )
6 楼
谢谢斑竹了,要涨知识了