总结
从给定进程的地址空间中读取。
声明
#include <zircon/syscalls.h>
zx_status_t zx_process_read_memory(zx_handle_t handle,
zx_vaddr_t vaddr,
void* buffer,
size_t buffer_size,
size_t* actual);
说明
zx_process_read_memory()
尝试读取指定进程的内存。
此函数最终将替换为以 VMO 为中心的工具。
vaddr 是要读取的内存块的地址。
buffer 指针,指向要向其读取字节的用户缓冲区。
要尝试读取的 buffer_size 字节数。buffer 缓冲区必须足够大,至少能容纳这么多字节。buffer_size 必须大于 0 且小于或等于 64MB。
实际读取的字节数存储在此处。如果 vaddr+buffer_size 超出进程中映射的内存区域,则返回的字节数可能会少于请求的字节数。
权限
handle 必须为 ZX_OBJ_TYPE_PROCESS
类型,具有 ZX_RIGHT_READ
且具有 ZX_RIGHT_WRITE
。
返回值
zx_process_read_memory()
会在成功时返回 ZX_OK
。如果失败,则返回负的错误值,并且未定义写入 buffer 的字节数。
错误
ZX_ERR_ACCESS_DENIED
句柄没有 ZX_RIGHT_READ
权限,或者由于历史原因需要 ZX_WRITE_RIGHT
。
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_WRONG_TYPE
句柄不是进程句柄。