Подтвердить что ты не робот

В чем разница между аппаратными и программными точками останова?

В чем разница между аппаратными и программными точками останова?

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

4b9b3361

Ответ 1

В этой статье дается хорошее обсуждение плюсов и минусов: http://www.nynaeve.net/?p=80

Чтобы ответить на ваш вопрос, контрольные точки программного обеспечения более гибкие, поскольку аппаратные точки останова ограничены в некоторой функциональности и сильно зависят от архитектуры. Один из примеров, приведенный в этой статье, состоит в том, что аппаратное обеспечение x86 имеет ограничение на 4 аппаратных контрольных точки.

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

Ответ 2

Вы можете пройти через внутренние элементы GDB, это очень хорошо объясняет точки останова HW и SW.

Контрольные точки HW - это то, что требует поддержки от MCU. Контроллеры ARM имеют специальные регистры, где вы можете написать какое-то адресное пространство, когда ПК (счетчик программ) == sp register CPU останавливается. Jtag обычно требуется записывать в эти специальные регистры.

В GDB реализованы точки разрыва SW, путем вставки ловушки или незаконного деления или какой-либо другой команды, которая вызовет исключение, а затем, когда она столкнулась, gdb примет исключение и остановит программу. Когда пользователь говорит, чтобы продолжить, gdb восстановит исходную инструкцию, одношаговую, повторно вставит ловушку и продолжит.

Есть много преимуществ в использовании отладчиков HW над отладчиками SW, особенно если вы имеете дело с прерываниями и устройствами шины памяти. Прерывания AFAIK не могут быть отлажены с помощью отладчиков программного обеспечения.

Ответ 3

Аппаратные точки останова на самом деле являются компараторами, сравнивая текущий ПК с адресом в компараторе (когда он включен). Аппаратные точки останова - лучшее решение при настройке контрольных точек. Обычно устанавливается через отладочный зонд (с использованием JTAG, SWD,...). Недостаток аппаратных контрольных точек: они ограничены. Процессоры имеют только ограниченное количество аппаратных контрольных точек (компараторов). Количество доступных контрольных точек оборудования зависит от процессора. Сердечники ARM 7/9 имеют 2 современных устройства ARM (Cortex-M 0,3,4) от 2 до 6, x86 обычно 4.

Программные точки останова на самом деле устанавливаются путем замены инструкции, которая должна быть остановлена ​​с помощью инструкции точки останова. Команда breakpoint присутствует в большинстве процессоров и обычно кратна кратчайшей, поэтому только один байт на x86 (0xcc, INT 3). На процессорах Cortex-M инструкции имеют 2 или 4 байта, поэтому команда точки останова представляет собой инструкцию с 2 байтами.

Программные точки останова могут быть легко установлены, если программа находится в ОЗУ (например, на ПК). Многие встроенные системы имеют программу, расположенную во флэш-памяти. Здесь не так легко обмениваться инструкцией, так как флэш нужно перепрограммировать, поэтому аппаратные точки останова используются в первую очередь. Большинство отладочных зондов поддерживают только аппаратные точки останова, если программа находится во флэш-памяти. Однако некоторые (например, SEGGER J-Link) позволяют перепрограммировать флэш-память с инструкцией точки останова и разрешать неограниченное количество (программных) точек останова даже при отладке программы, находящейся во флэш-памяти.

Подробнее о контрольных точках программного обеспечения во флэш-памяти

Ответ 4

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

Джастин Зейтц в своей книге Gray Hat Python указывает на то, что важным отличием здесь является то, что перезаписывая инструкции, программные точки останова фактически изменяют CRC файла, и поэтому любая программа такого типа как вредоносная программа, которая вычисляет свой CRC, может изменить свое поведение в ответ на устанавливаемые точки останова, тогда как с аппаратными точками останова менее очевидно, что отладчик останавливается и проходит через определенные фрагменты кода.

Ответ 5

Вкратце, аппаратные контрольные точки используют выделенные регистры и, следовательно, ограничены по количеству. Они могут быть установлены как в энергозависимой, так и в энергонезависимой памяти.

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

Эта статья дает хорошее объяснение о контрольных точках.

Спасибо и приветствую, Шивакумар V W

Ответ 6

Контрольные точки

Это тот случай, когда аппаратная обработка выполняется намного быстрее:

watch var
rwatch var
awatch var

Когда вы вводите эти команды в GDB 7.7 x86-64, он говорит:

Hardware watchpoint 2: var

Эта аппаратная возможность для x86 упоминается по адресу: http://en.wikipedia.org/wiki/X86_debug_register

Вероятно, это возможно из-за существующей схемы подкачки, которая управляет каждым доступом к памяти.

"Программная" альтернатива - пошаговая программа, которая очень медленная.

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

Ответ 7

Некоторая цитата из справки Intel System Debugger help:

Оборудование и точки останова программного обеспеченияОтладчик может использовать оба устройства и контрольные точки программного обеспечения, каждый из которых имеет свои сильные и слабые стороны:

Hardware Breakpoints реализованы с использованием архитектуры DRx регистры точек останова, описанные в Intel SDM. Они имеют преимущество использования непосредственно при reset, будучи нелетучим, и может использоваться с флэш-памятью или другой постоянной памятью. Недостатком является что они являются конечным ресурсом. Программные точки останова требуют изменяя системную память, поскольку они реализованы путем замены код операции в нужном месте со специальной инструкцией. Это делает их неограниченный ресурс, но зависимость от памяти означает, что вы не можете установите их перед загрузкой модуля в память, и если целевое программное обеспечение перезаписывает эту память, после чего они становятся недействительными. В общем, любая функция отладки, которая должна быть включена отладчиком не сохраняется после reset, и может быть затронута после других переходы архитектурного режима, такие как ввод/вывод SMM или VM вход/выход. Конкретные примеры включают:

CPU Reset очистит все функции отладки, кроме Reset break. Эта означает, например, что пользовательские точки останова будут недействительными пока мишень не остановится после reset. Обратите внимание, что эта остановка может быть из-за либо reset -break, либо из-за остановки пользователя. В либо в случае, если отладчик восстановит необходимые функции отладки. SMM Entry/exit отключит/снова включит точки останова, это означает, что вы не может указывать точку останова в SMRAM, останавливаясь за пределами SMRAM. Если вы хотите перерыв в SMRAM, вы должны сначала остановиться на SMM точка входа и вручную применить точку останова. В качестве альтернативы вы можете исправить BIOS, чтобы повторно включить точки останова при входе в SMM, но это требует возможности изменять BIOS, который не может быть использован в производственный код.