摘要
進入嚴格篩選模式
宣告
#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。
vector_table_ptr 函式中的引數會依架構而異:
在 x64 上,context 會放在 rdi 中,原因代碼則位於 rsi。 所有其他暫存器目前均未定義,包括堆疊指標。
在 arm64 上,context 會放置在 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
個受限模式註冊狀態無效。