Запуск скомпилированных файлов в Google Native Client

Как выполнить скомпилированные файлы напрямую с помощью Google Native Client (PNaCl)? Он попытался проверить свою документацию . Он сказал, что -

Нативный клиент - это песочница для выполнения скомпилированного кода C и С++ в браузере эффективно и надежно, независимо от операционной системы пользователей.

Но в своей документации они имеют дело только с источниками приложения. Есть ли способ запустить скомпилированный код напрямую? Я хочу запускать файлы с расширениями .exe и .deb


Я не ограничиваю ответ для собственного клиента. Любой механизм, который может выполнять такую ​​работу, будет работать для меня.

Ответ 1

Вы не можете запускать предварительно скомпилированный код в NaCl или PNaCl. Вы должны использовать компиляторы, предоставленные SDK. Для этого есть три основные причины:

  • NaCl - это изолированная песочница исполнения, которая в значительной степени основана на разработке машинного кода (x86-32, x86-64, ARM, MIPS). Это обычный машинный код с точки зрения процессора, но позволяет песочнице запускать валидатор и следить за тем, чтобы код не мог сделать ничего злонамеренного. Это называется Software Fault Isolation и объясняется в этой статье. Другие песочницы ISA также документированы.
  • PNaCl нацеливает NaCl, но является промежуточным представлением архитектуры-агностик. Это означает, что вы отправляете то, что можно считать байт-кодом, и браузер определяет, какой тип машинного кода (x86-32, x86-64, ARM, MIPS) должен генерироваться на основе пользовательской машины. Разработчик не генерирует 4 бинарных файла.
  • В обоих случаях код может выполняться как есть на Windows, MacOSX, Linux, ChromeOS и (в то время как обычно не поставляется) Android. Это означает, что песочница NaCl представляет собой операционную систему и предлагает те же API. Эти API отличаются от других ОС, хотя они довольно близки к POSIX, особенно если вы используете nacl_io.

Вышеупомянутые пункты требуют, чтобы вы использовали компиляторы, предоставленные SDK.

Технически возможно запускать двоичные файлы, созданные для других архитектур или операционных систем, поскольку система завершена. Что делает QEMU, что Rosetta, что Transmeta, и что позволяет Android Runtime for Chome (ARC). Обычно это требует бинарного перевода и эмуляции всех вызовов операционной системы. Это технически сложно реализовать и часто имеет серьезные эксплуатационные издержки. Я не рекомендую изучать этот вариант.

Ответ 2

Как отметил @JFBastien, эмуляция является единственной возможностью выполнить предварительно скомпилированный собственный код в среде браузера. Но это вариант, тем не менее. В зависимости от ваших требований к производительности, это может быть даже жизнеспособным вариантом.

Нажмите здесь, например, чтобы загрузить эмулятор под управлением Windows (очень старая версия) в вашем браузере.

Из меню выберите, например, notepad.exe(используя клавишу курсора вниз на клавиатуре) и нажмите enter. Там у вас есть: немодифицированный, предварительно скомпилированный, native notepad.exe, запущенный внутри вашего браузера! (и, возможно, даже быстрее, чем в тот день, когда эта ОС была новой).

Есть много эмуляторов, написанных на Javascript по всему миру. Запуск небольшого дистрибутива Linux с полезной производительностью и даже с помощью сети (!), Графика и звук на самом деле возможны. Проверьте эмулятор OpenRISC. Вы даже можете запустить демон ssh и войти в него с вашей локальной машины!