首页
社区
课程
招聘
[原创]在无用的堆栈中分析DLL版本错误
发表于: 2024-10-16 11:59 1385

[原创]在无用的堆栈中分析DLL版本错误

2024-10-16 11:59
1385

导入dump文件,使用!analyze -v命令,然后kv
图片描述
看到的可分析的内容太少了,于是使用.ecxr切入到正确的上下文,接着使用kv查看堆栈
图片描述
发现最上面的栈帧执行反汇编

1
5494ce94 8b10  mov     edx,dword ptr [eax]  ds:002b:506d8c7c=????????

其中eax所指向的内存位无效内存。

查看对应指令的上下文和对应源码的关系。
图片描述
互相参考之后,发现eax应该是ebp+8所指对象的虚函数,而ebp+8是源码中的receiver.结合上面提到的无效内存,也就是receiver指针对象中出现了无效内存。
此时原因找到了,但是因为没有得到有效的className和objectName,所以依然无法准确定位具体哪个模块出问题了。于是继续观察反汇编上下文,居然发现了一个无关的函数:
图片描述
其实应该左右部分的代码是对应关系,所以右边的反汇编理应是QString::operator=才对,这就说明dll版本可能出问题了。

突然想到我们的程序改写了Qt5Core.dll,可能和官方的Qt5Core.dll有混用。
图片描述

后面自己做了一个小Demo,发现混用后,出现的错误堆栈与遇到的问题很相似。接下来测试,看看还有没有类似的问题发生吧。暂且打完收工。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//