自制MFC消息响应定位器+原理分析
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消息响应定位器+原理分析的更多相关文章
- MFC消息响应机制 q
MFC消息响应机制分析 1 引言微软公司提供的MFC基本类库(Microsoft Foundation Classes),是进行可视化编程时使用最为流行的一个类 库.MFC封装了大部分Windows ...
- 消息队列NetMQ 原理分析1-Context和ZObject
前言 介绍 NetMQ是ZeroMQ的C#移植版本,它是对标准socket接口的扩展.它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对多种传输协议的无缝访问. 当前有2个版本正在维护,版本3 ...
- 消息队列NetMQ 原理分析3-命令产生/处理和回收线程
消息队列NetMQ 原理分析3-命令产生/处理和回收线程 前言 介绍 目的 命令 命令结构 命令产生 命令处理 创建Socket(SocketBase) 创建连接 创建绑定 回收线程 释放Socket ...
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe
消息队列NetMQ 原理分析4-Socket.Session.Option和Pipe 前言 介绍 目的 Socket 接口实现 内部结构 Session Option Pipe YPipe Msg Y ...
- 消息队列NetMQ 原理分析2-IO线程和完成端口
消息队列NetMQ 原理分析2-IO线程和完成端口 前言 介绍 目的 IO线程 初始化IO线程 Proactor 启动Procator线程轮询 处理socket 获取超时时间 从完成端口获取处理完的状 ...
- 消息队列NetMQ 原理分析5-StreamEngine、Encord和Decord
消息队列NetMQ 原理分析5-StreamEngine,Encord和Decord 前言 介绍 目的 StreamEngine 发送数据 接收数据 流程分析 Encoder V2Encoder V1 ...
- MFC消息响应机制分析
---- 摘要: ---- MFC是Windows下程序设计的最流行的一个类库,但是该类库比较庞杂,尤其是它的消息映射机制,更是涉及到很多低层的东西,我们在这里,对它的整个消息映射机制进行了系统的分析 ...
- MFC消息映射的原理:笔记
多态的实现机制有两种,一是通过查找绝对位置表,二是查找名称表:两者各有优缺点,那么为什么mfc的消息映射采用了第二种方法,而不是c++使用的第一种呢?因为在mfc的gui类库是一个庞大的继承体系,而里 ...
- ActiveMQ(2)---ActiveMQ原理分析之消息发送
持久化消息和非持久化消息的发送策略 消息同步发送和异步发送 ActiveMQ支持同步.异步两种发送模式将消息发送到broker上.同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消 ...
随机推荐
- SVN与git交互
操作的第一步,就是找到版本库,然后打开,有git的文件夹叫版本库 OrderManagement是版本库 第二步,查看日志,在版本库里内部,空白处右键,选择TortoiseGit--showlo ...
- html基础二
空标签 <br>用于分行 <hr>在 HTML 页面中创建水平线 “ctrl+/”用于在代码输入时注释 注释掉的内容将不会在浏览器上显示 这样方便在代码输入提高可读性 方便 ...
- spring data mongodb 配置遇到的几个问题
一. mongodb 2.2版本以上的配置 spring.data.mongodb.uri = mongodb://newlook:newlook@192.168.0.109:27017/admin ...
- OS实验报告——作业调度模拟程序
一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行, ...
- 详解wait和waitpid函数
#include <sys/types.h> /* 提供类型pid_t的定义 */ #include <sys/wait.h> pid_t wait(int *status) ...
- 跟我学Windows Azure 五 使用Cloub Service连接Blob Service完成图片的上传
首先,我们创建一个云服务项目,用来演示我们的blob存储 下来我们修改我们我们云服务的名字 我们需要添加一个空的WebForm的项目 点击完成,我们可以看到我们的解决方案已经添加完成 下来我们需要添加 ...
- (转) Awesome - Most Cited Deep Learning Papers
转自:https://github.com/terryum/awesome-deep-learning-papers Awesome - Most Cited Deep Learning Papers ...
- C#子类调用基类构造备忘
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace First ...
- Ajax 提交session实效跳转到完整的登陆页面
在spring security 中 Ajax提交时,session超时,局部加载登陆页面,为解决这个问题,重写ajax提交,返回的是modeview或者没有制定datatype时; 如果检测到加载到 ...
- IIS7下使用4.0框架集成模式URLRewriter重写中文URL乱码问题
解决方法: 1 url中中文先通过Server.UrlEncode编码 2 修改网站编码 3.更改URLRewriter.net中源码 找到RewriterEngine类中 private strin ...