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