Write into the given process's address space.
#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()
attempts to write memory of the specified process.
This function will eventually be replaced with something vmo-centric.
vaddr the address of the block of memory to write.
buffer pointer to a user buffer containing the bytes to write.
buffer_size number of bytes to attempt to write. buffer buffer must be large enough for at least this many bytes. buffer_size must be greater than zero and less than or equal to 64MB.
actual_size the actual number of bytes written is stored here. Less bytes than requested may be returned if vaddr+buffer_size extends beyond the memory mapped in the process.
To use the zx_process_write_memory()
function, you must specify kernel.enable-debugging-syscalls=true
on the kernel command line. Otherwise, the function returns ZX_ERR_NOT_SUPPORTED.
handle must be of type ZX_OBJ_TYPE_PROCESS and have ZX_RIGHT_WRITE.
zx_process_write_memory()
returns ZX_OK on success. In the event of failure, a negative error value is returned, and the number of bytes written to buffer is undefined.
ZX_ERR_ACCESS_DENIED handle does not have the ZX_RIGHT_WRITE right or the address range to write falls into a protected area like the vDSO.
ZX_ERR_BAD_HANDLE handle is not a valid handle.
ZX_ERR_BAD_STATE the process's memory is not accessible (e.g., the process is being terminated), or the requested memory is not cacheable.
ZX_ERR_INVALID_ARGS buffer is an invalid pointer or NULL, or buffer_size is zero or greater than 64MB.
ZX_ERR_NO_MEMORY the process does not have any memory at the requested address.
ZX_ERR_NOT_SUPPORTED kernel.enable-debugging-syscalls
is not set to true
on the kernel command line.
ZX_ERR_WRONG_TYPE handle is not a process handle.