欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]静态获取MFC的MESSAGE_MAP表

[原创]静态获取MFC的MESSAGE_MAP表

调试MFC程序的时候,每次都要去找MESSAGE_MAP,所以写个程序自动去找
MESSAGE_MAP大概长这样


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结构

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_PTR nSig;       // signature type (action) or pointer to message #

  AFX_PMSG pfn;    // routine to call (or special value)

};


其中pfn是真正的消息处理函数,通过观察这个结构由以下特征
nMessage在{0,1024}的范围内
nCode似乎一直都是0
nSig是对pfn函数参数的sign,不同版本MFC也不同,范围大概在{0,100}
pfn肯定要位于代码段
还有一个特征是AFX_MSGMAP_ENTRY肯定位于rdata段。
通过以上限定,来静态抓取信息

MFCFinder_bin.zip
MFCFinder_src.zip

上传的附件 BaiduShurufa_2015-9-19_0-6-24.png
MFCFinder_bin.zip
MFCFinder_src.zip

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功