运行库沙盒
Running libsandbox
我目前正在开发一个在线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程序来为你做这件事更容易。
所以。。。
制作 C 或 C++ 程序。不要将其链接到 LIBSANDBOX。
确保你安装了python。
从 libsandbox 页面运行示例 python 脚本。
python脚本将为您加载libsandbox。然后它将运行您在沙箱中构建的程序。
简单。
完全同意@user1401452的答案。关于libsandbox的更多提示,
- 要沙盒化的二进制可执行文件最好静态链接,因为加载共享库涉及默认情况下禁止的系统调用,如 SYS_open()。
- 编写直接调用核心沙箱库(即libsandbox)的C/C++程序也是可行的 - 尽管比使用Pythonic包装器(即pysandbox)复杂一些。示例python脚本的ANSI C等效项(即sample2.c)现在可以在libsandbox的主页上找到。
- 示例程序仅演示了 libsandbox 的一些基本要素。实用的沙盒解决方案通常需要具有更复杂规则的自定义沙盒策略。
免责声明:我是libsandbox
的作者
简短而一般的答案是:要使用lib任何东西,你编写一个利用该库的程序 - 你#include <anything.h>
源代码并与-lanything
开关链接。您不应该找到任何可执行文件,除非它是库的测试套件或示例程序。
由于某种原因,我无法找到"libsandbox",所以我的回复可能非常不准确。
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 代码在main()中运行,但在函数中出现错误
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何在运行中期切换GTK CSS style_context
- 如何在MS Visual Studio 2019中运行QT UI
- 如何通过cpp程序运行shell脚本
- IPC使用多个管道和分支进程来运行Python程序
- 删除指向指针的指针是运行时错误吗
- 如何用参数值调用函数(仅在运行时已知)
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- c++中的指针和运行时错误
- 在C应用程序中运行C++(带有STL)函数
- 运行程序时出现问题
- 控制允许动态运行c++的并发操作数
- 无法获取菜单选择以运行函数.C++