我正在尝试使用 WinDbg 查找“非法指令”异常 (0xc000001d) 的根本原因。该项目是用 VC++2015 构建的。我从两次测试运行中得到了两次内存转储。
现在,我发现这两个转储都是正确的:
- 异常指向“
movq mmword ptr [ecx], xmm0
”指令 - xmm0 包含零
- 异常发生在对象构造函数中
- 地址在 DS 内
- 地址属于看起来有效的堆条目
- 指向对象的地址正在被构造,所以它似乎试图将零赋给看起来也有效的 obj.m_data 成员
我不知道去哪里更远,所以我会很感激任何指示。
升级版:
...
movq xmm0,mmword ptr [esi]
lea ecx,[edi+94h]
movq mmword ptr [ecx],xmm0 ; << this causes the exception