飘云阁(PYG官方论坛)

 找回密码
 加入论坛

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 265|回复: 0

[讨论] 软件----消息断点之回调函数

[复制链接]
  • TA的每日心情
    开心
    2018-6-28 09:29
  • 签到天数: 32 天

    [LV.5]常住居民I

    发表于 2018-1-6 11:53:00 | 显示全部楼层 |阅读模式
    用资源文件创建的窗口,不用定义类,注册类,写消息循环。只要dialogbox()和写一个dialogProc就能用了,return true 或者return false

    用dialogbox()的方法创建的窗口,它的消息处理函数就是401000处了
    来到401000处就是

    要在这下断点,就要下条件断点,要不就一直断下运行不了 ,[esp+8] ==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,就到了我们需要的消息的过程处理函数上了。

    您需要登录后才可以回帖 登录 | 加入论坛

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    快速回复 返回顶部 返回列表