Как я могу отслеживать создание процесса с использованием PTRACE в C и обеспечить разрешение только одного дочернего проLinux

Ответить Пред. темаСлед. тема
Anonymous
 Как я могу отслеживать создание процесса с использованием PTRACE в C и обеспечить разрешение только одного дочернего про

Сообщение Anonymous »

Я пытаюсь использовать ptrace.h для отслеживания создания новых процессов в двоичном. Я намерен разрешить только создание одного процесса (что в будущем я также буду отслеживать, что он может написать). < /P>
Чтобы контролировать программу, я написал следующий код: < /p>

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc, char **argv)
{
if (argc != 2)  {
return 1;
}

struct user_regs_struct regs;
int pid_parent = fork(), status_pai;
char buffer_pai[0x1000];
int pid_child = -1, status_filho;
char buffer_filho[0x1000];
int current_pid = - 1, new_pid, current_status, new_status;

if (pid_parent == 0) {
ptrace(PTRACE_TRACEME, 0, NULL, NULL);
execl(argv[1], argv[1], NULL);
}

waitpid(pid_parent, &status_pai, 0);

// Track all kinds of clone
ptrace(PTRACE_SETOPTIONS, pid_parent, 0,
PTRACE_O_TRACESYSGOOD | PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK |
PTRACE_O_TRACECLONE | PTRACE_O_TRACEEXEC);

ptrace(PTRACE_SYSCALL, pid_parent, 0, 0);

int flag_fork = 1, pending_exits = 1;
while (pending_exits) {
current_pid = waitpid(-1, &current_status, __WALL);

if (WIFEXITED(current_status) || WIFSIGNALED(current_status)) {
pending_exits--;
continue;
}

if (current_status >> 8 == (SIGTRAP | (PTRACE_EVENT_FORK > 8 == (SIGTRAP | (PTRACE_EVENT_VFORK > 8 == (SIGTRAP | (PTRACE_EVENT_CLONE  2) {
puts("Fork overflow");
exit(1);
}

ptrace(PTRACE_SYSCALL, current_pid, 0, 0);

}

return 0;

}
< /code>
Программа, которую я использовал для тестирования, - это следующее: < /p>
#include 
#include 

int main() {

if (!fork()) {
fork();
}
return 0;
}
< /code>
В этом случае, после того, как родительский вил, ребенок только будет распахваться. Когда я запускаю эту программу отслеживания с первым, я получил следующий вывод: < /p>
[1337] j3r3mias@serenity > ./tracker example

Parent pid: 2605006 - Child pid: 0
Current pid: 2605006 - New pid: 2605007
Parent forked for the first time.

Parent pid: 2605006 - Child pid: 0
Current pid: 2605007 - New pid: 2605008
Проблема с трекером заключается в том, что PID_CHILD даже после обновления после родительской вилки показывает значение 0 во втором взаимодействии while . Являются ли какие -либо различия в состоянии программы при использовании ptrace ?

Подробнее здесь: https://stackoverflow.com/questions/795 ... -child-pro
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»