2 Commits

2 changed files with 12 additions and 1 deletions

View File

@ -2,3 +2,13 @@
## Отладчик ## Отладчик
Всю основу написания отладчиков на Linux держит на своих плечах один единственный систенмый вызов - ptrace ("process trace"). Он позволяет выполнять все то, что мы привыкли делать в дебаггере - шаг с обходом, шаг с заходом, просмотр регистров, мучения оперативы и прочие радости отладки. Как тут помочь не знаю, потому что подробный гайд займет целую статью. Предложение простое - почитать великую статью по написанию (первые 2 части покроют весь материал этой лабы): https://blog.tartanllama.xyz/writing-a-linux-debugger-setup/
В основном пробелмы будут сопряжены только с чтением того, что вообще может делать ptrace, а может он почти все, что нас инетерсует, тольк вот интерфейс у него мягко скажем не по solid.
Внутри своего кода я ввел специальный макрос `DONT_CARE`, который призван сигнализировать о том, что при определенном флаге некоторые поля будут игнорироваться.
В остальном удачи и учтите, что программа останавливается как-то по своей логике, а не по логике обычного человека. Она остановится не в момент ptrace (PTRACE_TRACEME, ...), а в момент execv. Почему так? да фиг его знает если честно. Скорее всего просто в этот момент программа посылает сигнал о том, что образ потока был переписан. Других идей у меня нет.
Собственно именно поэтому continue прожималось мной 2 раза, а не один, как хотелось бы верить по логике

View File

@ -52,6 +52,7 @@ int main()
continue_execution(pid); continue_execution(pid);
if (stats & SIGTRAP) if (stats & SIGTRAP)
{ {
printf("--BREAKPOINT--\n");
while (stats != 0) while (stats != 0)
{ {
read(0, &buff, 1); read(0, &buff, 1);
@ -60,7 +61,7 @@ int main()
} }
} }
printf("____AFTER_TRACE_PARRENT____\n"); printf("____PROCESS_WAS_TERMINATED____\n");
} }
return 0; return 0;
} }