PTRACE_SINGLESTEP не перемещается%rip

Итак, я пишу отладчик. В отладчике я хочу постоянные точки останова. Сейчас я просто работаю над тем, чтобы настроить его только на одну точку останова. Когда я говорю отладчику продолжить, я делаю это...

ptrace( PTRACE_GETREGS, child, NULL, &regs);
printf("%lx\n", regs.rip);
ptrace( PTRACE_SINGLESTEP, child, NULL, NULL);
ptrace( PTRACE_GETREGS, child, NULL, &regs);
printf("%lx\n", regs.rip);
ptrace( PTRACE_POKETEXT, child, (void *)original_addr, (original_data & ~0xff) | 0xcc);

Тем не менее, я получаю вывод...

40053d
40053d

Это означает, что разрыв не обновился. Это согласуется с тем фактом, что когда я продолжаю больше раз, чем итерацию по точке останова, он все еще находится в точке останова. Какие-нибудь мысли?

РЕДАКТИРОВАТЬ: Так вот в чем проблема. Дочерний процесс на самом деле не запускает SINGLESTEP до тех пор, пока не увидит вызов wait(), после чего он запускается и возвращает управление родительскому элементу, когда выполняет одну инструкцию. Я не звонил ждать, поэтому он не обновлялся в тот момент. Так что он просто распечатал один и тот же дважды. Затем он достиг состояния контрольной точки и обновился до исходного%rip в начале инструкции. Приветствия.

0 ответов

Другие вопросы по тегам