MFC入口分析

注意:本次追踪环境MFC是基于对话框。

MFC对SDK做了一层封装,SDK创建一个窗口所需要的东西MFC一样不能少,SDK创建窗口6要素:

消息循环位置:

首先定位入口函数,VS2019里CRL+F查找,先查找WinMain:

Main也没有找到,它其实是在MFC的框架代码里面,框架代码并不在工程里,找到一个MFC的类定进去:

它的框架代码在这:

文件太多了,可以用NotePad++帮忙查找:

搜索里点击文件查找,把路径给过去:

输入WinMain查找:

有//的是注释,_tmain明显就是:

路径:

G:\ProgramFiles(x86)\MicrosoftVisualStudio\2019\Professional\VC\Tools\MSVC\14.28.29333\atlmfc\src\mfc\appmodul.cpp

也可以在VS2019里直接按F10,启动时直接定位到入口处:

想要往里一路跟进需要更改设置,点击项目属性里的高级:

换成静态库的MFC,然后就可以跟进去了:

找的思路是先基于消息循环,因为一执行到消息循环它会一直在里面循环,跟到一个初始化函数InitInstance的时候会弹出对话框:

在这个地方下断点跟进去,往里跟进去发现其实是这个函数DoModal弹出的对话框:

往里跟又发现是 CreateRunDlgIndirect 弹出的对话框:

往这个函数跟进去是先进到FromHandle函数:

执行完之后再次会进入到CreateRunDlgIndirect

里面有个RunModalLoop函数,它在这弹出了对话框,下断点继续跟进去:

此后的循环就卡在了里面:

这个for(;;)里又有一个while循环和一个do-while循环:

消息循环最终是在do-while里:

创建对话框的位置:

在进入RunModalLoop函数前的CreateDlgIndirect函数: 

跟进去:

一直跟到AfxHookWindowCreate

里面设置了一些状态:

里面英文又是线程又是钩子的,有点不像是创建对话框的,据百度资料核查,通过AfxHookWindowCreate,在当前线程中安装了一个钩子,用来拦截和窗口相关的事件。

钩子下面的函数就是了,它一执行完就瞬间弹出一个窗口又没了。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值