Arlleex 131 28 марта Опубликовано 28 марта · Жалоба 22 минуты назад, Метценгерштейн сказал: Не размера только, а ее КС. Я КС добавляю руками, уже к готовому .bin файлу прошивки. Т.о. всегда после самой прошивки И размера, и КС. Я кладу в неиспользуемые вектора, либо после таблицы векторов (в разных проектах исторически по-разному). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 28 марта Опубликовано 28 марта · Жалоба 8 minutes ago, aaarrr said: Не разместилось ли что аккурат по тому адресу, где ожидалась добавленная вручную КС. при том, что я имею прошивку, где конец ее до 0x0001E194. Т.е. 0x0001E193- полседний байт прошивки. Со 0x0001E194 добавляю руками КС. А по мапу получается, что-то дописывает ко мне и перетирает? 2 minutes ago, Arlleex said: И размера, и КС. Я кладу в неиспользуемые вектора, либо после таблицы векторов (в разных проектах исторически по-разному). Получается, моя задача- стандартная- много когда нужна КС прошивки? а вектора эти- они не участвуют в теле прошивки? Т.е. при подсчете КС, не будут посчитаны? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 28 марта Опубликовано 28 марта · Жалоба 4 минуты назад, Метценгерштейн сказал: а вектора эти- они не участвуют в теле прошивки? Т.е. при подсчете КС, не будут посчитаны? Ну Вы же сами пишете программу - все от Вас только и зависит. Я после компиляции проекта в 2 зарезервированных места кладу размер прошивки в байтах и контрольную сумму, посчитанную, разумеется, без учета содержимого в контрольной сумме. Написал простейший сишный екзешник, запускаемый либо отдельно, либо прямо IDE-шкой после компиляции. В МК загрузчик знает адреса размера прошивки и контрольной суммы и делает все наоборот: читает размер, проходится по всей прошивке кроме контрольной суммы, контрольную сумму добавляет в конце и должен получиться 0. Ведь никто не мешает КС проверять не единым блоком, а разбитым на несколько отдельных участков памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 28 марта Опубликовано 28 марта (изменено) · Жалоба 1 hour ago, Метценгерштейн said: А по мапу получается, что-то дописывает ко мне и перетирает? Перетирает. 1 hour ago, Метценгерштейн said: а вектора эти- они не участвуют в теле прошивки? Т.е. при подсчете КС, не будут посчитаны? Участвуют. План такой: - Резервируете поле в известном месте прошивки (не обязательно в векторах, просто так удобнее), пишете в него 0 - Считаете CRC прошивки, заменяете 0 на результат В прошивке считаете CRC подряд, убеждаетесь, что на выходе результат 0 В прошивке считаете CRC с нулевым содержимого поля, сравниваете с реальным. Изменено 28 марта пользователем aaarrr Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 28 марта Опубликовано 28 марта · Жалоба 1 minute ago, aaarrr said: Перетирает. Участвуют. План такой: - Резервируете поле в известном месте прошивки (не обязательно в векторах, просто так удобнее), пишете в него 0 - Считаете CRC прошивки, заменяете 0 на результат В прошивке считаете CRC подряд, убеждаетесь, что на выходе результат 0 Картина начинает вырисовываться. Только мне не CRC надо, а хэш. Там один бит поменял, хэш совсем другой. А коллега выше постом что говорит? Вот не могу его мысль уловить как сделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 28 марта Опубликовано 28 марта · Жалоба 2 минуты назад, aaarrr сказал: План такой: Единым блоком считать КС не получится так. Особенно, если в качестве алгоритма взят CRC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 28 марта Опубликовано 28 марта · Жалоба Алгоритм- хэш сумма. Не важно, MD5 или что. Там блоками не считают. Сразу всё. И посчитать надо как-то без самого вкрапления в прошивку этой суммы- исказит результат Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 28 марта Опубликовано 28 марта · Жалоба 20 минут назад, Метценгерштейн сказал: А коллега выше постом что говорит? Вот не могу его мысль уловить как сделать. Коллега имел в виду вот что Вот Вы скомпилировали свой hex-файл прошивки. В ней так или иначе предусмотрели 2 служебных поля (пока что пустых): Application Size и CRC32. 1. Дальше сторонней утилитой открываете бинарник и записываете в App Size размер файла прошивки (он же размер образа, лежащего во Flash МК потом). 2. Дальше считаете КС от начала до App Size включительно. 3. Дальше считаете КС до конца файла, исключая App CRC32. Полученную КС кладете в App CRC32 и сохраняете бинарник. Теперь при старте МК выполняет штатную процедуру загрузки. МК читает App Size, и точно так же как программа подготовки бинарника считает КС. Сверяет с записанной. Совпало - ок, нет - образ записан криво. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 28 марта Опубликовано 28 марта · Жалоба Спасибо. А если усложнить тем, что моя КС- это 32 байта? Тут как поступить? Еще раз, мне не CRC32 надо. Мне хэш всего и сразу. Его нельзя по кускам посчитать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 28 марта Опубликовано 28 марта · Жалоба Только что, Метценгерштейн сказал: Спасибо. А если усложнить тем, что моя КС- это 32 байта? Тут как поступить? А разница? Хоть 100 байт, если места хватит. Насчет блочных хэшей - тоже не вижу проблемы, т.к. блок добивается нулями как на стороне программы подготовки бинарника, так и на стороне МК при "распаковке". 2 минуты назад, Метценгерштейн сказал: Его нельзя по кускам посчитать. Можно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 28 марта Опубликовано 28 марта · Жалоба Все равно еще не улавливаю мысли как сделать. есть прошивка от 0 до 0x0001E194 B хэш я считаю именно ее, без таблицы векторов и прочего. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 28 марта Опубликовано 28 марта · Жалоба Тогда задача не решаема. Ибо Вы пытаетесь считать хэш двух разных прошивок - одной с еще неизвестным хэшем, другую - с известным и записанным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 28 марта Опубликовано 28 марта · Жалоба Думаем. Решаема. Скорее, надо считать хеш внутри самой прошивки и положить куда-то туда, где он будет вне прошивки. Внешняя флеш- может как вариант. Но как только я объявляю массив с __attribute__ и указывваю на его размещение, не войдет ли этот массив в состав прошивки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 28 марта Опубликовано 28 марта · Жалоба 56 minutes ago, Arlleex said: Единым блоком считать КС не получится так. Особенно, если в качестве алгоритма взят CRC. Вы правы, посмотрел сейчас - у меня в конце CRC дописывается, поэтому 0. А внутри только длина и номер сборки. 15 minutes ago, Метценгерштейн said: Скорее, надо считать хеш внутри самой прошивки и положить куда-то туда, где он будет вне прошивки. Достаточно скрипт линкера поправить таким образом, чтобы в конце загрузочного региона оставалось пространство, достаточное для хранения хеша. И спокойно приклеивать его. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 28 марта Опубликовано 28 марта · Жалоба 2 minutes ago, aaarrr said: Достаточно скрипт линкера поправить таким образом, чтобы в конце загрузочного региона оставалось пространство, достаточное для хранения хеша. И спокойно приклеивать его. можно попросить раскрыть подробности? Скрипт линкера- это .sct файл? Тогда в коде прошивки как это будет выглядеть? Объявляю массив по адресу, что в линкере не учитывается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться