2010-03-01 43 views
2

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

回答

1

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

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

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

+0

如果我只是坚持在一个单独的线程函数调用?有没有办法检测线程是否崩溃? – 2010-03-01 02:47:20

相关问题