在Google Native Client上运行已编译的文件

Aru*_*x Z 11 javascript c c++ linux google-nativeclient

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

Native Client是一个沙箱,用于高效安全地在浏览器中运行已编译的C和C++代码,与用户的操作系统无关.

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


我不限制Native Client的答案.任何可以做这种工作的机制都适合我.

JF *_*ien 16

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

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

  • 解决了"我想知道是否有任何办法仍然可以使用其他机制完成任务"的赏金:我是PNaCl项目的技术主管.如果您找到一种方法来运行`.exe`或`.deb`文件,而不是使用二进制翻译器作为App Runtime for Chrome(ARC),那么请告诉我们:您在Chrome上找到了一个漏洞并可能声称来自Chrome漏洞奖励计划! (5认同)