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

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

2023-2-13 14:17
8270

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



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


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

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