реклама на сайте
подробности

 
 
> Сигнатура LPC
3.14
сообщение Jan 12 2007, 14:03
Сообщение #1


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Как автоматизировать процесс вычисления и подстановки сигнатуры?
Использовать только ради этого LPC2000 Flash utility не самый лучший вариант.


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 22)
amw
сообщение Jan 12 2007, 17:18
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
3.14
сообщение Jan 12 2007, 21:42
Сообщение #3


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Именно та что по 0х14 адресу ставится, не поделитесь своей тулзой.


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
makc
сообщение Jan 12 2007, 22:51
Сообщение #4


Гуру
******

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



Цитата(3.14 @ Jan 12 2007, 21:42) *
Именно та что по 0х14 адресу ставится, не поделитесь своей тулзой.


Их есть у нас. См. в приложении.
Прикрепленные файлы
Прикрепленный файл  patch_0x14.zip ( 77.54 килобайт ) Кол-во скачиваний: 71
 


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 13 2007, 00:37
Сообщение #5


Гуру
******

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



Цитата(makc @ Jan 12 2007, 21:51) *
Их есть у нас. См. в приложении.

К делу не относится, но размер приблуды в 163840 байт резанул глаз несоразмерностью решаемой задаче sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
3.14
сообщение Jan 13 2007, 01:42
Сообщение #6


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



2 makc
Спасибо!


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
Alex03
сообщение Jan 14 2007, 13:38
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 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


Иль ради экономии нескольких байт/тактов? ...
Go to the top of the page
 
+Quote Post
makc
сообщение Jan 14 2007, 13:47
Сообщение #8


Гуру
******

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



Цитата(zltigo @ Jan 13 2007, 00:37) *
Цитата(makc @ Jan 12 2007, 21:51) *

Их есть у нас. См. в приложении.

К делу не относится, но размер приблуды в 163840 байт резанул глаз несоразмерностью решаемой задаче sad.gif


Могу сделать на Python'е. Будет на порядки короче. wink.gif
А вообще это все происки C++, который не жалеет байты в век терабайтов. smile.gif


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
3.14
сообщение Jan 14 2007, 14:33
Сообщение #9


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



2 Alex03
Как то боязно, хотя пока так и делаю. Компилятор/линковщик сам решает где чего лежать должно ...


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
makc
сообщение Jan 14 2007, 14:40
Сообщение #10


Гуру
******

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



Цитата(3.14 @ Jan 14 2007, 14:33) *
2 Alex03
Как то боязно, хотя пока так и делаю. Компилятор/линковщик сам решает где чего лежать должно ...


Ничего страшного в этом нет, т.к. стартап и его векторы исключений должны в любом случае лежать в сегменте кода первыми. Если этого не будет, то прошивка вообще не заработает. Кроме того, смещения в приведенном стартапе получаются фиксированные. Так что ничего особенно плохого в таком подходе нет, кроме того, что нужно хотя бы один раз посчитать контрольную сумму либо вручную, либо с помощью сторонней программы. rolleyes.gif


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 14 2007, 14:47
Сообщение #11


Гуру
******

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



Цитата(makc @ Jan 14 2007, 12:47) *
А вообще это все происки C++, который не жалеет байты в век терабайтов. smile.gif

С++ оно ясно, хотя откомпилировав исходник я не получил такого монстра (см. в приложении). Для
монстрального результата без "соответствующего" компилятора не обойтись smile.gif.
Ну а на С в килобайт 6-7 уложиться можно.
Прикрепленные файлы
Прикрепленный файл  main_p14.rar ( 24.55 килобайт ) Кол-во скачиваний: 38
 


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
3.14
сообщение Jan 14 2007, 15:07
Сообщение #12


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



2 makc
Ну а если вот такой случай:
изначально обработчики прерываний занимали определенный объем, была просчитана сигнатура и забита в стартап. По ходу работы эти обработчики разростлись в размере и сместились в карте памяти т.е. наступил кердык.
Или я что упустил?


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
makc
сообщение Jan 14 2007, 15:11
Сообщение #13


Гуру
******

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



Цитата(zltigo @ Jan 14 2007, 14:47) *
Цитата(makc @ Jan 14 2007, 12:47) *

А вообще это все происки C++, который не жалеет байты в век терабайтов. smile.gif

С++ оно ясно, хотя откомпилировав исходник я не получил такого монстра (см. в приложении). Для
монстрального результата без "соответствующего" компилятора не обойтись smile.gif .
Ну а на С в килобайт 6-7 уложиться можно.


MS Visual С шестой версии - это далеко не лучший компилятор для C++. smile.gif


Цитата(3.14 @ Jan 14 2007, 15:07) *
2 makc
Ну а если вот такой случай:
изначально обработчики прерываний занимали определенный объем, была просчитана сигнатура и забита в стартап. По ходу работы эти обработчики разростлись в размере и сместились в карте памяти т.е. наступил кердык.
Или я что упустил?


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


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
3.14
сообщение Jan 14 2007, 15:16
Сообщение #14


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



И все-таки, сместятся обработчики, изменятся и ссылки ...
Наверное все-таки правильнее в стартапе ложить ссылки на обложки обработчиков в которых ссылки на реальные обработчики.


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
makc
сообщение Jan 14 2007, 15:22
Сообщение #15


Гуру
******

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



Цитата(3.14 @ Jan 14 2007, 15:16) *
И все-таки, сместятся обработчики, изменятся и ссылки ...
Наверное все-таки правильнее в стартапе ложить ссылки на обложки обработчиков в которых ссылки на реальные обработчики.


Тогда посмотрим на проблему так:
1. В векторе исключения лежит команда загрузки в PC содержимого по фиксированному адресу (косвенная ссылка).
2. По фиксированному адресу, на который ссылается вектор исключения, лежит значение адреса реального обработчика.

Таким образом, если изменится место расположения реального обработчика прерывания, то изменится не адрес ссылки, а только ее значение. При этом, поскольку при вычислении контрольной суммы (сигнатуры) используется адрес ссылки (фиксированный в стартапе), то ровным счетом ничего не изменится.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 14 2007, 15:34
Сообщение #16


Гуру
******

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



Цитата(makc @ Jan 14 2007, 14:11) *
ничего плохого не случится до тех пор, пока ассемблер не изменит свой алгоритм работы и, соответственно

Ассемблер не сможет ничего "изменить" и сгенерить более короткй/длинный код, если он конечно он для ARM smile.gif. Для маньяков - никто не мешает нафаршировать код ORG-ами перед каждой из первых 16 команд smile.gif, а не только QRG 0 перед первой.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
makc
сообщение Jan 14 2007, 15:39
Сообщение #17


Гуру
******

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



Цитата(zltigo @ Jan 14 2007, 15:34) *
Цитата(makc @ Jan 14 2007, 14:11) *

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

Ассемблер не сможет ничего "изменить" и сгенерить более короткй/длинный код, если он конечно он для ARM smile.gif . Для маньяков - никто не мешает нафаршировать код ORG-ами перед каждой из первых 16 команд smile.gif , а не только QRG 0 перед первой.


Это все понятно. Я просто попытался описать гипотетическую ситуацию, при которой может нарушиться установленный сейчас порядок вещей. smile.gif


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
3.14
сообщение Jan 14 2007, 16:00
Сообщение #18


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Тогда разъясните плиз по синтаксису (приведенного выше стартапа).
После загрузки РС (хотя выражение "#reset_handler_address - . - 8" выглядит как-то странно), в РС снова должен грузится адрес, а вместо этого:
reset_handler_address:
.word reset_handler
Это как ...?


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
Alex03
сообщение Jan 14 2007, 16:30
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(3.14 @ Jan 14 2007, 18:00) *
Тогда разъясните плиз по синтаксису (приведенного выше стартапа).
После загрузки РС (хотя выражение "#reset_handler_address - . - 8" выглядит как-то странно), в РС снова должен грузится адрес, а вместо этого:
reset_handler_address:
.word reset_handler
Это как ...?

Код
_vectors:
  ldr pc, [pc, #reset_handler_address - . - 8]  /* reset */

Тут #reset_handler_address это адрес переменной (константы) в которой лежит адрес настоящего обработчика.
"." это адрес текущей инструкции.
"-8" - особенности АРМ архитектуры, где, скажем так, PC указывает не на текущую исполняемую команду, а на голову конвеера, которая уже убежала вперёд. (поправьте если я не так выразился smile.gif )
Кстати этого момента я не очень понял, не уж то так сложно им было расширить корвеер 32-х битным регистром для PC на каждой стадии. smile.gif

В LPC контольная сумма считается только для первых 8-ми слов.
Т.е. из приведённого примера от
Код
  ldr pc, [pc, #reset_handler_address - . - 8]  /* reset */

до
Код
  ldr pc, [pc, #fiq_handler_address - . - 8]    /* fiq handler */

поэтому изменение "указателей" на обработчики (при их перемещении линкером)
Код
  .word reset_handler
  .word undef_handler
  .word swi_handler
  .word pabort_handler
  .word dabort_handler
  .word fiq_handler

Никак не влияет на контрольную сумму.

Ну а
Код
ldr pc, [pc, #-0xFF0]                         /* irq handler */

Это сразу загрузка из VICVectAddr
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 14 2007, 16:55
Сообщение #20


Гуру
******

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



Цитата(Alex03 @ Jan 14 2007, 15:30) *
Ну а
Код
ldr pc, [pc, #-0xFF0]                         /* irq handler */

Это сразу загрузка из VICVectAddr

Дополнительные разъяснения:
VICVectAddr = 0xFFFFF030
Текущий PC 18h +8 конвеер поминаемый ранее. Вычитаем 0xFF0 получаем желанный
0xFFFFF030.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
amw
сообщение Jan 15 2007, 16:01
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(3.14 @ Jan 12 2007, 22:42) *
Именно та что по 0х14 адресу ставится, не поделитесь своей тулзой.

В составе самописного программатора.
_hттp://projects.org.ua/project/amw/arm/lpcflash-0.2.0.tar.gz

Сообщение отредактировал amw - Jan 15 2007, 16:01


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
3.14
сообщение Jan 15 2007, 17:35
Сообщение #22


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Кстати, в подробности не вдавался, но HEX-ы IAR-а уже имеют правильную сигнатуру, хотя к его стартапу я не прикасался.


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 15 2007, 18:00
Сообщение #23


Гуру
******

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



Цитата(3.14 @ Jan 15 2007, 16:35) *
Кстати, в подробности не вдавался, но HEX-ы IAR-а уже имеют правильную сигнатуру, хотя к его стартапу я не прикасался.

Незнаю не знаю - при заливке IARовских HEX своим программатором неизменно получаю уведомление о том, что контрольная сумма была посчитана, не совпала и была заменена.....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th September 2025 - 13:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01617 секунд с 7
ELECTRONIX ©2004-2016