2014-09-03 51 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