我正在制作一个使用动态代码重新加载的小型游戏引擎。更新功能由dll提供。每当找到新的dll时,它都会与新的更新函数一起加载。问题是内存错误仍然可能发生,因此段错误会占用整个引擎。我问是否有办法处理这种情况并关闭dll等以便从中恢复。我知道插件通过在一个单独的进程中运行来解决这个问题但是如果可能的话我宁愿不这样做。
答案 0 :(得分:1)
一般来说,没有。
假设您正在使用传统的preg_match('/iframe src="([^"]+)"/', $value, $match);
$url = str_replace('https://www.youtube.com/embed/','',$match[1]);
$url = str_replace('?rel=0&enablejsapi=1','',$url);
return '<img src="https://img.youtube.com/vi/' . $url . '/mqdefault.jpg"/>';
运行时DLL导入方法或等效方法,则会将DLL明确导入address space of the calling process。 DLL代码具有与主机应用程序本身一样多的访问主机应用程序的内存,因此即使在崩溃之前它也可以破坏主机应用程序的状态。你唯一能做的就是崩溃并完成整个过程。
要保护主机应用程序,您必须咬住子弹并在子进程或沙箱中加载库。否则你就会隐含地信任DLL做正确的事情。
顺便说一句,这已经很好地回答了here。