【问题标题】:Run compiled files on Google Native Client在 Google Native Client 上运行编译文件
【发布时间】:2015-08-29 10:50:53
【问题描述】:

如何使用 Google Native Client (PNaCl) 直接运行编译后的文件?它尝试检查他们的documentation。它说-

Native Client 是一个沙盒,用于在浏览器中高效、安全地运行编译的 C 和 C++ 代码,独立于用户的操作系统。

但在他们的文档中,他们只处理应用程序的来源。有没有办法直接运行编译的代码?我想运行带有.exe.deb 扩展名的文件


我并没有限制对 Native Client 的回答。任何可以做这种工作的机制都对我有用。

【问题讨论】:

  • .exe 只能在 Windows 上运行。所以它不可能独立于用户的操作系统来运行。
  • 在 Linux 中,.deb 文件不是直接可执行的格式,而是由 Debian 打包系统解压缩的存档,用于在 Linux 系统上安装某些东西。
  • @Wimmel Systems 图灵完备。因此,这并非不可能。

标签: javascript c++ c linux google-nativeclient


【解决方案1】:

您不能在 NaCl 或 PNaCl 中运行预编译的代码。您必须使用the SDK 提供的编译器。这主要有三个原因:

  • NaCl 是一个执行沙箱,它以一种非常特殊的方式依赖于制作机器代码(x86-32、x86-64、ARM、MIPS)。从 CPU 的角度来看,这是常规机器代码,但允许沙箱运行验证器并确保代码不会做任何恶意行为。这称为软件故障隔离,在this paper 中有说明。其他 ISA 沙盒是 also documented
  • 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) 所启用的。这通常需要对所有操作系统调用进行二进制转换和仿真。这在技术上难以实现,并且通常具有严重的性能成本。我不建议探索这个选项。

【讨论】:

  • 解决赏金问题“我想知道是否有任何方法仍然可以使用其他机制完成任务”:我是 PNaCl 项目的技术负责人。如果您找到了一种方法来运行 .exe.deb 文件,而不是使用二进制转换器作为 Chrome 的 App Runtime (ARC) 确实如此,请告诉我们:您在 Chrome 上发现了一个漏洞,并且可能可以从Chrome 漏洞奖励计划!
  • 我的意思是我不只是将答案限制在 chrome 或 PNaCl。我想知道除此之外是否还有其他方法。甚至可能是可以做到这一点的本机应用程序。如果我找到任何使用 chrome 的方法,我一定会及时通知您。顺便说一句,您已经通过创建 PNaCl 达到了一个里程碑。继续努力!
  • @ArulxZ 如果您愿意在网络之外运行,那么您可以使用插件,但这超出了最初的问题。如果没有一些认真的仿真,它仍然不能移植(跨 ISA 和跨操作系统)。
【解决方案2】:

正如@JFBastien 所指出的,仿真是在浏览器环境中执行预编译本机代码的唯一选择。但它仍然是一种选择。根据您对性能的要求,它甚至可能是一个可行的选择。

例如,单击here 以在您的浏览器中启动运行 Windows(虽然是非常旧的版本)的模拟器。

例如,从菜单中选择 notepad.exe(使用键盘上的向下光标键)并按 Enter。你有它:一个未经修改的、预编译的、在浏览器中运行的本机 notepad.exe! (而且可能比这个操作系统刚推出时更快)。

网络上有很多用 Javascript 编写的模拟器。运行具有可用性能甚至网络(!)、图形和声音的小型 Linux 发行版实际上是可能的。查看OpenRISC emulator。您甚至可以运行 ssh 守护程序并从本地计算机登录!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    相关资源
    最近更新 更多