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 必须大于零且小于或等于 64MB。

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 句柄不是有效的句柄。

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

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

如果进程在所请求的地址上没有任何内存,则为 ZX_ERR_NOT_FOUND;如果与映射的 VMO 中的 vaddr 对应的偏移量大于或等于 VMO 大小,则为 ZX_ERR_OUT_OF_RANGE。这些错误代码与同一地址的页面故障产生的错误代码(即页面错误异常报告中的 synth_code)一致。

内核命令行中的 ZX_ERR_NOT_SUPPORTED kernel.enable-debugging-syscalls 未设置为 true

ZX_ERR_WRONG_TYPE 句柄不是进程句柄。

另请参阅