ptrace (), как я могу прекратить отслеживание в дочернем процессе?

#c #linux #gcc #ptrace

#c #linux #gcc #ptrace

Вопрос:

Я хочу отслеживать только часть программы C для системных вызовов. Я использую ptrace () с параметром PTRACE_TRACEME, чтобы начать отслеживание. Как остановить отслеживание этого процесса после нескольких строк кода. Я пытаюсь использовать PTRACE_DETACH, но это не работает?

Основной .Файл C является:

 #include<stdio.h>
#include<unistd.h>
#include<sys/ptrace.h>
#include<signal.h>

int display(char *p);
int main()
{
    puts("Before Displayn");   
    display("hello");
    puts("After Displayn");
    return 0;
}

int display(char *p)
{
    ptrace(PTRACE_TRACEME, 0, NULL, NULL);
    raise(SIGCONT);
    puts("interception");
    ptrace(PTRACE_DETACH, 0, NULL, NULL);
    return 0;
}
  

Код родительского процесса является:

 #include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/reg.h>   /* For constants ORIG_EAX etc */
#include <stdio.h>
int main()
{   pid_t child;
    int status;
    long orig_eax;
    child = fork();
    if(child == 0) 
    {
        execl("/home/kashi/Documents/write", "write", NULL);
    }
    else {
      while(1)
      {
        wait(amp;status);
          if(WIFEXITED(status))
              break;
        orig_eax = ptrace(PTRACE_PEEKUSER,
                          child, 4 * ORIG_EAX,
                          NULL);
        printf("The child made a "
               "system call %ldn", orig_eax);
       ptrace(PTRACE_SYSCALL, child, NULL, NULL);
       }
    }
    return 0;
}
  

Ответ №1:

Вы не можете сделать это из отслеживаемого процесса.

PTRACE_TRACEME это единственный запрос, который имеет смысл в отслеживаемом процессе. PTRACE_DETACH и все остальные должны использоваться в процессе отслеживания.

Отслеживаемый может связаться с трассировщиком и вежливо попросить его отключиться. Специально для этого нет ptrace запроса. Объект отслеживания может, например, raise(SIGCONT) , трассировщик заметит это и выдаст PTRACE_DETACH .

Комментарии:

1. Спасибо, что развеяли сомнения. Не могли бы вы, пожалуйста, предложить какую-нибудь хорошую ссылку для ptrace () и ее использования.