运行库沙盒

Running libsandbox

本文关键字:运行      更新时间:2023-10-16

我目前正在开发一个在线C/C++/汇编编译器,我偶然发现了一个名为libsandbox的不错软件。这让我能够运行在线编写的代码,编译它并拦截系统调用(如果它们被发出)。

首先,我对 Linux 环境有点陌生。我已经下载了 tar.gz,解压缩了它,配置了它并安装它。它运行没有任何错误,但现在我很难运行它。我应该如何在此沙盒中运行 C/C++ 程序?我必须向它提供 .c/.cpp 文件吗?编译后的可执行文件?

这可能是一个非常愚蠢的问题。我已经在互联网上搜索了如何做到这一点,并阅读了随附的自述文件,但他们没有给我线索。

提前感谢!

沙盒仅适用于 linux。您必须先使用库函数实际创建沙盒,然后告诉沙盒运行您的程序。

此 python 示例展示了如何从 python 执行此操作。"#targeted 程序"行显示您将在哪里指定实际应用程序的名称。

def main(args):
    # sandbox configuration
    cookbook = {
        'args': args[1:],               # targeted program
        'stdin': sys.stdin,             # input to targeted program
        'stdout': sys.stdout,           # output from targeted program
        'stderr': sys.stderr,           # error from targeted program
        'quota': dict(wallclock = 30000,# 30 sec
                      cpu = 2000,       #  2 sec
                      memory = 8388608, #  8 MB
                      disk = 1048576)}  #  1 MB
# create a sandbox instance and execute till end
msb = MiniSandbox(**cookbook)
msb.run()
# verbose statistics
sys.stderr.write("result: %(result)sncpu: %(cpu)dmsnmem: %(mem)dkBn" % 
    msb.probe())
return os.EX_OK

我建议转到libsandbox下载页面并在那里获取完整的 sample2.py 文件,然后使用python脚本运行沙箱。这将比制作一个C++或C程序来为你做这件事更容易。

所以。。。

  1. 制作 C 或 C++ 程序。不要将其链接到 LIBSANDBOX。

  2. 确保你安装了python。

  3. 从 libsandbox 页面运行示例 python 脚本。

  4. python脚本将为您加载libsandbox。然后它将运行您在沙箱中构建的程序。

简单。

完全同意@user1401452的答案。关于libsandbox的更多提示,

  1. 沙盒化的二进制可执行文件最好静态链接,因为加载共享库涉及默认情况下禁止的系统调用,如 SYS_open()。
  2. 编写直接调用核心沙箱库(即libsandbox)的C/C++程序也是可行的 - 尽管比使用Pythonic包装器(即pysandbox)复杂一些。示例python脚本的ANSI C等效项(即sample2.c)现在可以在libsandbox的主页上找到。
  3. 示例程序仅演示了 libsandbox 的一些基本要素。实用的沙盒解决方案通常需要具有更复杂规则的自定义沙盒策略。

免责声明:我是libsandbox的作者

简短而一般的答案是:要使用lib任何东西,你编写一个利用该库的程序 - 你#include <anything.h>源代码并与-lanything开关链接。您不应该找到任何可执行文件,除非它是库的测试套件或示例程序。

由于某种原因,我无法找到"libsandbox",所以我的回复可能非常不准确。