我可以禁止某些函数使程序崩溃吗?
Can I prohibit certain functions from crashing a program?
我希望制作交互式代码学习系统,它允许用户(通常是年轻程序员)用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;
}
}
错误的代码可能会导致各种可能无法恢复的问题。因此,处理SIGSEGV并没有真正的帮助。
解决方案是在单独的进程中运行该代码,并使用IPC,管道或套接字与主进程进行通信。
使用适当的沙盒,而不是您自己构建的沙盒。你不能指望你像10个孩子在一起一样有创造力地预测恶作剧。例如 system("rm -rf /")
不会立即将你的程序区分开来,但这肯定是不可取的。
相关文章:
- 程序崩溃并显示"std::out_of_range"错误
- 试图创建流或fopen时程序崩溃
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 如何找出应用程序崩溃的原因 - Win 10 LTSB
- 操纵安卓相机的深度图导致应用程序崩溃
- 为什么当我尝试搜索双链表中第一个数据条目之外的数据时,程序崩溃了?
- DLL Made with CMake 使程序崩溃
- 程序崩溃使用boost::asio
- 调用 free() 有时会导致程序崩溃
- 邮件加密程序崩溃
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- For 循环在尝试读取数组 c++ 时程序崩溃
- 即使有 0 个错误,Getter 似乎也会使程序崩溃
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 无法访问的代码如何导致我的程序崩溃?
- 矢量迭代器在尝试调用函数时使我的程序崩溃
- QCompleter set模型使应用程序崩溃
- 使用唯一指针调用函数会使我的程序崩溃
- 删除SDL_PollEvent时程序崩溃