Если это обучающая услуга, поэтому клиентам просто нужно протестировать разный код сборки и не нужно выполнять операции за пределами их программы (например, чтение или изменение файловой системы), то другой вариант разрешить только выбранное подмножество инструкций. В частности, не разрешайте никаких инструкций, которые могут выполнять системные вызовы, и допускать только ограниченные инструкции по передаче управления (например, без возврата, ветви только для меток, определенных в коде пользователя и т. Д.). Вы также можете предоставить некоторые ограниченные способы возврата вывода, такие как вызов библиотеки, который печатает любое значение в определенном регистре. Не допускайте объявления данных в разделе текста (кода), так как произвольный машинный код может быть введен как числовые определения данных.
Хотя я написал «другой вариант», это должно быть в дополнение к другим, которые предлагали другие респонденты, например, песочница.
Этот метод подвержен ошибкам и, если используется, должен быть тщательно и тщательно разработан. Например, некоторые ассемблеры допускают несколько инструкций в одной строке. Поэтому просто обеспечение того, чтобы текст в первом поле инструкции линии был приемлемым, пропустит оставшиеся инструкции на линии.
Угадайте, что произойдет, если кто-то отправит исходный код для вируса! –
Запустите его в одноразовой отбрасываемой виртуальной машине, которая не монтирует какие-либо fs с хоста и не имеет какой-либо сети или просто автоматически отображает окно после каждого запуска :) –
Я не уверен, почему сборка. Наверняка, вы не дадите результирующей программе работать на вашем сервере? – harold