Voltar à lista
Linux x86_64Depuração & tracing#311

process_vm_writev

Escreve blocos de memória diretamente no espaço de endereçamento de outro processo.

Descrição

Análoga de escrita para `process_vm_readv`: transfere dados do processo chamador para regiões de memória de um processo remoto, útil para injeção controlada de dados por depuradores e ferramentas de instrumentação.

Header: sys/uio.hman 2Desde o kernel 3.2

Assinatura

ssize_t process_vm_writev(
    pid_t pid,
    const struct iovec * local_iov,
    unsigned long liovcnt,
    const struct iovec * remote_iov,
    unsigned long riovcnt,
    unsigned long flags
);

Parâmetros

ParâmetroTipoDescrição
pidpid_tPID do processo remoto onde escrever.
local_iovconst struct iovec *Vetor de buffers locais com os dados a enviar.
liovcntunsigned longNúmero de elementos em `local_iov`.
remote_iovconst struct iovec *Vetor de regiões de destino no espaço de endereçamento remoto.
riovcntunsigned longNúmero de elementos em `remote_iov`.
flagsunsigned longNão utilizado atualmente; deve ser 0.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1pidpid_t
rsiargumento 2local_iovconst struct iovec *
rdxargumento 3liovcntunsigned long
r10argumento 4remote_iovconst struct iovec *
r8argumento 5riovcntunsigned long
r9argumento 6flagsunsigned long

Valor de retorno

Número de bytes escritos em sucesso; -1 em erro, com errno definido.

Códigos de erro (errno)

EFAULT(14)
Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).
EINVAL(22)
Argumento inválido.
ENOMEM(12)
Memória insuficiente para completar a operação.
EPERM(1)
Operação não permitida (falta de privilégio).
ESRCH(3)
Processo inexistente.

Relacionadas