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

process_vm_readv

Lê blocos de memória do espaço de endereçamento de outro processo, sem passar por /proc/pid/mem.

Descrição

Transfere dados diretamente entre a memória de dois processos usando vetores de I/O (como `readv`/`writev`), evitando o overhead de abrir e fazer seek em `/proc/[pid]/mem`. Muito usado por depuradores e ferramentas de introspecção/injeção que precisam de throughput alto.

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

Nota

Exige a mesma permissão que `ptrace(PTRACE_ATTACH)` exigiria sobre o processo remoto.

Assinatura

ssize_t process_vm_readv(
    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 de onde ler.
local_iovconst struct iovec *Vetor de buffers locais (do processo chamador) que receberão os dados.
liovcntunsigned longNúmero de elementos em `local_iov`.
remote_iovconst struct iovec *Vetor de regiões a ler no espaço de endereçamento do processo 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 lidos 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