在Google的NaCl(本机客户端)SDK中有sel_ldr.py
(安全精灵加载程序),它允许用户运行通过NaCl或PNaCl工具链创建的NaCl可执行文件(.nexe
)。运行这些sel_ldr.py
文件时.nexe
到底做了什么?
具体来说,sel_ldr如何处理NaCl可执行文件的操作系统调用?阅读NaCl文档大部分信息都与使用pepper API创建Chrome浏览器可移植应用程序有关,并且没有太多关于sel_ldr服务运行时如何处理这些NaCl可执行文件的细节。
我创建了许多NaCl可执行文件,在sel_ldr中运行时可以创建目录,文件,管道,睡眠,并使用各种其他系统调用,并且它可以正常工作。我知道本机客户端本身监视系统调用。是通过使用pepper API进行监控还是sel_ldr.py拦截并将系统调用重定向到其服务运行时沙箱中NaCl自身的系统调用实现?
答案 0 :(得分:4)
NaCl是一个小型操作系统,可以调用对底层操作系统的调用。内部沙箱不能进行常规系统调用(验证器强制执行此操作),因此必须通过NaCl的蹦床系统调用,这些系统调用跳转到可信代码,该代码执行与常规操作系统在调用之前执行类似类型的检查底层操作系统自己的系统调用。
Pepper API调用只是另一种类型的系统调用,但它们仅在嵌入Chrome时才会出现。 Pepper调用实际上是NaCl模块和Chrome进程之间的进程间通信。
整体实现是服务运行时,可以在original NaCl research paper中找到一个好的描述。有anatomy of a syscall的旧网站(遗憾的是不是当前的文档),来源显然是开放的。