软件崩溃分析与解决
2024-05-31 15:54:35 作者:佚名 前些天,一位朋友找到我,向我寻求帮助。他的软件在客户那边出现了崩溃,根据Windows事件日志显示崩溃发生在clr(Common Language Runtime)中。他提供了dump文件,请我帮忙定位问题,于是我决定使用WinDbg进行分析。
崩溃在clr中通常意味着发生了严重的异常,即ExecutionEngineException。通过使用!t命令,我验证了这一点。
接下来,我运用!analyze -v来观察问题。
根据分析,发现出现了接口Stub调用的崩溃。分析了汇编代码后发现,崩溃是由于this指针为null导致的。
为了找到这个答案,只能查看clr源代码。简化后的代码显示了VirtualCallStubManager::FindStubManager方法的核心逻辑。
接下来需要找到stubStartAddress的地址,这只需要提取ResolveWorker方法的第一个参数callSite即可。