最近,我不得不处理应用程序因问题签名而崩溃的情况,例如:
Problem Event Name:BEX64
...
Fault Module Name:StackHash_1dc2
Fault Module Version:0.0.0.0
Fault Module Timestamp:00000000
Exception Offset:0000000000000000
Exception Code:c0000005
Exception Data:0000000000000008
OS Version:6.1.7600.2.0.0.274.10
Run Code Online (Sandbox Code Playgroud)
有一些参考资料BEX代表“缓冲区溢出异常”,并且在某种程度上与数据执行保护相关。还提到了术语“分支扩展错误”。但没有太多具体内容。我能找到的最好的内容是 technet 文章中 DEP 错误签名示例中的简短提及:
指示缓冲区溢出 (/GS) 或 DEP 异常(BEX64 指示 64 位版本的 Windows 上的缓冲区溢出 (/GS) 或 DEP 异常)
来源:《数据执行预防》
因此,我的问题。什么是BEX64?在什么情况下会产生这样一个名称的事件?是否有所有错误签名代码的列表?
顺便说一句,我发现的问题是由于 AVX 指令集在 CPU 级别上可用,但在操作系统级别(Windows 2008 R2 RTM)上不受支持。正在加载的 DLL 之一使用了msvcr120!log函数,该函数正在调用 AVX 指令之一,从而导致崩溃。