摘要
從指定程序的位址空間讀取。
宣告
#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
緩衝區 是無效指標或 NULL,或者 buffer_size 為零或大於 64 MB。
如果程序在要求的位址中沒有任何記憶體,則為 ZX_ERR_NOT_FOUND
;如果對應 VMO 中與 vaddr 對應的偏移值大於或等於 VMO 大小,則傳回 ZX_ERR_OUT_OF_RANGE
。這些錯誤代碼與在相同位址的網頁錯誤 (即網頁錯誤例外狀況報表中的 synth_code) 相符的錯誤代碼。
ZX_ERR_WRONG_TYPE
處理常式並非程序控制代碼。