Собственно, очень надо узнать кое-что насчёт отладки под Linux. В частности - как реализованы breakpoint'ы.
Представление об этом имею - если есть возможность, используется аппаратная установка брейкпоинтов, если нет - то применяется прерывание int 3 (знаменитый байт 0xCC) и т.п. С этим всё ясно, интересует другое. Собственно, есть такое вот вопросы:
1. Например, запустили мы под отладчиком процесс (как вариант - подключились через ptrace). Как происходит замена инструкции, куда ставится breakpoint, на 0xCC? Я так понимаю, исполняемый файл отображается в адресное пространство процесса. Нам надо получить доступ на запись в указанную страницу, при этом в сам файл мы писать не собираемся, вот на этом моменте моё понимание кончается - нигде в интернете и в литературе не нашёл подробного объяснения. Страница копируется и отображается вместо файла или как? И как это делается на уровне кода и системных вызовов?
2. В каком адресном пространстве выполняется код разделяемых библиотек? Области отображения совпадают для всех процессов или как?
3. Главный вопрос - если мы, например, в gdb, ставим брейкпоинт в функцию из so, как это реализовано таким образом, что другие процессы могут спокойно продолжать использовать этот же so? Ответ такой же, как и на первый вопрос?