调试MFC程序的时候,每次都要去找MESSAGE_MAP里的处理函数
MESSAGE_MAP的定义
1 | BEGIN_MESSAGE_MAP(CMFChelloDlg, CDialogEx) |
AFX_MSGMAP_ENTRY结构
实际上每个BEGIN_MESSAGE都是一个AFX_MSGMAP_ENTRY结构
1 | struct AFX_MSGMAP_ENTRY |
处理函数pfn
pfn即对应MESSAGE的处理函数
通过观察AFX_MSGMAP_ENTRY结构,其有以下特征
- nMessage在{0,1024}的范围内
- nCode似乎一直都是0
- nSig是对pfn函数参数的sign,不同版本MFC也不同,范围大概在{0,100}
- pfn肯定要位于代码段
- AFX_MSGMAP_ENTRY肯定位于rdata段
通过以上限定即可找到所有处理函数pfn