摘要
從指定程序的位址空間讀取資料。
宣告
#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 必須大於零 且小於或等於 64 MB
「實際」會將實際讀取的位元組數儲存在這裡。小於 (位元組) 如果 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 為零或大於 64 MB。
ZX_ERR_NOT_FOUND
:如果程序在
要求的地址,或 ZX_ERR_OUT_OF_RANGE
(如果與
對應 VMO 中的 vaddr 大於或等於 VMO
大小這些錯誤代碼與
由位於相同位址的頁面錯誤 (即 synth_code
該網頁錯誤的例外狀況報告)。
ZX_ERR_WRONG_TYPE
帳號代碼並非處理程序。