| Другое > Hard'n'Soft |
| Отладка в Linux |
| (1/1) |
| HoRRoR:
Собственно, очень надо узнать кое-что насчёт отладки под Linux. В частности - как реализованы breakpoint'ы. Представление об этом имею - если есть возможность, используется аппаратная установка брейкпоинтов, если нет - то применяется прерывание int 3 (знаменитый байт 0xCC) и т.п. С этим всё ясно, интересует другое. Собственно, есть такое вот вопросы: 1. Например, запустили мы под отладчиком процесс (как вариант - подключились через ptrace). Как происходит замена инструкции, куда ставится breakpoint, на 0xCC? Я так понимаю, исполняемый файл отображается в адресное пространство процесса. Нам надо получить доступ на запись в указанную страницу, при этом в сам файл мы писать не собираемся, вот на этом моменте моё понимание кончается - нигде в интернете и в литературе не нашёл подробного объяснения. Страница копируется и отображается вместо файла или как? И как это делается на уровне кода и системных вызовов? 2. В каком адресном пространстве выполняется код разделяемых библиотек? Области отображения совпадают для всех процессов или как? 3. Главный вопрос - если мы, например, в gdb, ставим брейкпоинт в функцию из so, как это реализовано таким образом, что другие процессы могут спокойно продолжать использовать этот же so? Ответ такой же, как и на первый вопрос? |
| Rion:
По-моему ты не туда обратился за помощью, лучше спроси на http://www.linux.org.ru/ |
| HoRRoR:
Нашёл ответы сам. Файлы отображаются в память с флагом copy-on-write, т.е. при записи в страницу создаётся её копия, с которой и происходят дальнейшие манипуляции. |
| Навигация |
| Главная страница сообщений |