Запуск libsandbox
В настоящее время я работаю над онлайн-компилятором C/C++/ Assembly, и я наткнулся на замечательную часть программного обеспечения, которая называется libsandbox. Это позволяет мне запускать написанный онлайн код, компилировать его и перехватывать системные вызовы, если они сделаны.
Прежде всего, я новичок в среде Linux. Я скачал tar.gz, распаковал его, настроил и установил. Это запустилось без каких-либо ошибок, но теперь мне трудно его запустить. Как мне запустить программу C / C++ в этой песочнице? Нужно ли мне кормить его.c/.cpp файлом? Исполняемый файл после компиляции?
Это может быть очень глупый вопрос. Я искал в интернете, как это сделать, и прочитал включенный файл readme, но они не дали мне подсказки.
Заранее спасибо!
3 ответа
Краткий и общий ответ: чтобы использовать libчто угодно, вы пишете программу, которая использует эту библиотеку - вы #include <anything.h>
в источник и ссылку с -lanything
переключатель. Вы не должны находить исполняемые файлы, если это не набор тестов или пример программы для библиотеки.
По какой-то причине я не смог найти "libsandbox", поэтому мой ответ может быть очень неточным.
Песочница только для Linux. На самом деле вы должны сначала создать песочницу, используя библиотечные функции, а затем указать песочнице запустить вашу программу.
Этот пример Python показывает, как сделать это из Python. Строка "#targeted program" показывает, где вы будете указывать название вашего фактического приложения.
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)s\ncpu: %(cpu)dms\nmem: %(mem)dkB\n" % \
msb.probe())
return os.EX_OK
Я бы порекомендовал перейти на страницу загрузки libsandbox и получить полный файл sample2.py, а затем просто запустить песочницу с помощью скрипта python. Это будет проще, чем создавать программы на C++ или C, чтобы сделать это за вас.
Так...
Сделайте свою программу на C или C++. НЕ СВЯЗЫВАЙТЕ ЕГО С LIBSANDBOX.
Убедитесь, что у вас установлен Python.
Запустите пример скрипта Python со страницы libsandbox.
Скрипт python загрузит libsandbox для вас. Затем он запустит программу, которую вы построили внутри песочницы.
Просто.
Полностью согласен с ответом от @user1401452. Еще несколько советов о libsandbox,
- Исполняемый двоичный исполняемый файл лучше связывать статически, поскольку загрузка разделяемых библиотек включает системные вызовы, такие как SYS_open(), которые по умолчанию запрещены.
- Написать программу на C/C++, непосредственно вызывающую базовую библиотеку песочницы (например, libsandbox), также целесообразно, хотя и немного сложнее, чем использование Pythonic-оболочки (то есть pysandbox). Эквивалент ANSI C (то есть sample2.c) примера сценария Python теперь доступен на домашней странице libsandbox.
- Примеры программ демонстрируют только некоторые основы libsandbox. Практические решения для песочницы обычно требуют настраиваемых политик песочницы с более сложными правилами.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я автор libsandbox