原理:windows是基于消息的操作系统,每一个消息都按照相同的格式被写入一个结构体,这个结构体叫MSG。消息发生后windows把该结构体传给WinProc函数,用它来执行消息处理功能。每一个窗口有不同控件,一个窗口至少一个消息循环。

如何设置消息断点:

先把程序运行起来,让软件的主界面显示出来。打开感兴趣的窗口。

java 断dian下载_c函数

输入假码后不要点击回车,保持现状;

java 断dian下载_java 断dian下载_02

接着来到点击W窗口,里面什么都没有

java 断dian下载_控件_03

刷新一下;

java 断dian下载_我不要做断点什么意思_04

我们看到第二行,内容为验证用户名和序列号,这和按钮上的文字相同,而且它的类是Button也就是按钮,可见这里是按钮控件了。选中它-右击-设置消息断点、

java 断dian下载_java 断dian下载_05

消息一栏选中202 WM_LBUTTONUP在按钮上抬起鼠标左键。按钮控件上发生鼠标右键抬起事件时就断下。因为单击包括两个操作,一个是鼠标左键按下,另一个是鼠标左键抬起。

暂停程度:选择按消息  记录winproc参数:选择按消息

java 断dian下载_java 断dian下载_06

单击确定按钮,断在WinProc函数段首,即窗口过程函数,堆栈窗口里参数显示:Message参数里就是202,如图。

java 断dian下载_c函数_07

然后在程序领空的.text代码段设置访问断点,f9后就到了程序领空,注:下内存断点和alt+f9比,返回后细节更多更细致,粗略的分析时用alt+f9

如何给消息断点添加记录功能:如果我们对

WinProc

函数的Message参数感兴趣,想让程序记录我们干了什么。,那么我们可以来到B窗口,右击消息断点,设置条件断点, 然后。。。这样发生的所有事件都会被记录下来

到这里我发现,消息断点本质是一个在

WinProc

函数段首设置的,判断{esp+8}==202,即第二参数是否等于WM_LBUTTONUP的条件断点。注:Esp指向返回地址,Esp+4指向第一个参数,esp+8指向第二个参数。