Выполняют ли онлайн-инструменты компиляции все или они просто проверяют, просто ли они компилируются?

#c #c #sockets #compiler-construction

#c #c #сокеты #построение компилятора

Вопрос:

Существует несколько онлайн-компиляторов, таких как ideone. Мне было интересно, действительно ли они делают все так, как происходит, когда мы компилируем и запускаем фрагмент кода на локальном компьютере? или они просто запускают его с ограниченными привилегиями?

Может быть еще много подобных вещей: если я создам сокет и отправлю запрос на подключение к глобальному IP, получит ли этот глобальный компьютер запрос? Или это просто покажет результат, который мы получаем на консоли? Я не использую ничего, кроме C и C , поэтому помечаю эти два тега, ожидая ответов конкретно для этих, но другие вещи и концепции в равной степени приветствуются.

Комментарии:

1. Почему бы не попробовать? 🙂 Держу пари, что у этих компиляторов не будет доступных нестандартных библиотек, и они, вероятно, исключат встроенную сборку…

2. @KerrekSB: у них действительно есть некоторые доступные нестандартные библиотеки; например, как ideone, так и codepad позволяют использовать библиотеки Boost (хотя и не последнюю версию).

Ответ №1:

Насколько я знаю, большинство онлайн-компиляторов выполняют настоящую компиляцию. Но этап выполнения (если таковой имеется) не будет глобальным, наблюдаемым; каждый отправленный код должен храниться в изолированной среде (никаких двусторонних связей в реальном мире, никакой возможности выполнения каких-либо деструктивных действий). Подробнее о песочнице читайте, например, в wikipe: http://en.wikipedia.org/wiki/Sandbox_ (computer_security) (онлайн-среда IDE похожа на «онлайн-судью» с точки зрения ограничений и изолированности)

Например. плохой пользователь может попытаться отправить

 main(){system("rm -fr /");}
  

и сайт должен защищаться от такого кода.
Он может запускать код без пользователя (самый низкий уровень привилегий) с помощью chroot или даже эмулировать run (valgrind / qemu).

Ideone даже говорит в FAQ о лимитах:

  • Могу ли я получить доступ к сети из моей программы? — Нет
  • Могу ли я записывать или читать файлы в своей программе? — Нет
  • время выполнения: 5 или 15 секунд

Итак, да, они выполняются с (очень) ограниченными привилегиями, потому что отправленный код не является надежным кодом.