с этим кодом я могу слушать sys call write
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <linux/user.h>
#include <sys/syscall.h> /* For SYS_write etc */
int main()
{ pid_t child;
long orig_eax, eax;
long params[3];
int status;
child = fork();
if(child == 0) {
ptrace(PTRACE_TRACEME, 0, NULL, NULL);
execl("/bin/ls", "ls", NULL);
}
else {
while(1) {
wait(&status);
if(WIFEXITED(status))
break;
orig_eax = ptrace(PTRACE_PEEKUSER,
child, 4 * ORIG_EAX, NULL);
if(orig_eax == SYS_write) {
.....
}
ptrace(PTRACE_SYSCALL,child, NULL, NULL);
}
}
return 0;
}
, но если я не получу syscall, этот процесс будет ждать до тех пор, пока в этой строке не будет ptrace(PTRACE_SYSCALL,child, NULL, NULL);
Как я могу ждать до истечения времени ожидания?