Ограниченная функция с libsandbox и pysandbox
Я использую sample2.py
перечислены здесь https://github.com/openjudge/sandbox в качестве оболочки для вызова библиотек песочницы (иначе. libsandbox
&& pysandbox
).
Ниже приведен мой код C++
#include <stdio.h>
int main(){
return 0;
}
Результат, когда я запускаю sample2.py
является
result: RF
cpu: 2ms
mem: 288kB
Может кто-нибудь сказать мне, какие изменения я должен сделать в оболочке, чтобы сделать эту работу?
2 ответа
RF
код результата был, скорее всего, из-за неожиданных системных вызовов для файловых операций (т.е. SYS_open()
, SYS_close()
, SYS_stat()
...) Это происходит, когда (1) целевая программа фактически выполняет файловые операции, и (или) когда (2) она была динамически связана и должна быть загружена .so
библиотеки во время выполнения. Поскольку ваша целевая программа не вызывает файловые операции, она относится к последнему случаю.
Затем, чтобы решить RF
результат, либо,
- статически связать целевую программу, чтобы избежать зависимости от разделяемых библиотек; или же,
- расширить правила политики в сценарии оболочки для обработки соответствующих
SYSCALL
/SYSRET
События;
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я автор libsandbox
,
Для статического связывания системных вызовов мы используем коды системных вызовов, например, 0,1,2 3-sys_read 1-sys_exit и т. Д. Перейдите по ссылке для получения дополнительной информации о списке системных вызовов с кодом: http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html
Я изменяю это:
x86_64 = множество ([0,1,5,8,9,10,11,12,16,21,25,63,89,158,219,231])
за это:
x86_64 = множество ([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