|
Сигнатура LPC |
|
|
|
Jan 12 2007, 17:18
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(3.14 @ Jan 12 2007, 15:03)  Как автоматизировать процесс вычисления и подстановки сигнатуры? Использовать только ради этого LPC2000 Flash utility не самый лучший вариант. Если я правильно понял, может это оно? http://electronix.ru/forum/index.php?showtopic=23109Или имеется ввиду сигнатура наличия кода по адресу 0x18? Я для этого использую самописную программу, подключаемую в Makefile и запускаемую на бинарик.
Сообщение отредактировал amw - Jan 12 2007, 17:15
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Jan 14 2007, 13:38
|
Местный
  
Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034

|
А чем жёсткий стартап (область векторов прерываний) не устраивают? Посчитал один раз контрольную сумму и забыл. Как например в CW Код .section .vectors, "ax" .code 32 .align 0
_vectors: ldr pc, [pc, #reset_handler_address - . - 8] /* reset */ ldr pc, [pc, #undef_handler_address - . - 8] /* undefined instruction */ ldr pc, [pc, #swi_handler_address - . - 8] /* swi handler */ ldr pc, [pc, #pabort_handler_address - . - 8] /* abort prefetch */ ldr pc, [pc, #dabort_handler_address - . - 8] /* abort data */ #ifdef VECTORED_IRQ_INTERRUPTS .word 0xB9205F88 /* boot loader checksum */ ldr pc, [pc, #-0xFF0] /* irq handler */ #else .word 0xB8A06F60 /* boot loader checksum */ ldr pc, [pc, #irq_handler_address - . - 8] /* irq handler */ #endif ldr pc, [pc, #fiq_handler_address - . - 8] /* fiq handler */
reset_handler_address: .word reset_handler undef_handler_address: .word undef_handler swi_handler_address: .word swi_handler pabort_handler_address: .word pabort_handler dabort_handler_address: .word dabort_handler #ifndef VECTORED_IRQ_INTERRUPTS irq_handler_address: .word irq_handler #endif fiq_handler_address: .word fiq_handler Иль ради экономии нескольких байт/тактов? ...
|
|
|
|
|
Jan 14 2007, 14:40
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(3.14 @ Jan 14 2007, 14:33)  2 Alex03 Как то боязно, хотя пока так и делаю. Компилятор/линковщик сам решает где чего лежать должно ... Ничего страшного в этом нет, т.к. стартап и его векторы исключений должны в любом случае лежать в сегменте кода первыми. Если этого не будет, то прошивка вообще не заработает. Кроме того, смещения в приведенном стартапе получаются фиксированные. Так что ничего особенно плохого в таком подходе нет, кроме того, что нужно хотя бы один раз посчитать контрольную сумму либо вручную, либо с помощью сторонней программы.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Jan 14 2007, 14:47
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(makc @ Jan 14 2007, 12:47)  А вообще это все происки C++, который не жалеет байты в век терабайтов.  С++ оно ясно, хотя откомпилировав исходник я не получил такого монстра (см. в приложении). Для монстрального результата без "соответствующего" компилятора не обойтись  . Ну а на С в килобайт 6-7 уложиться можно.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 14 2007, 15:11
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(zltigo @ Jan 14 2007, 14:47)  Цитата(makc @ Jan 14 2007, 12:47)  А вообще это все происки C++, который не жалеет байты в век терабайтов.  С++ оно ясно, хотя откомпилировав исходник я не получил такого монстра (см. в приложении). Для монстрального результата без "соответствующего" компилятора не обойтись  . Ну а на С в килобайт 6-7 уложиться можно. MS Visual С шестой версии - это далеко не лучший компилятор для C++.  Цитата(3.14 @ Jan 14 2007, 15:07)  2 makc Ну а если вот такой случай: изначально обработчики прерываний занимали определенный объем, была просчитана сигнатура и забита в стартап. По ходу работы эти обработчики разростлись в размере и сместились в карте памяти т.е. наступил кердык. Или я что упустил? В приведенном выше примере стартапа в первых адресах лежат ссылки не на реальные обработчики, а лишь на ячейки памяти с адресами реальных обработчиков. Косвенные ссылки. Поэтому что бы ни происходило с реальными обработчиками, ничего плохого не случится до тех пор, пока ассемблер не изменит свой алгоритм работы и, соответственно, смещения для той таблицы с адресами реальных обработчиков, которая лежит после таблицы исключений.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Jan 14 2007, 15:22
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(3.14 @ Jan 14 2007, 15:16)  И все-таки, сместятся обработчики, изменятся и ссылки ... Наверное все-таки правильнее в стартапе ложить ссылки на обложки обработчиков в которых ссылки на реальные обработчики. Тогда посмотрим на проблему так: 1. В векторе исключения лежит команда загрузки в PC содержимого по фиксированному адресу (косвенная ссылка). 2. По фиксированному адресу, на который ссылается вектор исключения, лежит значение адреса реального обработчика. Таким образом, если изменится место расположения реального обработчика прерывания, то изменится не адрес ссылки, а только ее значение. При этом, поскольку при вычислении контрольной суммы (сигнатуры) используется адрес ссылки (фиксированный в стартапе), то ровным счетом ничего не изменится.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|