摘要
进入受限模式
声明
#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_SYSCALL
、ZX_RESTRICTED_REASON_EXCEPTION
之一。
共享进程
使用 ZX_PROCESS_SHARED
选项或通过 zx_process_create_shared()
创建的进程
具有两个不同的地址空间。一个由多个进程共享,另一个
只限于特定进程当要进入受限模式的线程属于此类进程时,该线程的有效地址空间会按如下方式更新:
- 进入受限模式时,该会话的有效地址空间会设为 受限的进程地址空间
- 退出受限模式时,该线程的有效地址空间将设为 进程的共享地址空间
权限
无(目前)
返回值
成功时没有返回值,因为当前线程会通过 vector_table_ptr 间接返回。如果失败,则返回负错误值。
错误
ZX_ERR_INVALID_ARGS
vector_table_ptr 不是有效的用户地址或选项。
为非零值。
ZX_ERR_BAD_STATE
受限模式寄存器状态无效。