zx_process_write_memory

摘要

寫入指定程序的位址空間。

宣告

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

另請參閱