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.2Nota
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âmetro | Tipo | Descrição |
|---|---|---|
| pid | pid_t | PID do processo remoto de onde ler. |
| local_iov | const struct iovec * | Vetor de buffers locais (do processo chamador) que receberão os dados. |
| liovcnt | unsigned long | Número de elementos em `local_iov`. |
| remote_iov | const struct iovec * | Vetor de regiões a ler no espaço de endereçamento do processo remoto. |
| riovcnt | unsigned long | Número de elementos em `remote_iov`. |
| flags | unsigned long | Não utilizado atualmente; deve ser 0. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | pidpid_t |
| rsi | argumento 2 | local_iovconst struct iovec * |
| rdx | argumento 3 | liovcntunsigned long |
| r10 | argumento 4 | remote_iovconst struct iovec * |
| r8 | argumento 5 | riovcntunsigned long |
| r9 | argumento 6 | flagsunsigned 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
Equivalente em Windows Win32
Mesma categoria