Обстоятельная статья разбирает основу отладчика. Дочерний процесс вызывает
PTRACE_TRACEME и запускает программу через execl. Ядро останавливает её перед первой инструкцией и уведомляет родителя. Тот выполняет PTRACE_SINGLESTEP, ждёт следующей остановки и повторяет цикл.На этом каркасе автор показывает, как считать инструкции и читать регистры через
PTRACE_GETREGS. Тест с Hello World даёт более 100 000 инструкций при динамической компоновке, около 7 000 при статической и ровно 7 в версии на ассемблере. Счётчик захватывает загрузчик библиотек, инициализацию и очистку библиотеки C, а не только main.Статья Эли Бендерски даёт модель взаимодействия отладчика с ОС. Код для 32-битной Ubuntu зависит от платформы, поэтому переносить его буквально не стоит. Читать системным разработчикам и тем, кто хочет понять механику пошаговой отладки.