2014-09-03 19 views
3

在Google的NaCl(本机客户端)SDK中有sel_ldr.py(安全elf加载程序),它允许用户运行通过NaCl或PNaCl工具链创建的NaCl可执行文件(.nexe)。 sel_ldr.py在运行这些.nexe文件时究竟做了什么?NaCl sel_ldr行为和系统调用

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

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

回答

4

NaCl是一种小型操作系统,它可以调用底层操作系统。内部沙箱不能执行常规系统调用(验证器强制执行此操作),所以它必须通过NaCl的蹦床系统调用,它跳转到可信代码,执行类似于常规操作系统在调用底层操作系统自己的系统调用之前执行的类型检查。

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

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

+1

Stack Overflow不会让我发布超过2个链接,所以这里是源代码引用:[开发者公开的头文件](http://src.chromium.org/viewvc/native_client/trunk/src/native_client/ src/trusted/service_runtime/include/sys/nacl_syscalls.h)和[x86-32上下文切换](http://src.chromium.org/viewvc/native_client/trunk/src/native_client/src/trusted/service_runtime/ arch/x86_32/nacl_syscall_32.S)代码。 – 2014-09-03 21:20:32

+1

这是一个很好的答案!我非常高兴Chrome开发人员使用Stack Overflow。当devenv得到一个编译器时,我会很高兴地跳舞。 – 2015-01-12 04:28:56