2013-03-26 2 views
3

Предположим, что отладчик (обычный отладчик x86 ring3, такой как olly, IDA, gdb ...) устанавливает контрольную точку программного обеспечения на виртуальный адрес 0x1234.Как отладчик возобновляет работу с точки останова?

это достигается путем замены независимо опкода на 0x1234 до «0xCC» теперь давайте предположим, что процесс debugee запускает эту инструкцию 0xCC и вызывает исключение программного обеспечения и отладчик перехватывающий.

отладчик проверяет содержимое памяти, регистрирует и делает некоторые вещи .. и теперь он хочет возобновить процесс дебюта.

это насколько я знаю. отныне, его мое предположение.

отладчик восстанавливает исходный код операции (который был заменен на 0xCC) debugee, чтобы возобновить выполнение.

отладчик манипулирует EIP КОНТЕКСТА debugee, чтобы указать восстановленную команду .

Отладчик обрабатывает исключение, и теперь debugee возобновляет работу с точки останова.

но отладчик хочет, чтобы точка останова осталась. Как можно отладчику управлять этим?

+0

Хороший вопрос. Я предполагаю, что аппаратное обеспечение отладчика на чипе должно помочь в этом. –

ответ

0

в коротких и простых людей слова:

Поскольку попадание в состояние отладки является атомарной операцией в X86 и в ARM процессор попадает в него и выходе состояние отладки, как же, как и любой другой командой в архитектуре. см. gdb documentation объясняет, как он работает и может быть использован.

Вот некоторые основные моменты из спецификации ARM и X86:

в ARM:

SW (программное обеспечение) контрольные точки реализуются временно заменяя опкод инструкцию на точки останова месте с помощью специального " breakpoint "непосредственно перед тем, как ступить или выполнить ваш код. Когда ядро ​​выполняет инструкцию точки останова, оно будет принудительно входить в состояние отладки . Точки останова SW могут размещаться только в ОЗУ , поскольку они полагаются на изменение целевой памяти.

Контрольная точка HW (аппаратное обеспечение) устанавливается путем программирования блока сторожевого таймера для мониторинга сердечника шины для извлечения команды из определенной ячейки памяти. HW точки останова могут быть установлены в любом месте в ОЗУ или ПЗУ. При отладке кода , где скопированы инструкции (Scatterloading), модифицировано или процессор MMU переназначает области памяти, следует использовать точки останова HW. В этих сценариях точки останова SW ненадежны, поскольку они могут быть либо потеряны, либо перезаписаны.

В X86:

Путь программные точки останова работы достаточно прост.Говоря о x86 конкретно, чтобы установить контрольную точку программного обеспечения, отладчик просто записывает инструкцию int 3 (код операции 0xCC) по первому байту целевой команды . Это приводит к срабатыванию прерывания 3, когда выполнение передается на адрес, на который вы установили точку останова. Когда это происходит , отладчик «ломается» и свопирует байты кода операции 0xCC с первоначальным первым байтом инструкции, когда вы устанавливаете точку останова , чтобы вы могли продолжить выполнение без немедленного попадания на ту же точку останова . На самом деле существует немного больше магического , что позволяет продолжить выполнение с точки останова, а не ударить его немедленно, но сохранить контрольную точку для дальнейшего использования; Я расскажу об этом в следующей публикации.

Аппаратные точки останова, как вы могли бы себе представить, задать со специальной аппаратной поддержкой. В частности, для x86 это включает в себя набор , возможно, малоизвестных регистров, известных как регистры «Dr» (для регистра отладки). Эти регистры позволяют вам установить до четыре (для x86, это очень специфичные для платформы) адреса, которые, когда либо прочитаны, прочитаны/записаны, либо выполнены, вызовет у процессора специальное исключение, которое заставляет выполнение останавливаться и управления для быть переданы в отладчик

1

чтобы ответить на исходный вопрос непосредственно из GDB internals manual:

Когда пользователь говорит продолжить, GDB будет восстановить первоначальный инструкции, пошагово , снова вставьте ловушку и продолжайте.

Смежные вопросы