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

ptrace

Observa e controla a execução de outro processo — a base de depuradores e do strace.

Descrição

Permite a um processo ('tracer') inspecionar e modificar a memória, os registradores e o fluxo de execução de outro ('tracee'), e interceptar chamadas de sistema e sinais que ele recebe. É a fundação de `gdb`, `strace`, `ltrace` e de mecanismos de sandboxing baseados em interceptação de syscalls.

Header: sys/ptrace.hman 2

Atenção

Um processo só pode ter um tracer por vez. `PTRACE_ATTACH`/`PTRACE_SEIZE` a um processo que já está sendo tracejado falha com EPERM.

Nota

O acesso é restrito por `yama.ptrace_scope` no Linux moderno (Yama LSM), que por padrão bloqueia tracing de processos não-descendentes mesmo com as permissões Unix corretas.

Assinatura

long ptrace(
    enum __ptrace_request request,
    pid_t pid,
    void * addr,
    void * data
);

Parâmetros

ParâmetroTipoDescrição
requestenum __ptrace_requestOperação a executar: PTRACE_TRACEME, PTRACE_PEEKTEXT, PTRACE_POKETEXT, PTRACE_CONT, PTRACE_SYSCALL, PTRACE_GETREGS, PTRACE_ATTACH, PTRACE_SEIZE, entre outras.
pidpid_tPID do processo tracee (ignorado para PTRACE_TRACEME).
addrvoid *Endereço na memória do tracee, quando aplicável ao `request`.
datavoid *Dado ou ponteiro de saída, cujo significado depende do `request`.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1requestenum __ptrace_request
rsiargumento 2pidpid_t
rdxargumento 3addrvoid *
r10argumento 4datavoid *

Valor de retorno

Depende do `request`: normalmente 0 em sucesso, mas alguns pedidos (ex.: PTRACE_PEEK*) retornam o próprio dado lido. -1 em erro, com errno definido — atenção: -1 também pode ser um valor de dado legítimo, por isso `errno` deve ser zerado antes da chamada nesses casos.

Códigos de erro (errno)

ESRCH(3)
Processo inexistente.
EPERM(1)
Operação não permitida (falta de privilégio).
EIO(5)
Erro de E/S físico.
EFAULT(14)
Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).
EINVAL(22)
Argumento inválido.
EBUSY(16)
Dispositivo ou recurso ocupado.

Relacionadas