Запуск 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, чтобы сделать это за вас.

Так...

  1. Сделайте свою программу на C или C++. НЕ СВЯЗЫВАЙТЕ ЕГО С LIBSANDBOX.

  2. Убедитесь, что у вас установлен Python.

  3. Запустите пример скрипта Python со страницы libsandbox.

  4. Скрипт python загрузит libsandbox для вас. Затем он запустит программу, которую вы построили внутри песочницы.

Просто.

Полностью согласен с ответом от @user1401452. Еще несколько советов о libsandbox,

  1. Исполняемый двоичный исполняемый файл лучше связывать статически, поскольку загрузка разделяемых библиотек включает системные вызовы, такие как SYS_open(), которые по умолчанию запрещены.
  2. Написать программу на C/C++, непосредственно вызывающую базовую библиотеку песочницы (например, libsandbox), также целесообразно, хотя и немного сложнее, чем использование Pythonic-оболочки (то есть pysandbox). Эквивалент ANSI C (то есть sample2.c) примера сценария Python теперь доступен на домашней странице libsandbox.
  3. Примеры программ демонстрируют только некоторые основы libsandbox. Практические решения для песочницы обычно требуют настраиваемых политик песочницы с более сложными правилами.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я автор libsandbox

Другие вопросы по тегам