首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从异常中恢复

从异常中恢复
EN

Stack Overflow用户
提问于 2012-03-29 17:29:18
回答 6查看 1.1K关注 0票数 0

在我们的应用程序(c++)中,我们使用LoadLibrary加载第三方DLL。有时,这些DLL会导致异常,例如“访问冲突读取位置0x00000000..”。

是否有可能从这样的异常中恢复,例如使用try & catch或其他机制?在其他情况下,是否可以在同一进程中创建一个沙箱来抵御此类事件?

谢谢

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-03-29 17:34:54

您可以尝试不同类型的异常处理程序:

代码语言:javascript
复制
__try
{
    // Code that might cause an access violation goes here. 

}
__except (EXCEPTION_EXECUTE_HANDLER)
{
    int code = _exception_code();

}

但是要注意,这样的处理程序不能用在任何C++对象需要堆栈展开的例程中,因为编译器会警告你(令人恼火)。

票数 1
EN

Stack Overflow用户

发布于 2012-03-29 17:32:32

不是的。事实并非如此。DLL可以不受限制地访问调用它的进程上下文。您需要在它们自己的进程上下文中运行不可信任的DLL。

票数 4
EN

Stack Overflow用户

发布于 2012-03-29 17:53:16

在Windows下,用VisualStudio编译,可以使用SEH的机制。

代码语言:javascript
复制
__try
{
  char* ptr = 0;
  char val = *ptr;
}
__except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
{
  std::cout<<"AV"<<std::endl;
}

使用选项/EHa

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9922612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档