Поведение NaCl sel_ldr и системные вызовы
В Google NaCl (родной клиент) SDK есть sel_ldr.py
(безопасный загрузчик эльфов), который позволяет пользователю запускать исполняемый файл NaCl (.nexe
), созданный с помощью набора инструментов NaCl или PNaCl. Что именно делает sel_ldr.py
делать во время работы этих .nexe
файлы?
В частности, как sel_ldr обрабатывает вызовы операционной системы исполняемых файлов NaCl? При чтении документации по NaCl большая часть информации относится к использованию API перца для создания переносимых приложений браузера Chrome, и нет подробных сведений о том, как среда выполнения службы sel_ldr обрабатывает эти исполняемые файлы NaCl.
Я создал много исполняемых файлов NaCl, которые во время работы в sel_ldr могут создавать каталоги, файлы, pipe, sleep и использовать другие системные вызовы, и это работает правильно. Я знаю, что родной клиент сам контролирует системные вызовы. Осуществляется ли этот мониторинг с помощью API перца или sel_ldr.py перехватывает и перенаправляет системные вызовы на собственные реализации системных вызовов NaCl в своей изолированной программной среде времени выполнения службы?
1 ответ
NaCl - это небольшая операционная система, которая скрывает вызовы базовой операционной системы. Внутренняя песочница не может выполнять регулярные системные вызовы (это проверяет валидатор), поэтому она должна пройти через системные вызовы батута NaCl, которые переходят к доверенному коду, который выполняет аналогичные виды проверки, которые обычные операционные системы выполняют перед вызовом собственного системного вызова базовой операционной системы.,
Вызовы Pepper API - это просто еще один тип системных вызовов, но они присутствуют только при внедрении в Chrome. В действительности вызовы Pepper - это межпроцессное взаимодействие между модулем NaCl и процессами Chrome.
Общая реализация - это сервисная среда, хорошее описание можно найти в оригинальной исследовательской работе NaCl. Есть более старый сайт (к сожалению, не текущая документация) с анатомией системного вызова, и источник, очевидно, открыт.