zx_restricted_enter

摘要

进入受限模式

声明

#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 上,上下文放置在 x0 中,原因代码放置在 x1 中。所有其他寄存器目前均未定义,包括堆栈指针。

在 riscv64 中,上下文位于 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 不是有效的用户地址或选项。 为非零值。

ZX_ERR_BAD_STATE 受限模式寄存器状态无效。

另请参阅