首页
社区
课程
招聘
[分享]6年前写的一个列举MFC消息对应的代码的小工具
发表于: 2010-12-8 15:33 17188

[分享]6年前写的一个列举MFC消息对应的代码的小工具

2010-12-8 15:33
17188

其实只是处理VC6的,能把菜单、按钮对应的代码地址直接显示
居然到现在还能使用..... VS2010


[注意]APP应用上架合规检测服务,协助应用顺利上架!

上传的附件:
  • 1.jpg (52.41kb,1071次下载)
收藏
免费 7
支持
分享
最新回复 (33)
雪    币: 1115
活跃值: (122)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
忘记传附件了
上传的附件:
2010-12-8 15:35
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
有个开源的MFCSPY不错的
2010-12-8 15:42
0
雪    币: 1115
活跃值: (122)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
没用过
2010-12-8 15:56
0
雪    币: 2882
活跃值: (1326)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yjd
5
下载收藏,上次也下了按钮时间查找工具
2010-12-8 16:42
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6


支持一下~那个动态的工具用着有些蛋疼。
2010-12-8 16:53
0
雪    币: 107
活跃值: (1794)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
7
6年前,还没加入看雪就是高手了,膜拜加收藏。静态链接的支持否?
2010-12-8 17:06
0
雪    币: 333
活跃值: (46)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
6年前,还不会上网的时候就是高手了    膜拜+收藏
2010-12-8 20:11
0
雪    币: 596
活跃值: (449)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
9
2年前.我还没接触过计算机......
2010-12-8 20:49
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
10
期待更新一下源码可以支持更多mfcxx.dll啊,包括unicode版本
2010-12-8 20:55
0
雪    币: 1115
活跃值: (122)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
11
刚才测试了几个vs2005的程序,发现有几个确实不显示,看来mfc有点变化。等有空的时候再更新吧。
2010-12-8 23:08
0
雪    币: 291
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
不错.有用就很好.
2010-12-9 21:47
0
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
下载了才发现没码 :-)
2010-12-9 21:52
0
雪    币: 53
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
求有码版本。。。
2010-12-10 10:03
0
雪    币: 585
活跃值: (578)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
15
这个软件其实就是通过得到MFC里面的一个关于消息、控件和函数地址的映射表来实现的,是在MFC42.DLL中的一个固定地方。找到那个固定地址,通过进程间的HOOK就可以得到所需要的数据,还是比较简单的。具体如下图:

还有一个类似的工具,也传上来把。 MFC按钮入口地址定位器.rar
上传的附件:
2010-12-12 14:19
0
雪    币: 1115
活跃值: (122)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
16
这个工具不是通过hook来实现的,完全是静态的。对于vc6程序,识别率是100%
原理是识别BEGIN_MESSAGE_MAP 和END_MESSAGE_MAP之间的代码
比如:
BEGIN_MESSAGE_MAP(CLoaderDlg, CDialog)
        //{{AFX_MSG_MAP(CLoaderDlg)
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        ON_BN_CLICKED(ID_SELECT, OnSelect)
        ON_BN_CLICKED(IDC_SELECT_PROCESS, OnSelectProcess)
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

将宏完全展开后,代码如下:

const AFX_MSGMAP* PASCAL CLoaderDlg::_GetBaseMessageMap()
{
        return &CDialog::messageMap;
}
const AFX_MSGMAP* CLoaderDlg::GetMessageMap() const
{
        return &CLoaderDlg::messageMap;
}
AFX_COMDAT AFX_DATADEF const AFX_MSGMAP CLoaderDlg::messageMap =
{
        &CLoaderDlg::_GetBaseMessageMap,
        &CLoaderDlg::_messageEntries[0]
};
AFX_COMDAT const AFX_MSGMAP_ENTRY CLoaderDlg::_messageEntries[] =
{
        {WM_PAINT, 0, 0, 0, AfxSig_vv, &OnPaint},
        {WM_QUERYDRAGICON, 0, 0, 0, AfxSig_hv, &OnQueryDragIcon},
        {WM_COMMAND, (WORD)BN_CLICKED, (WORD)ID_SELECT, (WORD)ID_SELECT, AfxSig_vv, (AFX_PMSG)&OnSelect },
        {WM_COMMAND, (WORD)BN_CLICKED, (WORD)IDC_SELECT_PROCESS, (WORD)IDC_SELECT_PROCESS, AfxSig_vv, (AFX_PMSG)&OnSelectProcess },
        {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 }
};

_messageEntries 就是当前wndclass的所有消息列表

然后在整个exe中搜索符合上述描述的数据即可。

AFX_MSGMAP_ENTRY 的结构:
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的消息,整个MFC程序都可以完全还原出来
2010-12-12 17:17
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
17
不了解MFC,看来我是没法自己动手实现MFCXX(VC6-VC2010)的兼容性更新了
2010-12-12 17:39
0
雪    币: 2882
活跃值: (1326)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yjd
18
期待新版。。每次进到mfc就绕乱了-_-!!
2010-12-12 19:20
0
雪    币: 136
活跃值: (429)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
19
好工具,下个来收藏。。。。
2010-12-13 09:05
0
雪    币: 86
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
继续等更新版本哈哈
2010-12-13 12:22
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
6年前,刚学会打字,
2010-12-18 15:00
0
雪    币: 135
活跃值: (729)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
对VC5编译的好像没用.
要是能对SDK,和MFC的全系列都支持就好了:)
不过已经很好用了,谢谢!
2010-12-19 19:06
0
雪    币: 1644
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
才发现这么好用的一个利器。多谢分享。
2011-3-10 20:31
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
24
额滴神呀,04年的时候正是 MFC 的黄金岁月。
LZ 当年发达了吧。
2011-3-10 21:18
0
雪    币: 136
活跃值: (150)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
25
恩 估计是了 期待mfc 2010版本的
2011-3-10 22:33
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码