zx_process_read_memory

摘要

從指定程序的位址空間讀取。

宣告

#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 處理常式並非程序控制代碼。

另請參閱