Тут скорее не прямое клонирование, а защита от обновления программы после клонирования актуальна.
Т.е. клонировать текущую версию удается, а вот загрузить дальше вариант обновления софтины не получается.
Starichok51Достаточно иметь доступ от SPM в рабочую область векторов.
Первичная запись бутлоадера одновременно и эту таблицу заполняет.
Только в ней не переходы на исполнительные программы, а передача управления расположенным также в области доступной SPM второй таблички с командами перехода. Эта область уже в "общедоступной области" (в любом на свое усмотрение месте).
Бутлоадер запустился по исходно прошитому переходу с ресета на промежуточный "ресет", загрузил нужную софтинку и... переписал вторичный вектор (в дубль-таблице). Кто тот вектор перепишет - фрагмент бута при своей работе или запускаемый из бута фрагмент основной софтины (или комбинация этих фрагментов) - это уже "изврат сочинителя".
Дальше выключаем устройство...
При повторном запуске ресет также адресует вторичную табличку, а в ней то уже другой вектор прописан - и обход бутлоадера гарантирован. Или проще ежли вектор ресета в общедоступной области переписан - но то "слишком заметно" может быть.
Ну и огромадное количество вариаций на ту же тему (в каком месте апендикс перезаписи расположен, где "маскирующая табличка" и как взаимодействие софтинок взаимосвязано).
У меня так работает биос бутлоадера/котиос котуинки при подгрузке целевых программ - там правда кросс-таблица в ОЗУ (совмещенная память программ/данных mcs51), но принцип практически одинаков (если свободная перезапись содержимого флеш выполняется).