mfc里面有张消息映射表(MESSAGE_MAP),消息都是通过这张表来分发到相应函数里的。

这个是我自制的定位器,从vc6.0到现在的2013生成的mfc都可以用,全静态扫描并已处理动态基址.

下面来看MESSAGE_MAP结构:

struct AFX_MSGMAP_ENTRY
{
        UINT nMessage;   
        UINT nCode;         
        UINT nID;             
        UINT nLastID;       
        UINT_PTR nSig;   
        AFX_PMSG pfn;   
};

pfn就是指向响应的位置,每一个继承CWnd的类都会对应一组消息映射表,表总是处在.rdata段,我认为可以最后通过一张全为0的空表来判断是否结束,下面来看怎么找到这张表.

方法1

mfc消息的流程很长,随便一个button按下要经过十多个函数才能到相应位置,十多个函数指的是r3的,算上r0的还要更多,有兴趣的话你就在响应函数里下个端点然后看它栈帧.

在那么多函数里有个关键的函数OnWndMsg(),这个函数里面判断过来的是什么消息,然后进行分发。 它会调用GetMessageMap()来获得MESSAGE_MAP数组的位置,可以通过它调用时的特征定位,调用时总是call   dword ptr [eax+30h],进call后只有一句话mov eax,xxx然后就retn。xxx就指向MESSAGE_MAP数组的位置。还有就是我通过实际分析时发现一个规律就是一个GetMessageMap()前后往往正是别的类的GetMessageMap()。

方法2

这个结构有三个关键的地方

1、 nMessage        消息id

2、 nID,nLastID   控件id,一般情况下这两个值是相等的

3、 pfn                    已经说过了

举个button按下的例子

nMessage = WM_COMMAND

nCode = 0

nID = 1001这个id可以在资源节里找到,具体自己查pe结构

nLastID = 1001同上

nSig = 0x38这个牵扯到的东西有点多,对我们定位意义不大,先无视它

pfn = 4074F0 这个是我OnButtonXXX()的地址

通过这些特征就可以在.rdata里面查找了

作者qq1454322323

自制MFC消息响应定位器+原理分析的更多相关文章

  1. MFC消息响应机制 q

    MFC消息响应机制分析 1 引言微软公司提供的MFC基本类库(Microsoft Foundation Classes),是进行可视化编程时使用最为流行的一个类 库.MFC封装了大部分Windows ...

  2. 消息队列NetMQ 原理分析1-Context和ZObject

    前言 介绍 NetMQ是ZeroMQ的C#移植版本,它是对标准socket接口的扩展.它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对多种传输协议的无缝访问. 当前有2个版本正在维护,版本3 ...

  3. 消息队列NetMQ 原理分析3-命令产生/处理和回收线程

    消息队列NetMQ 原理分析3-命令产生/处理和回收线程 前言 介绍 目的 命令 命令结构 命令产生 命令处理 创建Socket(SocketBase) 创建连接 创建绑定 回收线程 释放Socket ...

  4. 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe

    消息队列NetMQ 原理分析4-Socket.Session.Option和Pipe 前言 介绍 目的 Socket 接口实现 内部结构 Session Option Pipe YPipe Msg Y ...

  5. 消息队列NetMQ 原理分析2-IO线程和完成端口

    消息队列NetMQ 原理分析2-IO线程和完成端口 前言 介绍 目的 IO线程 初始化IO线程 Proactor 启动Procator线程轮询 处理socket 获取超时时间 从完成端口获取处理完的状 ...

  6. 消息队列NetMQ 原理分析5-StreamEngine、Encord和Decord

    消息队列NetMQ 原理分析5-StreamEngine,Encord和Decord 前言 介绍 目的 StreamEngine 发送数据 接收数据 流程分析 Encoder V2Encoder V1 ...

  7. MFC消息响应机制分析

    ---- 摘要: ---- MFC是Windows下程序设计的最流行的一个类库,但是该类库比较庞杂,尤其是它的消息映射机制,更是涉及到很多低层的东西,我们在这里,对它的整个消息映射机制进行了系统的分析 ...

  8. MFC消息映射的原理:笔记

    多态的实现机制有两种,一是通过查找绝对位置表,二是查找名称表:两者各有优缺点,那么为什么mfc的消息映射采用了第二种方法,而不是c++使用的第一种呢?因为在mfc的gui类库是一个庞大的继承体系,而里 ...

  9. ActiveMQ(2)---ActiveMQ原理分析之消息发送

    持久化消息和非持久化消息的发送策略 消息同步发送和异步发送 ActiveMQ支持同步.异步两种发送模式将消息发送到broker上.同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消 ...

随机推荐

  1. UE4 Windows平台部署游戏到IOS 第一部分

    UE4 Version 4.11.2 or 4.12.2 方法步骤: 1.申请IOS开发者账号,大概三个工作日左右激活. 2.下载iTunes 3.创建项目因为是在Windows平台,根据官方的提示只 ...

  2. zookeeper的安装(图文详解。。。来点击哦!)

    zookeeper的安装(图文详解...来点击哦!) 一.服务器的配置 三台服务器: 192.168.83.133   sunshine 192.168.83.134   sunshineMin 19 ...

  3. 【Cocos2d-x 3.x】 调度器Scheduler类源码分析

    非个人的全部理解,部分摘自cocos官网教程,感谢cocos官网. 在<CCScheduler.h>头文件中,定义了关于调度器的五个类:Timer,TimerTargetSelector, ...

  4. Git分布式版本管理工具基本使用方法

    一.Git简介 早先linux内核代码托管在BitKeeper,这个是商业的,但是免费给linux社区使用: linux社区有个人试图破解BitKeeper,被BitKeeper发现后不再免费提供使用 ...

  5. [BZOJ 3123]森林

    这题和 COT1 一定有 JQ 喵~ 线段树的启发式合并,每次要连接两个点时就对比较小的那棵树暴力 DFS 一边 然后均摊时间依旧是 logn 的,均摊真是世界上最邪恶的东西了…… 然后这题的数据是要 ...

  6. 用Windows PowerShell 控制管理 Microsoft Office 365

    如果想要通过PowerShell控制管理Office365,首先要安装Microsoft Online Services Sign-In Assistant 7.0,链接如下 Microsoft On ...

  7. (转) Awesome Deep Learning

    Awesome Deep Learning  Table of Contents Free Online Books Courses Videos and Lectures Papers Tutori ...

  8. (转) Deep Learning Research Review Week 2: Reinforcement Learning

      Deep Learning Research Review Week 2: Reinforcement Learning 转载自: https://adeshpande3.github.io/ad ...

  9. go语言的命令行库

    命令行应用通常很小,程序猿们也不喜欢为它编写注释.所以一些额外的工作,如解析参数有个合理的库来帮忙做就好了.https://github.com/urfave/cli 这个项目因此而生.安装:go g ...

  10. iscsi与multipath

    2016-10-01/21:07:24 http://www.cnblogs.com/wuchanming/p/4019660.htmlhttp://czmmiao.iteye.com/blog/20 ...