捕获“运行时检查失败#0 - ESP的值不正确”

时间:2010-03-01 02:43:32

标签: c# unmanaged try-catch

因此,我从C#代码中的非托管.dll文件调用函数。根据传递给该函数的参数,它可能导致“运行时检查失败#0 - ESP的值不正确”错误。这是该函数的完全正常行为(是的,我知道这听起来很奇怪,但是忍受我)。 但是,如果发生这种情况,我希望能够处理它,就像我处理异常一样:只是优雅地失败,向用户输出消息并避免崩溃我的整个程序。 这可能吗?

1 个答案:

答案 0 :(得分:1)

如果您正在使用GS标志,则可以通过调用函数__set_security_error_handler来覆盖该行为。这允许您指定在GS标志和其他安全错误被触发时调用的函数。

我强烈建议不要这样做。任何经常破坏ESP的功能听起来都像是一个真正的问题。您还可以通过覆盖此功能来隐藏其他真正的安全问题。

更好的解决方案是将单个方法标记为裸露,并防止发生GS检查。