静态获取MFC的MESSAGE_MAP表
调试MFC程序的时候,每次都要去找MESSAGE_MAP里的处理函数MESSAGE_MAP的定义1234567BEGIN_MESSAGE_MAP(CMFC
2015-9-19 00:9:0
Author: guage.cool(查看原文)
阅读量:17
收藏
调试MFC程序的时候,每次都要去找MESSAGE_MAP里的处理函数
MESSAGE_MAP的定义
1 2 3 4 5 6 7
| BEGIN_MESSAGE_MAP(CMFChelloDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDOK, &CMFChelloDlg::OnBnClickedOk) ON_WM_DROPFILES() END_MESSAGE_MAP()
|
AFX_MSGMAP_ENTRY结构
实际上每个BEGIN_MESSAGE都是一个AFX_MSGMAP_ENTRY结构
1 2 3 4 5 6 7 8 9
| struct AFX_MSGMAP_ENTRY { UINT nMessage; UINT nCode; UINT nID; UINT nLastID; UINT_PTR nSig; AFX_PMSG pfn; };
|
处理函数pfn
pfn即对应MESSAGE的处理函数
通过观察AFX_MSGMAP_ENTRY结构,其有以下特征
- nMessage在{0,1024}的范围内
- nCode似乎一直都是0
- nSig是对pfn函数参数的sign,不同版本MFC也不同,范围大概在{0,100}
- pfn肯定要位于代码段
- AFX_MSGMAP_ENTRY肯定位于rdata段
通过以上限定即可找到所有处理函数pfn

代码地址
https://github.com/howmp/MFCFinder
文章来源: https://guage.cool/mfc-map/
如有侵权请联系:admin#unsafe.sh