Цитата(zombi @ Jan 28 2012, 14:04)

Для усложнения дизассемблирования (анализа) кода путём сравнения нескольких прошивок.
...Хочется что бы именно код по разному лежал, т.е. все джампы и колы (ну или многие) имели разную кодировку.
Для этого нужно самому хорошо "поработать" над Вашей программой.
Используйте прероцессор (#if #else #elif #endif). В условии можно применить предопределенный макрос __SECOND__. Например, если число секунд меньше 30, то один участок, больше - другой; в другом месте - например, условие: число секунд <10, в третьем -... и т.д.
Если свободной памяти много, можно "разбавить" программу "бесполезными" кусками кода разной длины от какого-либо условия, приведенного выше, но, выглядящими вполне "осмысленно" (оформить процедурами, вызовы/переходы между этими кусками...). Естественно, вставлять эти куски не абы куда, а между "нормальными" процедурами. Если вставки будут иметь разную длину от условия, то и "полезные" куски кода будут размещаться в разных прошивках по разным адресам.
Можно ещё и "полезные" куски кода написать в двух-трёх вариантах (например, обращение к регистрам устройств можно сделать через OUT/IN, а можно - через LD/ST и др.варианты, выполняющие одно и то же действия, но другими командами - в конце-концов: переставить пару команд местами, если это не "повредит" программе...). Разные варианты "полезного" кода - тоже "чередовать" в зависимости от условия в условном операторе пропроцессора.
Имхо, так сделать - можно, но, не запутаетесь ли Вы при правке (доработке) программы? Не усложните ли Вы жизнь только себе?