|
Монитор SAM-BA, Вредители навредили? |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 19)
|
Mar 26 2009, 15:58
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Можно немного подправить стартап, и ремапить самой загружаемой программой. Для этого по нулевому адресу меняем ldr pc, ... на b ..., затем ремапим процессор и делаем финт ушами: Код bic pc, pc, #0x300000 nop Ну а саму программу линкуем под нулевой адрес, естественно. UPD: И кэш инструкций надо не забыть грохнуть сначала.
|
|
|
|
|
Mar 26 2009, 17:24
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(DpInRock @ Mar 26 2009, 20:10)  Надеюсь отыщу как убивать кэш. Вроде мелькало где-то. Код mrc p15, 0, r0, c1, c0, 0 ; read CP15 register 1 into r0 bic r0, r0, #0x01 ; clear MMU enable bic r0, r0, #(0x01 << 0x0c) ; disable I Cache bic r0, r0, #(0x01 << 0x02) ; disable D Cache mcr p15, 0, r0, c1, c0, 0 ; write value back Цитата(DpInRock @ Mar 26 2009, 20:10)  Вообще это тогда будет частный случай. Если эту же программу проц будет грузить из флэша будет облом. Он ремап сам делает перед джампом на 0. Ну, так уверяет даташит. Прямым текстом. Не будет он делать ремап, если это внешняя флеш (не dataflash). Состояние ремапа всегда можно проверить. Цитата(DpInRock @ Mar 26 2009, 20:10)  У атмела на этот счет ни гугу. Типа, чтоб сами разбирались? У Атмела remap - это просто старая традиция. Ну, и разбираться там особо нечего.
|
|
|
|
|
Mar 26 2009, 21:20
|

Гуру
     
Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515

|
Палучилось. !!!!!! Целый день, ё, мучался. Спасибо Иару 5 и принявшим участие в горькой судьбе начинающего армовладельца. Поправил на релятивный бранч и вставил ремап без проверки. Чего там проверять. Надеюсь, не будет неопознанных стартов с нулевого адреса.
Но до чего же странно устроены ихние армвские команды. Чтобы загнать число в регистр они делают вот что:
Требуется записать по адресу FFFF EE00 число 3. Берем инвертируем FF для получения FFFF FF00 MVN R0, #0xFF Потом инвертируем пару бит для получения FFFF EE00 BIC R0, R0, #0x1100.
Теперь в регистре R0 требуемый адрес. У него что, все команды только из одного слова состоятьт могут? И так Си с каждой константой мучается? Надо будет посмотреть.
O! А если использовать команду BL, то в R14 запишется PC? Это значит, я смогу узнать откуда стартовал и требуется ли ремап? Невреддно читать систему команд. Си как-то настраивает на леность в этом вопросе.
Сообщение отредактировал DpInRock - Mar 26 2009, 21:26
--------------------
On the road again (Canned Heat)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|