Это началось с этого вопроса , затем этого вопроса и теперь привело к настоящему. :)
Задача следующая: создать программу Windows, которая будет запускать другую программу в ограниченной среде. Другой программе нельзя доверять, поэтому она должна быть готова к хакерскому коду. Более конкретно:
- Ограничить доступную память некоторым X МБ (указанным в качестве параметра);
- Ограничить доступное время выполнения некоторыми X миллисекундами (задается в качестве параметра). Обратите внимание, что это время ядра + время пользователя, но не время простоя. С другой стороны, время простоя также должно быть ограничено, чтобы программа не могла бесконечно
Sleep()
.
- По окончании программы сообщайте о затраченном времени процессора, как можно точнее. Миллисекунды были бы хорошими, приемлемые сантисекунды, меньше, чем это было бы не хорошо. Циклы процессора были бы идеальными.
- Если программа дает сбой, сообщите некоторую информацию о сбое (чем больше, тем лучше, но не переусердствуйте со следами стека и т.п.).
- Желательно захватить все выходные данные программы и сообщить об этом тоже;
- Предполагается, что программа использует только текущий каталог плюс некоторые обязательные .DLL из SYSTEM32 (например, kernel.dll, user32.dll и т. Д.). Максимально ограничьте доступ к чему-либо еще. Доступ к таким вещам, как реестр и сеть, не требуется (если это не требуется для обязательных .DLL). Чем меньше доступ, тем лучше.
Это потребуется для программного обеспечения поддержки компьютерных олимпиад. Эта программа будет запускать представления участников на центральном сервере, поэтому вы можете ожидать чего угодно. Сбои будут обычным делом, и можно ожидать некоторых попыток взлома.
Итак - как бы вы занялись созданием такой программы? Что бы вы использовали? В предыдущих темах (см. Выше) стало ясно, что присоединение в качестве отладчика - плохая идея, хотя, возможно, я просто слишком неуклюж.