首页
社区
课程
招聘
[原创]在MFC中快速定位按钮事件的新方式
发表于: 2019-1-4 21:05 8859

[原创]在MFC中快速定位按钮事件的新方式

2019-1-4 21:05
8859

    我在上一篇文章《 如何在MFC中定位按钮事件 》采用了寻找虚函数表的方法来寻找按钮事件,但是用不同版本的VS编译器编译出来的MFC程序,在进入afxWinMain入口前做了非常多的工作,而且在不同版本中所做的内容是不尽相同的。下图左边是vs6.0的MFC的调用堆栈,右边是vs2010的MFC的调用堆栈。


   在MFC程序中,有且仅有一个继承自CWinApp的类,而且这个类是全局的,只有一个,程序运行的时候已经初始化了。

  1,原理:
继承自CWinApp的类和窗口的类在内存中有 static const AFX_MSGMAP_ENTRY _messageEntries[]消息映射数组,我们知道消息映射的结构是
struct AFX_MSGMAP_ENTRY 
  { 
   UINT nMessage; // windows message 
   UINT nCode; // control code or WM_NOTIFY code 
   UINT nID; // control ID (or 0 for windows messages) 
   UINT nLastID; // used for entries specifying a range of control id's 
   UINT nSig; // signature type (action) or pointer to message # 
   AFX_PMSG pfn; // routine to call (or special value) 
  };
那么,我们就可以在内存中搜索这个特征。
默认的MFC程序会添加如下的消息映射,当我们添加按钮事件的时候入右图所示。

ON_WM_SYSCOMMAND的定义如下,WM_SYSCOMMAND对应的数字就是0x112;按钮按下形成的数字是0x111,然后我们就利用这些特征搜索数据。

2,OD分析

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 5
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  junkboy   +1.00 2019/01/04
最新回复 (7)
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
支持
2019-1-4 21:39
0
雪    币: 181
活跃值: (621)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
支持 
2019-1-5 21:35
0
雪    币: 66
活跃值: (2735)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
通杀 哈哈哈
2019-1-8 15:09
0
雪    币: 351
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习啦,赞
2019-1-22 15:44
0
雪    币: 10593
活跃值: (2279)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最好能实现程序自动找就更好了
2019-1-22 16:01
0
雪    币: 3797
活跃值: (769)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
楼主帮了我大忙 感谢无私分享
2019-1-23 16:02
0
雪    币: 279
活跃值: (123)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
thinks
2019-2-11 10:22
0
游客
登录 | 注册 方可回帖
返回
//