-
-
[原创]在无用的堆栈中分析DLL版本错误
-
发表于: 2024-10-16 11:59 1324
-
导入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,发现混用后,出现的错误堆栈与遇到的问题很相似。接下来测试,看看还有没有类似的问题发生吧。暂且打完收工。
赞赏
他的文章
- 重新认识线程sleep 916
- [原创]CPU爆高,程序卡顿分析 1709
- [原创]再战堆栈损坏:Critical error detected c0000374 1271
- [原创]在无用的堆栈中分析DLL版本错误 1325
- [原创]小白也能通过特征码定位源码 2771
看原图
赞赏
雪币:
留言: