У меня есть двоичный файл, из которого мне нужно перехватить определенный системный вызов - в данном случае unlinkat
- и заставить его ничего не делать. У меня есть следующий код, который отлично работает для одного процесса; однако с добавлением PTRACE_O_TRACECLONE
к параметрам ptrace после того, как трассируемый вызовет clone
, вызов waitpid
зависнет навсегда. Я выдергивал свои волосы в течение нескольких дней на разных частях inte rnet, до точки, где я проходил через источник strace, и фактически натянул strace, чтобы увидеть, что strace, который я натянул, отслеживает.
Вот источник - я удалил кое-что, чтобы сделать его как можно меньше для удобочитаемости. В основном я пишу Python, поэтому многое из этого было просто скопировано и вставлено из разных руководств, которые я нашел, и я в основном добавлял / удалял случайное дерьмо, пока g cc не давал мне столько предупреждений.
Основываясь на том, что я читал, я подозреваю, что проблема в том, чтобы подавать сигналы задействованным процессам и ждать SIGTRAP, у меня просто нет реальной интуиции, что делать на этом уровне.