C# 捕捉;运行时检查失败“0-ESP值不正确”;

C# 捕捉;运行时检查失败“0-ESP值不正确”;,c#,unmanaged,try-catch,C#,Unmanaged,Try Catch,因此,我从C#代码中的非托管.dll文件调用一个函数。根据传递给该函数的参数,它可能会导致“运行时检查失败#0-ESP的值不正确”错误。这是函数的完全正常行为(是的,我知道这听起来很奇怪,但请耐心等待)。 但是,如果发生这种情况,我希望能够处理它,就像处理异常一样:只是优雅地失败,向用户输出消息,避免整个程序崩溃。 这可能吗?如果您正在使用GS标志,您可以通过调用函数\uu set\u security\u error\u handler来覆盖该行为。这允许您指定当GS标志和其他安全错误被触发时

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

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

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

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


如果我只是将函数调用放在一个单独的线程中怎么办?有没有办法检测线程是否崩溃?