能力值:
( LV2,RANK:10 )
|
-
-
2 楼
没有人用过消息断点吗?
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
根据注册对话框函数就知道了点按钮后的对话框过程入口地址.
然后在传递消息的函数里用SHIFT+F4下断,把按钮ID输入进去就可以了
中断后,再去过程入口那里下个中断 比如说ID是543, 那么肯定有个 cmp eax,543的句子,这这条命令一样能追的到~
你要是明白了消息传递和对话框的建立,这个问题就不该问了~
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
以MFC下的程序为例:
它的调用结构如下:
AfxWndProcBase
AfxWndProc
AfxWndProc(hWnd, uMsg, uParam, lParam, CWnd* pWnd)
AfxCallWndProc(CWnd* pWnd, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
AfxCallWndProc
CWnd::WindowProc
WindowProc( UINT message, WPARAM wParam, LPARAM lParam );
CWnd::OnWndMsg
用户::On***Msg()
现查找名称,在AfxCallWndProc上设断点,
对于这个调用,hWnd在esp+8的地方uMsg在esp+C的地方
所以,条件为[esp+8]==hWnd && [esp+C] == message
进入这个断点后,再在CWnd::OnWndMsg上设断点,进入这个函数,跟进去就可以到用户写的处理函数中了。
这大概是对MFC的较为方便的跟踪方法。
也可以在TranslateMessage上设断点,但要跟踪进入的层次太多。
其实还可以找到消息映射列表,直接得到用户的所有消息处理函数入口。
|
|
|