Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVRASM2
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
zombi
Нужно сделать так чтобы при каждой компиляции одного и тогоже файла генерился разный код, т.е. каждый мк был уникальным.
Понимаю что нужно редактировать исходник, но не вручную а как-то автоматически.
Вот еслиб было что-то типа такого biggrin.gif

.org PC+random(X)

Кто что может посоветовать.
Палыч
Для каких целей нужно, чтобы код был бы всегда разный?

Можно, например, вставить в качестве такой изменяющейся части что-то такое
Код
   .db __DATE__, __TIME__

Используются в примере предопределённые макросы, доющие строки с датой и временем компиляции.
prottoss
Цитата(zombi @ Jan 28 2012, 05:47) *
Нужно сделать так чтобы при каждой компиляции одного и тогоже файла генерился разный код, т.е. каждый мк был уникальным.
Не совсем понятно, ВЫ для каждого МК будете компилить прошивку? biggrin.gif

Проще скомпилировать прошивку один раз а за тем уже какой то самописной утилитой добавлять к ней свой ID в определенном месте.
zombi
Цитата(Палыч @ Jan 28 2012, 09:22) *
Для каких целей нужно, чтобы код был бы всегда разный?

Для усложнения дизассемблирования (анализа) кода путём сравнения нескольких прошивок.
Сомневаюсь что это сильно усложнит, но всёже ...
Цитата(Палыч @ Jan 28 2012, 09:22) *
Можно, например, вставить в качестве такой изменяющейся части что-то такое
Код
   .db __DATE__, __TIME__

Это можно, но эта последвательность будет явно видна по одним и темже адресам.

Цитата(prottoss @ Jan 28 2012, 09:54) *
Не совсем понятно, ВЫ для каждого МК будете компилить прошивку? biggrin.gif

Время компиляции не боьшое (2-3 сек) почему бы и нет biggrin.gif
Главное что бы всё было автомитически, например путем запуска *.bat файла.
Цитата(prottoss @ Jan 28 2012, 09:54) *
Проще скомпилировать прошивку один раз а за тем уже какой то самописной утилитой добавлять к ней свой ID в определенном месте.

Тоже легко находится при сравнении пары прошивок.

Хочется что бы именно код по разному лежал, т.е. все джампы и колы (ну или многие) имели разную кодировку.
Палыч
Цитата(zombi @ Jan 28 2012, 14:04) *
Для усложнения дизассемблирования (анализа) кода путём сравнения нескольких прошивок.
...Хочется что бы именно код по разному лежал, т.е. все джампы и колы (ну или многие) имели разную кодировку.

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

Имхо, так сделать - можно, но, не запутаетесь ли Вы при правке (доработке) программы? Не усложните ли Вы жизнь только себе?
zombi
Спасибо Палыч.
Цитата(Палыч @ Jan 28 2012, 14:49) *
Используйте прероцессор (#if #else #elif #endif). В условии можно применить предопределенный макрос __SECOND__. Например, если число секунд меньше 30, то один участок, больше - другой; в другом месте - например, условие: число секунд <10, в третьем -... и т.д.

Надо попробывать.
Цитата(Палыч @ Jan 28 2012, 14:49) *
Если свободной памяти много, можно "разбавить" программу "бесполезными" кусками кода разной длины от какого-либо условия, приведенного выше, но, выглядящими вполне "осмысленно" (оформить процедурами, вызовы/переходы между этими кусками...). Естественно, вставлять эти куски не абы куда, а между "нормальными" процедурами. Если вставки будут иметь разную длину от условия, то и "полезные" куски кода будут размещаться в разных прошивках по разным адресам.

Морочливо, но можно.
Цитата(Палыч @ Jan 28 2012, 14:49) *
Можно ещё и "полезные" куски кода написать в двух-трёх вариантах (например, обращение к регистрам устройств можно сделать через OUT/IN, а можно - через LD/ST и др.варианты, выполняющие одно и то же действия, но другими командами - в конце-концов: переставить пару команд местами, если это не "повредит" программе...). Разные варианты "полезного" кода - тоже "чередовать" в зависимости от условия в условном операторе пропроцессора.

Имхо, так сделать - можно, но, не запутаетесь ли Вы при правке (доработке) программы? Не усложните ли Вы жизнь только себе?

Даа... с таким текстом о доработках можно забыть навсегда. biggrin.gif

Конечно же речь идёт о законченом и отлаженном проекте.
Желательно незначительное изменение текста программы с обязательным сохранением читабельности (для разработчика).
ataradov
А зачем при реверс-инжениринге нужно несколько прошивок? Одну слил и вперед.
kolobok0
Цитата(zombi @ Jan 28 2012, 14:04) *
Для усложнения дизассемблирования (анализа) кода путём сравнения нескольких прошивок....Хочется что бы именно код по разному лежал..


скажите, когда Вы смотрите чужую прошивку на азме, вы её как воспринимаете? правильно - как чёрный ящичек, где вот понятны хвостики. и далее раскрутка за хвостики... Теперь вопрос, а нафига вам несколько чёрных ящечков с кучей хвостов? ну если только в одной была взведена ознакомительная версия, а в другой типа боевая. (больше на ум что то нифига не приходит, когда сравнительный анализ потребуется)...

тут выше правильно сказали - "скачал и вперёд".

я предложу вам другой способ. сделайте виртуальную машину. и изменяйте код, который её кормите. а ежели ышо виртуальная машина крутит сама виртуальную машину - взломать такое без путылки хорошего виски - практически анреал... в исходниках вы можете как угодно изголяться - меняя коды команд, от прошивки к прошивки.

удачи вам
(круглый)
zombi
Цитата(Taradov Alexander @ Jan 30 2012, 19:14) *
А зачем при реверс-инжениринге нужно несколько прошивок? Одну слил и вперед.

Думаю Вы правы. Ну просто "шоб було".
И ещё предполагаю что если слитая "пиратами" прошивка откажется работать или будет работать не правильно то они захотят убедиться что правильно оную слили путём сравнения прошивок нескольких чипов. А не тутто было biggrin.gif
Цитата(kolobok0 @ Jan 30 2012, 20:29) *
я предложу вам другой способ. сделайте виртуальную машину. и изменяйте код, который её кормите.

Согласен, надо подумать.
Цитата(kolobok0 @ Jan 30 2012, 20:29) *
а ежели ышо виртуальная машина крутит сама виртуальную машину - взломать такое без путылки хорошего виски - практически анреал... в исходниках вы можете как угодно изголяться - меняя коды команд, от прошивки к прошивки.

Ага, скорее сам запутаешся чем кто разберётся.

Цитата(Палыч @ Jan 28 2012, 13:49) *
В условии можно применить предопределенный макрос __SECOND__.

Действительно есть и __SECOND__ и __MINUTE__ ... __YEAR__ и их можно использовать как угодно!
Но почему в DS на avrsm2 они не описаны???
ae_
Цитата(zombi @ Jan 31 2012, 07:34) *
...Действительно есть и __SECOND__ и ... Но почему в DS на avrsm2 они не описаны???

О каком DS идёт речь?
Макросы описаны в хелпе к студии:
AVR Studio 4.xx -> Help -> AVR Tools User Guide -> Contents -> AVR assembler 2 -> Preprocessor -> Pre-defined macros
ветерок
Занимался темой в своё время....

По-моему
Себе дороже заниматься этим.
Можно конечно привести полный веер логических цепочек но лень.
И ещё...
В этом мире ну очень мало не повторимого и очень дорогого,чтоб этим замарочится не только для своего эго.
Тем более за последние несколько лет активно подключились к программированию узбеки, китайцы и прочие.
Они пишут очень быстро и дёшего.

Маркетинг должен быть другим.
Думаю автор зря тратит своё время.
zombi
Цитата(ae_ @ Jan 31 2012, 05:24) *
О каком DS идёт речь?

Вот об этом AVRASM2
Студией не пользуюсь.

Цитата(ветерок @ Jan 31 2012, 07:48) *
Думаю автор зря тратит своё время.

Возможно.
ae_
Цитата(zombi @ Jan 31 2012, 16:24) *
Студией не пользуюсь.

Help AVRASM2 в формате CHM из AVR Studio 4 Нажмите для просмотра прикрепленного файла
upd: Тем, у кого установлена AVR Studio, файл по умолчанию находится здесь - C:\Program Files\Atmel\AVR Tools\Help\AVRASM.chm
zombi
Цитата(ae_ @ Jan 31 2012, 13:27) *
Help AVRASM2 в формате CHM из AVR Studio 4

Спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.