摘要
進入嚴格篩選模式
宣告
#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 是位元向量,當中包含下列零個項目:
ZX_RESTRICTED_OPT_EXCEPTION_CHANNEL
表示所有例外狀況 處於受限模式時,應透過例外狀況傳送 頻道。如果沒有此選項,就表示 程序偵錯工具會正常將向量控制項設為vector_table_ptr
模式,原因代碼設為ZX_RESTRICTED_REASON_EXCEPTION
。
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
個受限模式註冊狀態無效。
您未提供 ZX_ERR_NOT_SUPPORTED
ZX_RESTRICTED_OPT_EXCEPTION_CHANNEL
,且
目前架構不會實作向量例外狀況。