|
Глюк симулятора в AVR Studio v4.16 build 628, А вот в v3.56 всё было нормально |
|
|
|
May 27 2010, 15:36
|
Частый гость
 
Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355

|
Цитата(galjoen @ May 27 2010, 15:15)  Пока не проверил я АВРСИМУЛЯТОР2 - нет доступа к широкому каналу интернета, чтобы последнюю версию AVR Studio скачать. Да нет там вашего кристалла. Я пробовал воспроизвести глюк на версии 700 - ничего не получается, отрабатывает нормально и с блоком 100 слов и 1000. Пробовал только на одном блоке. Кстати, посмотрите версию вашего кристалла при открытом проекте - Help->About->Version. У меня - AT90CAN128 170.
|
|
|
|
|
May 28 2010, 06:17
|
Частый гость
 
Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066

|
Цитата(=GM= @ May 27 2010, 18:50)  Странно, у меня студия 4.18 Build 692, а проц AT90CAN128 почему-то доступен. Для AVRSIMULATOR - доступен. А для AVRSIMULATOR2 - нет.
|
|
|
|
|
May 28 2010, 08:15
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(alag57 @ May 27 2010, 19:36)  Да нет там вашего кристалла. Я пробовал воспроизвести глюк на версии 700 - ничего не получается, отрабатывает нормально и с блоком 100 слов и 1000. Пробовал только на одном блоке. Кстати, посмотрите версию вашего кристалла при открытом проекте - Help->About->Version. У меня - AT90CAN128 170. У меня так: Цитата AVR Studio 4.16.628 GUI Version 4, 16, 0, 626 AVR Simulator 1, 0, 2, 1 AT90CAN128 170
Operating System Major 5 Minor 1 PlatformID 2 Build 2600 Service Pack 3
Plugins:
AvrPluginAvrAsmObject 1, 0, 0, 47 AvrPluginavrgccplugin 1, 0, 0, 10 Stk500Dll 1, 0, 1, 11 А в доступных для АВРСИМУЛЯТОР 2 кристаллах не вижу ни одного с 128 кбайт флеша и чтобы у него RAMPZ0 был bit0 по адресу 0x3B. А м.б. 1000 слов мало для сбоя? Вот у меня на 2-м блоке сбивается: 0x7E...0x1CB6 - это 0x1C38 = 7224 слов 14448 байт.
|
|
|
|
|
May 28 2010, 09:00
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Предлагаю уважаемым модераторам вычленить из этой темы разговоры о целостности прошивки в отдельную тему например "Как и когда стоит защищать программу"Цитата(=GM= @ May 27 2010, 01:53)  Не скажите, уже и в MD5 нашли дырки, Простите, а каков размер вашего бинарника? Цитата так что у меня еще и seed буфер стоит и динамически меняется этой самой федерацией автомотоспорта на ходу. А что такое "seed буфер"? Цитата Ну вообще-то да, но как вы догадались? Автомобили - моя страсть. Сам на Subaru зажигаю... И вообще, иногда я очень сообразителен:-) Цитата(galjoen @ May 27 2010, 13:15)  Раз уж зашла речь по автомобили, то там как раз это нужно. Допустим кто-то написал прошивку для ЭБУ, откатал на машине, и не хочет чтобы другие таблицы его настроек меняли (тюнинговали). А прошивку эту зашифровать в принципе невозможно - ну нет в загрузчике у стандартного ЭБУ никакого шифрования. И таблицы скрыть/зашифровать тоже невозможно, т.к. прошивка на 70% из них состоит. Да на расшифровывание и времени нет. Вот тут как раз проверка приложением собственной целостности и нужна. Это вы о внешнем еепром толкуете? То это несколько другая тема и решаться ИМХО она может иначе. Я предпочитаю при разработке устройства заранее об этом подумать, чтобы потом не заморачиваться с изысками, а сосредоточится лишь на сути... И у меня складывается впечатление, что Вы не читаете того, что я уже написал: Цитата(demiurg_spb @ May 24 2010, 14:08)  На мой взгляд - никакого практического смысла нет. И пусть даже оно работает месяцами без перезагрузки - шансы успеть отловить такую бяку на лету очень малы (по моим оценкам сильно меньше 1%). Что есть сказать на сей счёт? А разговоры о MD5 - это уже вторично...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
May 28 2010, 09:30
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(demiurg_spb @ May 28 2010, 13:00)  Это вы о внешнем еепром толкуете? То это несколько другая тема и решаться ИМХО она может иначе. Я предпочитаю при разработке устройства заранее об этом подумать, чтобы потом не заморачиваться с изысками, а сосредоточится лишь на сути... Не только внешний eeprom, я о тех случаях, когда программа пишется для уже имеющегося устройства, причём чужой разработки. Цитата(demiurg_spb @ May 28 2010, 13:00)  И у меня складывается впечатление, что Вы не читаете того, что я уже написал: Что есть сказать на сей счёт? Не знаю, как вы считаете шансы, м.б. объясните, но у меня получается более 50%. 1. Запорчен код исполняемой команды, которая выполнилась не правильно -> ватчдог, зацикливание на подсчёте CRC. 2. Запорчен код исполняемой команды, которая не выполнилась -> зацикливание на подсчёте CRC. 3. Запорчены данные в таблице -> зацикливание на подсчёте CRC. В моём случае это была защита от продолжительной работы с испорченными данными в таблице. Вот это самое страшное, что может случится. Цикл подсчёта CRC32, которая считается по байту за раз, для всего флеша составляет 1..2 секунды. Ну вот и получается, что через 2 секунды такая ситуация будет отловлена. А за 2 секунды ничего страшного в принципе случится не может. Ну а самый главный аргумент, это то, что такая защита делается очень просто. Побитное вычисление CRC32 по слову за раз, с вызовами, таблицами и т.д. - у меня это 88 строчек на асме, и 6 байт ОЗУ. И кочует из проекта в проект. Не понимаю, о чём тут спорить?
|
|
|
|
|
May 28 2010, 09:53
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(galjoen @ May 28 2010, 13:30)  Не знаю, как вы считаете шансы, м.б. объясните, но у меня получается более 50%. Пусть даже вы считаете CRC по нескольку байт за раз посещения фоновой программы, а результат валидности флеша получаете лишь когда прошлись по нему целиком. Пример с потолка: 32К флеша проверяем по 8 байт за проход: 32K/8 = 4K. Грубо вероятность выполнения битой программы равна (100 - 100/4К) = 99,975% Единственное что может иногда утешить: Цитата(galjoen @ May 28 2010, 13:30)  А за 2 секунды ничего страшного в принципе случится не может.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
May 28 2010, 09:59
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(demiurg_spb @ May 28 2010, 08:00)  1) Простите, а каков размер вашего бинарника?
2) А что такое "seed буфер"? Памяти у меня 128 КБ, забито под 100 КБ, но MD5 алгоритм тестирует всю память. Seed buffer это двойное слово (64 бита), которое вгрубе пристыковывается к началу тестируемой памяти и т.о. влияет на выходной context. Алгоритм работает в фоне, непрерывно вычисляя MD5, а посев никто не знает, я его получаю по кану от FIA, которая имеет весь мой код и может самостоятельно посчитать MD5.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
May 28 2010, 10:38
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(demiurg_spb @ May 28 2010, 13:53)  Пусть даже вы считаете CRC по нескольку байт за раз посещения фоновой программы, а результат валидности флеша получаете лишь когда прошлись по нему целиком. Пример с потолка: 32К флеша проверяем по 8 байт за проход: 32K/8 = 4K. Грубо вероятность выполнения битой программы равна (100 - 100/4К) = 99,975% Не понял, вы считаете, что между проверками выполняется ВСЯ программа? Да собственно, и не так важно однократное выполнение битой команды. На 80% это приведёт к срабатыванию ватчдога. Так же может сработать контроль стека, основных регистров и т.д. Но важно, чтобы работа при наличии ошибки не продолжалась. Кстати, у меня всё в лог пишется. Так я ещё ни одного запуска процессора по срабатыванию ватчдога там не видел, тем более ошибки CRC. Но это не значит, что ватчдог не нужен. Цитата(=GM= @ May 28 2010, 13:59)  Памяти у меня 128 КБ, забито под 100 КБ, но MD5 алгоритм тестирует всю память. У меня в той программе пришлось несколько таблиц во второй половине FLASH отдать пользователю, соответственно CRC32 там не считается. CRC32 я считаю по самодельному производящему многочлену, чтобы зная многочлен не изменили область памяти так, что общая CRC32 останется такой же. Цитата(=GM= @ May 28 2010, 13:59)  посев никто не знает, я его получаю по кану Странно, а что почитать из кана никто не может? Пусть там даже и зашифровано всё. Поставить фильтр не некоторые ID, и подменять их...
|
|
|
|
|
May 28 2010, 10:49
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(galjoen @ May 28 2010, 14:38)  Не понял, вы считаете, что между проверками выполняется ВСЯ программа? Иногда вся, иногда (чаще) нет поэтому я и не настаиваю на сотых долях процента, а говорю о величине порядка процента. Цитата Да собственно, и не так важно однократное выполнение битой команды. На 80% это приведёт к срабатыванию ватчдога. Это оценить сложно, всё от логики программы сильно зависит и от размера стека...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
May 28 2010, 11:10
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(galjoen @ May 28 2010, 09:38)  Странно, а что почитать из кана никто не может? Пусть там даже и зашифровано всё. Поставить фильтр не некоторые ID, и подменять их... А толку? Ну прочитал кто-то посев, дальше-то что делать? У меня MD5 для 128 КБ считается за 0.3 сек в фоне, и хотя флеш-память неизменна, но выдавать запомненный digest нет смысла, т.к. посев его изменяет. Как и с помощью чего изменить память так, чтобы MD5 был одинаковым? А ещё надо полезную работу делать, у меня основной цикл 300 мкс.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
May 28 2010, 14:08
|
Частый гость
 
Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355

|
Цитата(galjoen @ May 28 2010, 14:15)  А м.б. 1000 слов мало для сбоя? Вот у меня на 2-м блоке сбивается: 0x7E...0x1CB6 - это 0x1C38 = 7224 слов 14448 байт. Попробую 2-3 блока. Сначала данных было маловато. Я уж подумал - 1000 слов - куда уж больше
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|