Native Client

维基百科,自由的百科全书
跳转到导航 跳转到搜索
Google Native Client
File:Google Chrome icon (March 2011).svg
开发者Google,以及其他开发者
当前版本SDK: Pepper 45 (2015年7月10日,​10年前​(2015-07-10), Client:
预览版本0.5(2011年7月28日,​14年前​(2011-07-28
源代码库
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
编程语言C语言C++
引擎
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    操作系统Cross-platform: Microsoft Windows, Linux, Mac OS, Chrome OS
    类型利用沙盒技术,让机器码浏览器上运行
    许可协议New BSD license
    网站code.google.com/p/nativeclient

    Google Native Client(缩写为NaCl),是一个由谷歌所发起的开放原始码计划,采用BSD许可证。它采用沙盒技术,让Intel x86ARMMIPS子集的机器码直接在沙盒上运行。它能够从浏览器直接运行程式机器码,独立于使用者的作业系统之外,使Web应用程式可以用接近于机器码运作的速度来执行,同时兼顾安全性。其功能类似于微软ActiveX,但是ActiveX只支援Windows系统。

    Google将这项功能合并在Chrome OS之下开发。它也可以被用来开发安全的浏览器外挂程式。

    2017年5月31日,Google宣布放弃PNaCl转向WebAssembly[2]

    技术内容[编辑]

    NaCl使用Newlib作为它的C标准函式库,但它也支援GNU C 函式库

    它最初只支援x86平台,但目前也支援ARM平台与x86-64

    沙盒技术[编辑]

    NaCl运用沙盒技术以防止外来(第三方)机器码影响系统安全;特别是在x86平台上运用记忆体区段,限制外挂程式所能读写的记忆体范围。[3]

    由于ARM与x86-64长模式不支援记忆体区段,因此在这些平台上NaCl的记忆体写入地址是由沙盒过滤。[4]

    机器码验证器[编辑]

    NaCl运用机器码验证器(Code Validator)来保证只有安全机器码能在系统执行。由于x86/x86-64是复杂指令集指令长度不一,透过控制流程可能隐藏非安全机器码,从而使验证十分耗时。NaCl运用固定长度的16或32位元组的指令束(Instruction Bundle),使机器码验证器设计简单(只有约600行C语言)和高效率;[3] [5] 而运用指令束只是失去5%的执行效率。

    应用软件的移植[编辑]

    NaCl支援单指令流多数据流指令(如SSE3DNow!)及多执行绪介面,应用软件一般只需简单的修改便可以移植到NaCl平台;在2009年一个发布会上,NaCl开发人员示范一个为NaCl平台的移植而修改了20行原始码的H264解码器软件。[6]

    参考资料[编辑]

    1. ^ Chrome Revision 213999. [2015-01-07]. (原始内容存档于2021-03-08). 
    2. ^ Goodbye PNaCl, Hello WebAssembly!. Chromium Blog. [2017-05-31]. (原始内容存档于2017-05-30) (en-US). 
    3. ^ 3.0 3.1 Native Client: A Sandbox for Portable, Untrusted x86 Native Code
    4. ^ Adapting Software Fault Isolation to Contemporary CPU Architectures (PDF). [2011-09-12]. (原始内容存档 (PDF)于2011-07-23). 
    5. ^ Index of /trunk/src/native_client/src/trusted/validator/x86. [2011-09-12]. (原始内容存档于2012-07-20). 
    6. ^ Native CPU Performance in the Browser with Google Native Client (PDF). [2011-09-16]. (原始内容存档 (PDF)于2019-02-17). 

    外部链接[编辑]