我如何开始使用libsandbox

我试图写一个简单的判断,将编译和执行用户提交的c文件。 我在stackoverflow上find了libsandbox和一个问题 。

我已经安装了Python模块,并按照说明我试图运行一个用C编写的hello世界程序

➜ sandbox git:(V_0_3_x) ✗ ./hello Hello World% ➜ sandbox git:(V_0_3_x) ✗ python sample2.py hello result: RF cpu: 2ms mem: 288kB 

正如你所看到的,当我在沙箱中运行程序时,我没有得到任何输出。 如果有人能告诉我如何正确使用它,那将是非常好的。

Solutions Collecting From Web of "我如何开始使用libsandbox"

libsandbox的示例代码禁止系统调用文件操作,如open()stat()close() 。 也就是说,您需要(1) 静态 链接 hello world程序以避免打开共享库(如libc.so )等文件,或者(2)编写允许相关系统调用的自定义沙箱策略。 在https://github.com/liuyu81/TR-OJA-201209A上可以找到有关自定义沙箱策略的一些示例。

免责声明:我是libsandbox的作者。

RF结果代码很可能是由于文件操作(即SYS_open(),SYS_close(),SYS_stat(),…))的意外系统调用所致。 当(1)目标程序实际执行文件操作时,(或)(2)动态链接并需要在运行时加载.so库时,会发生这种情况。 由于你的目标程序没有调用文件操作,它属于后一种情况。

然后,为了解决RF结果,

静态链接目标程序以避免依赖共享库; 或者扩展包装脚本中的策略规则以处理相关的SYSCALL / SYSRET事件;

对于静态链接系统调用,我们使用系统调用代码为ex 0,1,2 3-sys_read 1-sys_exit等等。通过链接获取更多详细信息链接系统调用列表与代码: http://docs.cs.up。 ac.za/programming/asm/derick_tut/syscalls.html

我改变这个:

 x86_64=set([0,1,5,8,9,10,11,12,16,21,25,63,89,158,219,231]) 

为了这:

 x86_64=set([0,1,2,3,4,5,8,9,10,11,12,16,21,25,63,89,158,219,231,]) 

在sample2.py中,它的工作原理。

修改sample2.py是在我的github存储库链接: https : //github.com/palashmaran/libsandbox.git