摘要
進入嚴格篩選模式
宣告
#include <zircon/syscalls-next.h>
zx_status_t zx_restricted_enter(uint32_t options,
uintptr_t vector_table_ptr,
uintptr_t context);
說明
進入受限模式,不再處於一般執行緒狀態。如果成功,目前的執行緒將透過傳入 vector_table_ptr 的進入點返回一般模式。
vector_table_ptr 必須位於目前的使用者位址空間內。context 可以是任何值。這個值可做為從受限模式返回至一般模式的值。
options 是一個位元向量,包含下列 0 個其他項目:
ZX_RESTRICTED_OPT_EXCEPTION_CHANNEL
表示在受限模式下遇到的任何例外狀況,都應使用例外狀況管道傳送。如未顯示此選項,則任何由程序偵錯工具處理的例外狀況將會導致在一般模式下使用vector_table_ptr
向量控制項,並將原因代碼設為ZX_RESTRICTED_REASON_EXCEPTION
。
vector_table_ptr 中函式的引數因架構而異:
在 x64 中,背景資訊會放在 rdi 中,並在 rsi 中加上原因代碼。 所有其他暫存器目前未定義,包括堆疊指標。
在 arm64 上,情境位於 x0 中,原因代碼則位於 x1 中。所有其他暫存器目前未定義,包括堆疊指標。
在 riscv64 中,context 位於 a0 中,原因代碼則位於 a1 中。所有其他暫存器目前未定義,包括堆疊指標。
原因代碼包含恢復正常模式執行功能的原因。這個原因代碼可能是 ZX_RESTRICTED_REASON_SYSCALL
或 ZX_RESTRICTED_REASON_EXCEPTION
之一。
共用程序
使用 ZX_PROCESS_SHARED
選項或透過 zx_process_create_shared()
建立的程序會有兩個不同的位址空間。一個程序由多個程序共用,而另一個程序則僅限於特定程序。如果進入恢復模式的執行緒屬於這類程序,系統會更新執行緒的有效位址空間,如下所示:
- 進入受限模式時,執行緒的有效位址空間會設為處理程序中的受限位址空間。
- 結束受限模式時,執行緒的有效位址空間會設為處理程序的共用位址空間。
權限
無 (目前)
傳回值
成功時不會回傳值,因為目前的執行緒會透過 vector_table_ptr 間接傳回。如果失敗,系統會傳回負值錯誤值。
錯誤
ZX_ERR_INVALID_ARGS
vector_table_ptr 不是有效的使用者地址,或是 options 非零。
ZX_ERR_BAD_STATE
受限模式的註冊狀態無效。
系統「未提供」ZX_ERR_NOT_SUPPORTED
ZX_RESTRICTED_OPT_EXCEPTION_CHANNEL
,且目前架構未實作向量例外狀況。