zx_restricted_enters

摘要

進入嚴格篩選模式

宣告

#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_SYSCALLZX_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,且 目前架構不會實作向量例外狀況。

另請參閱