Вопрос по assembly, c++, c – Запуск libsandbox

2

В настоящее время я работаю над онлайн-компилятором C / C ++ / Assembly, и я наткнулся на замечательную часть программного обеспечения, которая называется libsandbox. Это позволяет мне запускать письменный онлайн-код, компилировать его и перехватывать системные вызовы, если они сделаны.

Прежде всего, я новичок в среде Linux. Я скачал tar.gz, распаковал его, настроил и установил. Это запустилось без каких-либо ошибок, но теперь мне трудно его запустить. Как мне запустить программу на C / C ++ в этой песочнице? Нужно ли кормить его .c / .cpp файлом? Исполняемый файл после компиляции?

Это может быть очень глупый вопрос. Я искал в Интернете, как это сделать, и прочитал включенный файл readme, но они не дали мне подсказки.

Заранее спасибо!

Ваш Ответ

3   ответа
4

Песочница только для Linux. На самом деле вы должны сначала создать песочницу, используя библиотечные функции, а затем указать песочнице запустить вашу программу.

Этот пример Python показывает, как сделать это из Python. Строка & quot; #targeted program & quot; показывает, где вы будете указывать название вашего фактического приложения.

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. Make your C or C++ program. DO NOT LINK IT TO LIBSANDBOX.

  2. Make sure you have python installed.

  3. Run the sample python script from the libsandbox page.

  4. The python script will load the libsandbox for you. Then it will run the program you have built inside the sandbox.

Просто.

Спасибо за ваш ответ! Я постараюсь запустить скрипт Python и сообщу, работает ли он! :) Devos50
1 & lt; & lt; 64 голоса за "НЕ СВЯЗАТЬ ЭТО С LIBSANDBOX" , Это чертовски важно, и 90% людей не могут внедрить «песочницу» из-за отсутствия этой точки. Я помню, что пропустил & quot; НЕ СВЯЗАТЬ ЭТО С LIBSANDBOX & quot; и впустую мои 3 дня гуглил.
1

Краткий и общий ответ: использовать libanything, вы пишете программу, которая использует эту библиотеку - вы#include <anything.h> в источник и ссылку с-lanything переключатель. Вы не должны находить какие-либо исполняемые файлы, если это не набор тестов или пример программы для библиотеки.

Я не смог найти "libsandbox" по какой-то причине, поэтому мой ответ может быть очень неточным.

3

libsandbox,

The binary executable to be sandboxed is better linked statically, because loading shared libraries involves system calls, like SYS_open(), that are forbidden by default. To write a C/C++ program directly invoking the core sandbox library (i.e. libsandbox) is also viable -- though a bit more complex than using the Pythonic wrapper (i.e. pysandbox). An ANSI C equivalent (i.e. sample2.c) of the sample python script is now available at libsandbox's homepage. The sample programs only demonstrate some essentials of libsandbox. Practical sandboxing solutions typically requires customized sandbox policies with more complex rules.

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

Похожие вопросы