Установка аппаратной точки останова в arm64

#android #c #debugging #arm #arm64

Вопрос:

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

Ответ №1:

Справочное руководство ARMv8 содержит таблицу ( Table D1-29 в версии G.b руководства), которая сопоставляет регистры AArch64 с их аналогами AArch32. Это включает в себя:

  • DBGBCR<n>_EL1[31:0] -> DBGBCR<n>
  • DBGBVR<n>_EL1[31:0] -> DBGBVR<n>
  • DBGBVR<n>_EL1[63:32] -> DBGBXVR<n>

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

Комментарии:

1. то есть вы имели в виду, что если я сохраню адрес внутри регистра DBGBXVR, то он будет активирован ?

2. Вы бы сохранили адрес в DBGBVR нем . Вам нужен VMID только DBGBXVR в том случае, если вы выполняете контекстно-зависимые действия с участием EL2.