我想做一個交互式的代碼學習系統,它允許用戶(通常是年輕的程序員)用C++語言編寫一個函數的內容,發送給服務器,然後將它編譯成動態庫並從主程序調用。我可以禁止某些功能崩潰程序嗎?
程序期望函數根據給定的參數返回正確的答案。
當然,會有一些孩子,會導致分段錯誤等錯誤。 (服務器是Linux供電)。
那麼,我可以讓信號處理程序,將退出功能?
我想什麼來完成:
for (int i = 0; i < PLAYER_NUM; i++) {
snprintf(buf, sizeof(buf), "players/%s.so", player[i]);
handle = dlopen(buf, RTLD_LAZY);
add[i] = (int (*)(int, int))dlsym(handle, "sum");
} // that was simply loading of functions from libraries.
for (int x = 0; x < 10; x++)
for (int i = 0; i < PLAYER_NUM; i++) {
if(failed[i]) continue;
ret = add[i](x, 5);
if(sigfault_received() || res != (x + 5)) {
failed[i] = true;
}
}
關於你所能做的就是忍受它將要崩潰的事實,並找出方法1)確保它不會在系統的其他部分損壞系統的其餘部分,並且2)當(如果)發生。我的直接反應是在虛擬機中運行他們的代碼。 –
添加了「沙箱」標籤,因爲這是此類保護的通用名稱。 – MSalters