Sistema de PTRACE Ligue para C

Sistema de PTRACE Ligue para C
A chamada do sistema pTrace () é geralmente usada para depurar pontos de interrupção e rastrear chamadas do sistema. A chamada do sistema PTRACE () “Trace” é frequentemente usada para fins de depuração. É a principal maneira que os depuradores nativos acompanham. Traces podem ser pausados, registros e memória podem ser inspecionados e definidos, as chamadas do sistema podem ser monitoradas e até as chamadas do sistema podem ser interceptadas usando a chamada do sistema PTRACE. O Tracee deve primeiro ser conectado ao traçador. Em um processo multithread, cada fio pode ser anexado separadamente a um rastreador possivelmente distinto ou deixado sem atenção e, portanto, sem dúvida. Como resultado, "Tracee" sempre se refere a "um processo potencialmente multithread, nunca ou talvez um processo multithreaded.

Todos os sinais fornecidos ao processo rastreado, exceto um, fazem com que ele pare, independentemente de seu processamento de sinal registrado, e entregue um evento em relação ao processo de rastreamento, que pode ser identificado usando a função Wait () do sistema. O sinal Sigkill é uma exceção, pois é entregue instantaneamente e realiza o comportamento esperado. Nunca houve um padrão para a chamada do sistema PTRACE. Sua interface é comparável entre os sistemas operacionais, principalmente em termos de funcionalidade essencial, mas difere um pouco de um sistema para o próximo.

As chamadas do sistema podem ser rastreadas usando a edição Linux do PTRACE. A solicitação PTRACE SYSCALL reinicia o processo infantil da mesma maneira que o PTRACE CONT, mas organiza para que ele pare na próxima entrada de chamadas do sistema. Isso traz muitas novas oportunidades. Para solicitações de peek do PTRACE, o PTRACE () retornará os dados desejados; ele retornará zero para todos os outros pedidos. Todos os pedidos que falham retornam -1, com errno definido para o valor ideal. No caso de solicitações de PTRACE PEEK, -1 pode ser um valor de retorno legítimo; O programa é responsável por determinar se essa é uma situação de erro ou um valor de retorno válido. Este guia explicará a você a funcionalidade do sistema PTRACE () Chamada no idioma C com um exemplo.

Exemplo para entender o sistema PTRACE () no idioma C

Para entender o sistema PTRACE () em linguagem C, usamos o Ubuntu 20.04 Sistema Linux para implementar seu exemplo. O compilador GCC já foi instalado em nosso sistema para a execução do código. Você pode instalá-lo usando a instrução abaixo do citado no shell do terminal do Ubuntu 20.04 Sistema Linux.

$ sudo apt install gcc

Agora, vamos começar com o nosso exemplo. Crie um arquivo com qualquer um dos nomes desejados com o .c extensão no terminal usando a instrução Nano. Você pode criar diretamente o arquivo indo para qualquer diretório doméstico ou usando o comando "touch" também. O objetivo de usar a instrução nano é abrir o editor GNU diretamente sobre o terminal. Agora execute a instrução abaixo do citado no terminal da concha do Ubuntu 20.04 Sistema Linux.

$ nano q.c

GNU Nano 4.8 aparecerá na sua tela. Agora escreva o código exibido na imagem abaixo do ABRIGADO.

No código atualizado, utilizamos algumas bibliotecas padrão. Ptrace traceme especifica que o pai desse processo deve ser capaz de rastreá -lo. Se seu pai não espera rastreá -lo, um processo não deve enviar esta solicitação. O PID, ADDR e os dados não são reservados em consideração. O Tracee é o único que usa a chamada traceme do PTRACE; O traçador usa apenas os outros pedidos. O processo pai bate o processo de uma criança e o monitora no cenário acima. O subprocessamento executa a função PTRACE com o PTRACE Traceme como o primeiro parâmetro antes de invocar a função EXEC, que informa o kernel: o processo filho então controla o processo pai após chamar Execve ().

O processo pai estava usando a função wait () para aguardar alertas do kernel e agora que foi notificado, pode observar o que os processos da criança têm feito, como inspecionar valores de registro. O kernel salva todas as características do registro "eax", que agarra o número de chamadas do sistema sempre que a chamada do sistema acontecer. PTRACE PEEKUSER Leia uma palavra da seção de usuário do Tracee, que contém os registros do processo e outros dados (SYS/Usuário.h>). Como conseqüência da chamada PTRACE (), a string é retornada. O deslocamento geralmente deve ser alinhado a palavras, embora isso possa variar dependendo da arquitetura.

PTRACE CONT retoma o processo de rastreamento se tiver sido interrompida. Se os dados não forem zero, são entendidos como o número de sinais a serem enviados para o Tracee; Então, nenhum sinal é enviado. O traçador, por exemplo, pode regular se um sinal enviado ou não para o tracee é transmitido. A compilação e execução podem ser feitas executando as instruções abaixo do citado no terminal da concha do Ubuntu 20.04 Sistema Linux.

$ gcc q.c
$ ./a.fora

A saída bem-sucedida foi mostrada na imagem acima ligada.

Conclusão

A chamada do sistema pTrace () tem sido amplamente utilizada na linguagem de programação C, mas pode identificar e alterar um programa em execução; A função de PTRACE pode parecer estranha. Debuggers e sistemas Os rastreadores de chamadas geralmente empregam esta técnica. No final do usuário, ele permite que os programadores façam coisas mais interessantes. Este artigo forneceu o entendimento e a implementação básicos da chamada do sistema pTrace (). O código de exemplo pode ser alterado se necessário/