摘要
寫入指定程序的位址空間。
宣告
#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 必須大於 且小於或等於 64 MB
「actual_size」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
帳號代碼不是有效的帳號代碼。
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_NOT_SUPPORTED
kernel.enable-debugging-syscalls
未設為 true
執行指令碼
ZX_ERR_WRONG_TYPE
帳號代碼並非處理程序。