В некоторых языках (Java, C # без небезопасного кода, ...) невозможно (должно быть) невозможно повредить память - нет ручного управления памятью и т. Д. Это позволяет им ограничивать ресурсы (доступ к файлам, доступ к сети , максимальное использование памяти, ...) приложениям довольно легко - например, Java-апплеты (веб-запуск Java). Иногда это называется песочницей.
Мой вопрос: возможно ли это с нативными программами (например, написанными на небезопасном для памяти языке, таком как C, C ++; но без исходного кода)? Я не имею в виду простую обходную песочницу или антивирусную программу.
Я думаю о двух возможностях:
- запускать приложение от имени другого пользователя ОС, устанавливать ограничения для этого пользователя. Недостаток - много пользователей, для каждой комбинации параметров, прав доступа?
- (каким-то образом) функции ограничения (OS API), которые можно вызывать
Я не знаю, позволяют ли какие-либо возможности (по крайней мере, теоретически) в полной защите, без возможности обхода.
Редактировать: меня больше интересует теория - мне все равно, например. некоторые ОС имеют недокументированные функции, или как изолировать любое приложение в данной ОС. Например, я хочу поместить приложение в песочницу и разрешить только две функции: получить char из консоли, положить char в консоль. Как это можно сделать нерушимо, без возможности обхода?
Упомянутые ответы:
- Google Native Client, использует в разработке подмножество x86 - вместе с (возможно?) PNaCl - переносным нативным клиентом
- полная виртуальная машина - очевидно, излишняя, представьте десятки программ ...
Другими словами, может ли собственный код (небезопасный доступ к памяти) использоваться в ограниченной среде, например в веб-браузере со 100% (по крайней мере в теории) безопасностью?
Edit2: Собственный клиент Google - это именно то, что мне нужно - любой язык, безопасный или небезопасный, работающий на собственной скорости, песочница, даже в веб-браузере. Все используют любой язык, который вы хотите, в Интернете или на рабочем столе.