MX_Master 1 18 ноября, 2019 Опубликовано 18 ноября, 2019 · Жалоба Название темы, канеш, непонятное. Не знаю как точно назвать. ДАНО: есть готовый бинарник прошивки под STM32F207VCT6, исходников нет. По таблице векторов прерываний видно, что базовый адрес флэхи = 0x08000000. ЗАДАЧА: хочу разместить в начале флэхи (0x08000000) свой загрузчик, а следом за ним разместить 2 прошивки - оригинал и свою версию. В зависимости от настроек, загрузчик должен передавать управление одной из них. Свой проект можно собрать, указав линкеру смещенный адрес флэхи. А как быть с уже собранным оригиналом? Есть ли какой-то способ найти в бинарнике все адреса с флэхи и махнуть их на другие? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 197 18 ноября, 2019 Опубликовано 18 ноября, 2019 · Жалоба 2 минуты назад, MX_Master сказал: Есть ли какой-то способ найти в бинарнике все адреса с флэхи и махнуть их на другие? Есть: дизассемблер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 19 18 ноября, 2019 Опубликовано 18 ноября, 2019 · Жалоба Тупиковая задача, поскольку есть такая штука, как косвенная адресация. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 197 18 ноября, 2019 Опубликовано 18 ноября, 2019 · Жалоба Только что, Forger сказал: Тупиковая задача, поскольку есть такая штука, как косвенная адресация. Так в Cortex-M вроде как другой и нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MX_Master 1 18 ноября, 2019 Опубликовано 18 ноября, 2019 · Жалоба Только что, jcxz сказал: дизассемблер Никогда ещё не дизассемблировал бинарники от STM32, с чего можно начать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 19 18 ноября, 2019 Опубликовано 18 ноября, 2019 · Жалоба Just now, jcxz said: Так в Cortex-M вроде как другой и нет. Вот именно! Just now, MX_Master said: Никогда ещё не дизассемблировал бинарники от STM32, с чего можно начать? С поиска подходящего вам дизассемблера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MX_Master 1 18 ноября, 2019 Опубликовано 18 ноября, 2019 · Жалоба В контексте задачи можно оригинал разместить и с 0x08000000, а загрузчик в другом месте. Главное, чтобы первым стартовал именно загрузчик (: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 18 ноября, 2019 Опубликовано 18 ноября, 2019 · Жалоба 9 минут назад, MX_Master сказал: ЗАДАЧА: хочу разместить в начале флэхи (0x08000000) свой загрузчик, а следом за ним разместить 2 прошивки А если изменить задачу? Свой загрузчик разместить в конце и просто поправить ресет-вектор в первой прошивке, пусть она себе на месте лежит. А в загрузчик жёстко прописать старый вектор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 197 18 ноября, 2019 Опубликовано 18 ноября, 2019 · Жалоба 3 минуты назад, MX_Master сказал: Никогда ещё не дизассемблировал бинарники от STM32, с чего можно начать? Я тоже - никогда, так что - мало, что могу посоветовать в этом деле. Разве что думаю - дело это непростое, нужно достаточно хорошо знать ассемблер и ядро и делать такое только если вообще по-другому никак. PS: Да - дизассемблировать нужно не "для STM32", а "для Cortex-M". Вроде IDA умел Cortex-M. Хотя... может есть какой-то дизасм, специально заточенный под периферию STM32? 2 минуты назад, VladislavS сказал: А если изменить задачу? Свой загрузчик разместить в конце и просто поправить ресет-вектор в первой прошивке, пусть она себе на месте лежит. А в загрузчик жёстко прописать старый вектор. Многие прошивки (мои - все) проверяют своё содержимое на валидность через некоторое время после старта. Так что с ними этого не хватит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 18 ноября, 2019 Опубликовано 18 ноября, 2019 · Жалоба Возможно, но попробовать не сложно, может и заработает. А если проверяет, ломать дальше контрольную сумму. Всяко не всю прошивку дизасмить. Где ты там CRC хранишь? В свободных векторах или после прошивки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aaron 1 18 ноября, 2019 Опубликовано 18 ноября, 2019 · Жалоба По идее, можно в начало готового бинарника подставить переадресацию на начало вашего загрузчика (&sp и &Reset_Handler), чтобы он стартовал. Далее, в коде загрузчика явным образом должны храниться адреса &sp и &Reset_Handler, взятые из оригинального бинарника. В конце работы загрузчика эти сохранённые адреса используете, чтобы задать __set_MSP() и прыгнуть в Reset_Handler оригинального бинарника. Принципиальных проблем не вижу, но сам не пробовал. Напишите, если на практике всё получится. Тема интересная. 14 minutes ago, jcxz said: Многие прошивки (мои - все) проверяют своё содержимое на валидность через некоторое время после старта. Так что с ними этого не хватит. А ещё прошивки иногда создают в свободном пространстве флеша структуры с данными. И загрузчик соответственно может тупо затереться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 18 ноября, 2019 Опубликовано 18 ноября, 2019 · Жалоба Если есть возможность перевести МК в режим заводского загрузчика и подцепить к нему снаружи хитрую штуку, то эта хитрая штука сможет проделывать вот это всё, даже не трогая старую прошивку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 197 18 ноября, 2019 Опубликовано 18 ноября, 2019 · Жалоба 14 минут назад, VladislavS сказал: Где ты там CRC хранишь? В свободных векторах или после прошивки? Я сейчас - в свободном векторе. Но можно и в конце, или в середине - какая разница? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 18 ноября, 2019 Опубликовано 18 ноября, 2019 · Жалоба 6 минут назад, jcxz сказал: какая разница? Разница в том заработает ли у ТС сразу, надо будет пару байт найти или проще переписать прошивку с нуля. Против твоих способов хранения CRC ничего не имею :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MX_Master 1 18 ноября, 2019 Опубликовано 18 ноября, 2019 (изменено) · Жалоба Вариант с подменой адреса reset вектора гениален Спасибо, друзья. Бум пробовать... ЗЫ помониторить правку флэша из оригинала тоже не помешает Изменено 18 ноября, 2019 пользователем MX_Master Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться