在我们的应用程序(c++)中,我们使用LoadLibrary加载第三方DLL。有时,这些DLL会导致异常,例如“访问冲突读取位置0x00000000..”。
是否有可能从这样的异常中恢复,例如使用try & catch或其他机制?在其他情况下,是否可以在同一进程中创建一个沙箱来抵御此类事件?
谢谢
发布于 2012-03-29 17:34:54
您可以尝试不同类型的异常处理程序:
__try
{
// Code that might cause an access violation goes here.
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
int code = _exception_code();
}但是要注意,这样的处理程序不能用在任何C++对象需要堆栈展开的例程中,因为编译器会警告你(令人恼火)。
发布于 2012-03-29 17:32:32
不是的。事实并非如此。DLL可以不受限制地访问调用它的进程上下文。您需要在它们自己的进程上下文中运行不可信任的DLL。
发布于 2012-03-29 17:53:16
在Windows下,用VisualStudio编译,可以使用SEH的机制。
__try
{
char* ptr = 0;
char val = *ptr;
}
__except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
{
std::cout<<"AV"<<std::endl;
}使用选项/EHa。
https://stackoverflow.com/questions/9922612
复制相似问题