zx_process_write_memory

摘要

写入给定进程的地址空间。

声明

#include <zircon/syscalls.h>

zx_status_t zx_process_write_memory(zx_handle_t handle,
                                    zx_vaddr_t vaddr,
                                    const void* buffer,
                                    size_t buffer_size,
                                    size_t* actual);

说明

zx_process_write_memory() 会尝试写入指定进程的内存。

此函数最终将被以 VMO 为中心的功能所取代。

vaddr:要写入的内存块的地址。

指向包含要写入的字节的用户缓冲区的 buffer 指针。

buffer_size:要尝试写入的字节数。buffer 缓冲区必须是 至少能存储这么多字节buffer_size 必须大于 0 且小于或等于 64 MB。

actual_size 表示写入的实际字节数存储在此处。更少字节 如果 vaddr+buffer_size 超出请求的时长,则可能会返回 内存映射

如需使用 zx_process_write_memory() 函数,您必须指定 kernel.enable-debugging-syscalls=true(在内核命令行中)。否则 该函数会返回 ZX_ERR_NOT_SUPPORTED

权限

handle 的类型必须为 ZX_OBJ_TYPE_PROCESS 且包含 ZX_RIGHT_WRITE

返回值

如果成功,zx_process_write_memory() 会返回 ZX_OK。 如果失败,则返回负的错误值以及 写入 buffer 的字节未定义。

错误

ZX_ERR_ACCESS_DENIED标识名没有 ZX_RIGHT_WRITE 权限,或者 要写入的地址范围属于受保护区域,例如 vDSO。

ZX_ERR_BAD_HANDLE handle 不是有效的句柄。

ZX_ERR_BAD_STATE:表示进程的内存无法访问(例如, 进程被终止) 或所请求的内存不可缓存。

ZX_ERR_INVALID_ARGS buffer 是无效的指针或 NULL, 或 buffer_size 为零或大于 64MB。

ZX_ERR_NOT_FOUND如果进程在 请求的地址或 ZX_ERR_OUT_OF_RANGE(如果相应的偏移量) 映射的 VMO 内的 vaddr 大于或等于 VMO 。这些错误代码与 同一地址(即 <ph type="x-smartling-placeholder">synth_code 页面错误的异常报告)。

ZX_ERR_NOT_SUPPORTED kernel.enable-debugging-syscalls 未设置为 true

ZX_ERR_WRONG_TYPE handle 不是进程句柄。

另请参阅