首页
社区
课程
招聘
[原创]堆栈破坏-Windows下Qt调用MFC的DLL
2023-2-13 14:17 7356

[原创]堆栈破坏-Windows下Qt调用MFC的DLL

2023-2-13 14:17
7356

因为公司的软件是使用Qt的,而第三方程序提供的DLL程序是MFC编写的。使用对方提供的Demo测试DLL,效果都是OK的。但是一个奇怪的现象是,我们的程序在开启最大优化/O2之后,程序总是崩溃在一个不可能的地方。一般出现这种问题,大部分就是堆栈产生破坏了。经过了一天的焦虑,最终锁定了问题的根本。本次记录,主要是为了后续遇到类似问题,整理一套清晰的分析思路,而不用胡乱怀疑,靠着运气在网络上各种海量搜索,然后做无效的测试验证。



如果这种问题,放在以前,肯定是怀疑编译器坏了。随着一步步跟进,终于开始有点慢慢摆脱靠互联网编程的套路了。加油加油!!!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2023-2-14 08:58 被_THINCT编辑 ,原因:
收藏
点赞4
打赏
分享
最新回复 (5)
雪    币: 1285
活跃值: (1779)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yu781129965 2023-2-13 14:48
2
1
雪    币: 59
活跃值: (2231)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NutCracker 2023-2-14 13:44
3
0
DLL中的函数难道没有相关的头文件吗?如果有,就应该有函数原型,而函数原型通常都会写明是__cdecl还是__stdcall参数传递规范。只要函数原型中有参数传递规范,你的程序编译后就不可能会有这样的bug。
雪    币: 3512
活跃值: (7840)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
_THINCT 2023-2-14 13:57
4
0
NutCracker DLL中的函数难道没有相关的头文件吗?如果有,就应该有函数原型,而函数原型通常都会写明是__cdecl还是__stdcall参数传递规范。只要函数原型中有参数传递规范,你的程序编译后就不可能会有这样的 ...
有相关头文件确实表明了这个调用约定,但是我程序跟随给的demo中的调用方式,采用的是动态调用。没有使用头文件加lib库的方式,所以遭遇这一劫。
雪    币: 3512
活跃值: (7840)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
_THINCT 2023-2-14 13:58
5
0
雪    币: 302
活跃值: (1733)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
轻装前行 2023-3-16 11:50
6
0
大神带带逆向
游客
登录 | 注册 方可回帖
返回