google-nativeclient - NaCl sel_ldr 行为和系统调用

标签 google-nativeclient

在 Google 的 NaCl( native 客户端)SDK 中有 sel_ldr.py(安全 Sprite 加载程序),它允许用户运行创建的 NaCl 可执行文件 (.nexe)通过 NaCl 或 PNaCl 工具链。 sel_ldr.py 在运行这些 .nexe 文件时到底做了什么?

具体来说,sel_ldr 如何处理 NaCl 可执行文件的操作系统调用?阅读 NaCl 文档的大部分信息都与使用 pepper API 创建 Chrome 浏览器可移植应用程序有关,并且没有太多关于 sel_ldr 服务运行时如何处理这些 NaCl 可执行文件的详细信息。

我创建了许多 NaCl 可执行文件,它们在 sel_ldr 中运行时可以创建目录、文件、管道、 sleep ,并使用各种其他系统调用,并且它可以正常工作。我知道 native 客户端本身会监视系统调用。监视是通过使用 pepper API 完成的,还是 sel_ldr.py 拦截系统调用并将其重定向到 NaCl 在其服务运行时沙箱中自己的系统调用实现?

最佳答案

NaCl 是一个小型操作系统,可将调用调入底层操作系统。内部沙箱不能进行常规系统调用(验证器强制执行此操作),因此它必须通过 NaCl 的 trampoline 系统调用,该系统调用跳转到受信任的代码,该代码执行与常规操作系统在调用底层操作系统自己的系统调用之前执行的类似类型的检查.

Pepper API 调用只是另一种类型的系统调用,但它们仅在嵌入到 Chrome 中时才存在。 Pepper 调用实际上是 NaCl 模块和 Chrome 进程之间的进程间通信。

整体实现是服务运行时,很好的描述可以在original NaCl research paper中找到.有一个旧站点(不幸的是不是当前文档)带有 anatomy of a syscall , 来源显然是开放的。

关于google-nativeclient - NaCl sel_ldr 行为和系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25650979/

相关文章:

javascript - Chrome 中 chrome.app.isInstalled 始终返回 false

c++ - 在使用 NaCl 的 C++ 中,如何按值对 JSON 对象进行排序?

c++ - 一个端口Cave Story(NXEngine)如何到Native Client

google-chrome - Pepper API 或 nacl_io 中的源特定多播

c++ - 在 Google Native-Client 中调整音量

c - 使用 PPB_ImageData Google Native Client 的 C 示例程序

c++ - 检查 google-nativeclient 文件系统中是否存在目录?

javascript - Chrome Native Client进程模型

javascript - Javascript中的变量怎么可以是函数,却不能被调用呢?

google-chrome-extension - 使用Make编译Chrome应用时,没有规则会导致目标错误