Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ LLVM:在程序内实现安全的多实例环境_C++_C_Multithreading_Llvm - Fatal编程技术网

C++ LLVM:在程序内实现安全的多实例环境

C++ LLVM:在程序内实现安全的多实例环境,c++,c,multithreading,llvm,C++,C,Multithreading,Llvm,我是LLVM的初学者,但不熟悉编程本身。对于我的一个项目,我需要一个安全的多实例环境。为此,我选择LLVM。我在谷歌上搜索了一个星期,什么也没找到 所以,这就是我的问题:在VM中发生空指针取消引用或类似情况(正常情况下会导致SIGSEGV)后,是否可以使用加载到的相同位代码运行多个ExecutionEngine并继续运行 例如: 1) 创建一个内部有问题的简单程序 int*p=NULL; *p++ 2) 将其编译为位代码 $clang-c-emit llvm-o null.bc null.c 3

我是LLVM的初学者,但不熟悉编程本身。对于我的一个项目,我需要一个安全的多实例环境。为此,我选择LLVM。我在谷歌上搜索了一个星期,什么也没找到

所以,这就是我的问题:在VM中发生空指针取消引用或类似情况(正常情况下会导致SIGSEGV)后,是否可以使用加载到的相同位代码运行多个ExecutionEngine并继续运行

例如:

1) 创建一个内部有问题的简单程序

int*p=NULL;
*p++

2) 将其编译为位代码

$clang-c-emit llvm-o null.bc null.c

3) 在其他程序中运行它(类似


语境;
字符串错误;
Module*m=ParseBitcodeFile(MemoryBuffer::getFile(“null.bc”)、上下文和错误);
ExecutionEngine*ee=ExecutionEngine::create(m);
函数*func=ee->FindFunctionNamed(“main”);
类型定义无效(*PFN)();
PFN PFN=重新解释强制转换(ee->getPointerToFunction(func));
pfn();

4) 捕获异常(显然是SIGSEGV),但不要使主程序崩溃

有翻译吗?还是用准时制?(MCJIT显然不起作用)

同样,应该可以运行许多位代码实例(在单独的线程中)


提前谢谢

可行吗?在某种程度上。您可以为SIGSEGV设置一个信号处理程序,并在那里杀死有问题的线程并忽略错误

但这是防弹的(更不是一个好主意)?不。你正在运行的程序显然是有缺陷的或恶意的——在它们最终导致SIGSEV或其他错误之前,你无法知道它们还搞砸了什么。因此,您在同一进程中编写的任何错误处理代码都可能被恶意程序覆盖,对此您无能为力


在执行不受信任、有缺陷的代码时,您应该像现在其他人一样(主要的例子是浏览器供应商):在自己的进程中运行所有东西,并使用进程间通信。这将您的受信任代码与不受信任的代码区分开来。

我只确定(在VM中运行的)代码不是恶意的,因为它是由我编写的。但我不能确定它是没有错误的。显然SIGSEGV不会是一个被捕获的单一信号。@用户基本问题是相同的,无论您是有恶意代码还是普通的旧错误代码,恶意代码更可能以有趣的新方式利用它。因此,LLVM不能用于解决这样的伪沙盒问题?对于本机代码,没有任何东西可以用来解决这个问题(如果不考虑恶意代码,沙箱半自动运行在JVM上)。一旦您可以写入进程中的任意内存位置,您就丢失了。如果有任何合理的通用解决方案来解决此问题,并不是每个浏览器供应商都会选择进程外插件体系结构。好的,我理解。但它是否仍然可以用于生成相同代码的多个实例(它们都不会在分离的线程中使用任何显著的系统资源,例如文件系统IO或类似的资源)?