Автор Тема: Отладка в Linux  (Прочитано 3164 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Отладка в Linux
« : 06 Май 2011, 16:33:03 »
Собственно, очень надо узнать кое-что насчёт отладки под Linux. В частности - как реализованы breakpoint'ы.
Представление об этом имею - если есть возможность, используется аппаратная установка брейкпоинтов, если нет - то применяется прерывание int 3 (знаменитый байт 0xCC) и т.п. С этим всё ясно, интересует другое. Собственно, есть такое вот вопросы:

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

2. В каком адресном пространстве выполняется код разделяемых библиотек? Области отображения совпадают для всех процессов или как?

3. Главный вопрос - если мы, например, в gdb, ставим брейкпоинт в функцию из so, как это реализовано таким образом, что другие процессы могут спокойно продолжать использовать этот же so? Ответ такой же, как и на первый вопрос?

Оффлайн Rion

  • Пользователь
  • Сообщений: 845
  • Пол: Мужской
    • Просмотр профиля
Re: Отладка в Linux
« Ответ #1 : 06 Май 2011, 21:25:01 »
По-моему ты не туда обратился за помощью, лучше спроси на http://www.linux.org.ru/

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: Отладка в Linux
« Ответ #2 : 07 Май 2011, 00:53:08 »
Нашёл ответы сам. Файлы отображаются в память с флагом copy-on-write, т.е. при записи в страницу создаётся её копия, с которой и происходят дальнейшие манипуляции.