我是LLVM的初學者,但本身並沒有編程。對於我的一個項目,我需要一個安全的多實例環境。我選擇LLVM。我搜索了一個星期,沒有發現任何東西。LLVM:在程序中實現安全的多實例環境
所以,這是我的問題:是否有可能運行多個ExecutionEngine的相同的位代碼加載到並繼續運行,即使在空指針解引用或類似的東西(這在正常情況下導致SIGSEGV)發生在VM中。
例如:
1)創建一個簡單的程序與內部
int* p = NULL; *p++;
2)編譯的一個問題它位碼
$ clang -c -emit-llvm -o null.bc null.c
3)內運行它其他程序(如
LLVMContext context; string error; Module *m = ParseBitcodeFile(MemoryBuffer::getFile("null.bc"), context, &error); ExecutionEngine *ee = ExecutionEngine::create(m); Function* func = ee->FindFunctionNamed("main"); typedef void (*PFN)(); PFN pfn = reinterpret_cast<PFN>(ee->getPointerToFunction(func)); pfn();
)
4)捕獲一個異常(顯然是SIGSEGV),但不會崩潰主程序。
是否有可能有翻譯嗎?或者與JIT?位碼的(MCJIT顯然是行不通的)
再次,它應該是可以運行許多情況下(在單獨的線程)。
在此先感謝!
我只是確保代碼(在虛擬機上運行)不是惡意的,因爲它是我寫的。但我無法確定它是沒有問題的。顯然,SIGSEGV不會是一個單一的信號捕捉。 – user3355546
@user無論您是否有惡意代碼或只是普通的老bug代碼,基本問題都是一樣的,惡意代碼更有可能以有趣的新方式利用它。 – Voo
那麼,LLVM不能用來解決這種僞沙箱問題? – user3355546