运行 在 Google 本机客户端上编译的文件
Run compiled files on Google Native Client
如何运行直接使用Google本地客户端(PNaCl)编译文件?它尝试检查他们的 documentation。它说 -
Native Client is a sandbox for running compiled C and C++ code in the browser efficiently and securely, independent of the user’s operating system.
但是在他们的文档中,他们只处理应用程序的源代码。有没有办法直接运行编译代码?我想要 运行 个扩展名为 .exe
和 .deb
的文件
我的回答不限于 Native Client。任何可以完成此类工作的机制都适合我。
您不能 运行 在 NaCl 或 PNaCl 中预编译代码。您必须使用 the SDK 提供的编译器。主要有以下三个原因:
- NaCl 是一个执行沙箱,它依赖于以非常特殊的方式制作机器代码(x86-32、x86-64、ARM、MIPS)。从 CPU 的角度来看,这是常规机器代码,但允许沙箱 运行 验证器并确保代码不会做任何恶意的事情。这称为软件故障隔离,并在 this paper. The other ISA sandboxes are also documented.
中进行了解释
- PNaCl 以 NaCl 为目标,但它是一种与体系结构无关的中间表示。这意味着您发送可以被认为是字节码的内容,浏览器会根据用户的机器确定要生成哪种类型的机器码(x86-32、x86-64、ARM、MIPS)。开发人员不会生成 4 个二进制文件。
- 在上述两种情况下,代码可以在 Windows、MacOSX、Linux、ChromeOS 和(通常不发货)Android 上按原样执行。这意味着 NaCl 沙盒将自身呈现为操作系统,并提供相同的 API。这些 API 与其他操作系统不同,尽管它们非常接近 POSIX,尤其是当您使用 nacl_io.
时
以上几点需要您使用SDK提供的编译器。
由于系统是图灵完备的,因此 运行 为其他体系结构或操作系统构建的二进制文件在技术上是可行的。这就是 QEMU does, what Rosetta did, what Transmeta did, and what the Android Runtime for Chome (ARC) 的作用。这通常需要对所有操作系统调用进行二进制翻译和仿真。这在技术上很难实现,并且通常会产生严重的性能成本。我不建议探索这个选项。
正如@JFBastien 所指出的,仿真是在浏览器环境中执行预编译本机代码的唯一选择。但这仍然是一个选择。根据您对性能的要求,它甚至可能是一个可行的选择。
例如,单击 here 以在您的浏览器中启动模拟器 运行ning Windows(虽然是非常旧的版本)。
例如,从菜单中选择 notepad.exe(使用键盘上的向下光标键)并按 Enter。你有它:一个未经修改的、预编译的、原生的 notepad.exe 运行ning 在你的浏览器中! (甚至可能比这个 OS 刚出现的时候还要快)。
网上有很多用 Javascript 编写的模拟器。 运行 一个小型 Linux 发行版,具有可用的性能,甚至网络(!)、图形和声音实际上是可能的。查看 OpenRISC emulator。您甚至可以 运行 一个 ssh 守护进程并从您的本地计算机登录它!
如何运行直接使用Google本地客户端(PNaCl)编译文件?它尝试检查他们的 documentation。它说 -
Native Client is a sandbox for running compiled C and C++ code in the browser efficiently and securely, independent of the user’s operating system.
但是在他们的文档中,他们只处理应用程序的源代码。有没有办法直接运行编译代码?我想要 运行 个扩展名为 .exe
和 .deb
的文件
我的回答不限于 Native Client。任何可以完成此类工作的机制都适合我。
您不能 运行 在 NaCl 或 PNaCl 中预编译代码。您必须使用 the SDK 提供的编译器。主要有以下三个原因:
- NaCl 是一个执行沙箱,它依赖于以非常特殊的方式制作机器代码(x86-32、x86-64、ARM、MIPS)。从 CPU 的角度来看,这是常规机器代码,但允许沙箱 运行 验证器并确保代码不会做任何恶意的事情。这称为软件故障隔离,并在 this paper. The other ISA sandboxes are also documented. 中进行了解释
- PNaCl 以 NaCl 为目标,但它是一种与体系结构无关的中间表示。这意味着您发送可以被认为是字节码的内容,浏览器会根据用户的机器确定要生成哪种类型的机器码(x86-32、x86-64、ARM、MIPS)。开发人员不会生成 4 个二进制文件。
- 在上述两种情况下,代码可以在 Windows、MacOSX、Linux、ChromeOS 和(通常不发货)Android 上按原样执行。这意味着 NaCl 沙盒将自身呈现为操作系统,并提供相同的 API。这些 API 与其他操作系统不同,尽管它们非常接近 POSIX,尤其是当您使用 nacl_io. 时
以上几点需要您使用SDK提供的编译器。
由于系统是图灵完备的,因此 运行 为其他体系结构或操作系统构建的二进制文件在技术上是可行的。这就是 QEMU does, what Rosetta did, what Transmeta did, and what the Android Runtime for Chome (ARC) 的作用。这通常需要对所有操作系统调用进行二进制翻译和仿真。这在技术上很难实现,并且通常会产生严重的性能成本。我不建议探索这个选项。
正如@JFBastien 所指出的,仿真是在浏览器环境中执行预编译本机代码的唯一选择。但这仍然是一个选择。根据您对性能的要求,它甚至可能是一个可行的选择。
例如,单击 here 以在您的浏览器中启动模拟器 运行ning Windows(虽然是非常旧的版本)。
例如,从菜单中选择 notepad.exe(使用键盘上的向下光标键)并按 Enter。你有它:一个未经修改的、预编译的、原生的 notepad.exe 运行ning 在你的浏览器中! (甚至可能比这个 OS 刚出现的时候还要快)。
网上有很多用 Javascript 编写的模拟器。 运行 一个小型 Linux 发行版,具有可用的性能,甚至网络(!)、图形和声音实际上是可能的。查看 OpenRISC emulator。您甚至可以 运行 一个 ssh 守护进程并从您的本地计算机登录它!