我可以禁止某些函数使程序崩溃吗?

Can I prohibit certain functions from crashing a program?

本文关键字:程序 崩溃 函数 禁止 我可以      更新时间:2023-10-16

我希望制作交互式代码学习系统,它允许用户(通常是年轻程序员)用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 /")不会立即将你的程序区分开来,但这肯定是不可取的。