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 是一個位元向量,包含下列 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_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,且目前架構未實作向量例外狀況。

另請參閱