摘要
写入给定进程的地址空间。
声明
#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 不是进程句柄。