Rastreando syscalls

1

Eu estou tentando aprender alguns truques usando "trace" (ou dtrace ou strace ou truss), então eu usando o comando:

trace -d [random PID]

Estou recebendo as seguintes mensagens de erro:

erro de rastreio: falha no recurso de rastreio, KERN_KDREMOVE: Permissão negada

ou

Falha ao abrir o arquivo de descrição de código [PID]

Não tenho certeza sobre o sinalizador e provavelmente é diferente em outro SO (estou usando o MacOS com o kernel Darwin), mas as principais funções devem ser as mesmas.

Alguém poderia fornecer um breve tutorial sobre essa ferramenta?

    
por ddmichael 14.01.2014 / 08:25

1 resposta

2

você deseja rastrear um processo já em execução? Pelo menos no Linux (com permissão de root), você pode tentar o seguinte para anexar a um processo de prompt do shell Bash.

# strace -p [PID of a process]
Process 2055 attached
read(0,

E está esperando lá. A opção -p é aquela que é anexada a um processo em execução. Com a opção -d , você pode obter strace para exibir informações de depuração de si mesmo.

Veja o manual strace (1),

"    -d Mostra alguma saída de depuração da própria strace no erro padrão. "

Sem permissão de root, você receberá erros semelhantes, como o seguinte em um Ubuntu 13.10:

$ strace -p [random PID]
strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
Could not attach to process.  If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user.  For more details, see /etc/sysctl.d/10-ptrace.conf
    
por 13.02.2014 / 20:02