#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.