pcwindpyg 发表于 2018-1-6 11:53:00

软件----消息断点之回调函数

用资源文件创建的窗口,不用定义类,注册类,写消息循环。只要dialogbox()和写一个dialogProc就能用了,return true 或者return false
用dialogbox()的方法创建的窗口,它的消息处理函数就是401000处了 来到401000处就是
要在这下断点,就要下条件断点,要不就一直断下运行不了 , ==0x111 ,因为这时按钮的dlgproc调用的是父函数的winproc中的wm_comand这个回调了运行,一点按钮就断下了,这样就可以跟了。 如果是别人写的界面复杂的程序,你想加载找到入口找到某个按钮的消息处理函数就太难了,有时就找不到,面目都一样呀,我们只能用工具找消息断点了。加载程序,运行,在0d的 w窗口刷新出所有的窗口过程
按钮也是窗口,都在这里了,我们在button上下消息断点 ,鼠标左键抬起是0x202,这时在按钮上点下,就会调用77d2882e这个回调,在某时它调用wm_command这个我们写的回调。我们先在77d2882e这个回调上下断点,一步一步跟到我们写的wm_command上。 下好都有了 一点按钮就断下了,在dll中,它要调用我们写的command命令
在内存中代码上下内存访问断点,f9运行,一调用就断下了 但不一定是我们要找的消息过程呀,它会一直发,哪个是我们要的呢?看堆栈窗口的第三行是不是0x111,不是,就不是我们要的消息过程
我们f8一会,回到了dll中,f9运行,又回到用户代码,有可能是dll的回调 ,调用到我们写的command的回调上了。我们就观察堆栈窗口,第3行是0x111就是wm_command,第4行是0x3e8.那就是我们为按钮在父进程中写的回调过程,在单步就能跟到我们写的消息处理函数了。就知道是哪个按钮的消息处理函数了,第4行就是lparamter的16进制的表示,也就是系统给子窗口id 1000;
如果不是0x111,我们就运行,直到找到0x111,就到了我们需要的消息的过程处理函数上了。

leers 发表于 2019-6-10 17:01:29

这个还是要了解一下
页: [1]
查看完整版本: 软件----消息断点之回调函数