реклама на сайте
подробности

 
 
> Самомодифицирующийся код в экосистеме Cortex-M., есть ли право на жизнь?
jcxz
сообщение Jun 28 2018, 22:54
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Есть мысль использовать самомодифицирующийся код для оптимизации решения одной задачи.
Именно самомодифицирующийся - программа строит часть самой себя по некоему алгоритму, а не просто копирует куски кода из одной области памяти в другую.
И вот я что-то не смог вспомнить чтобы здесь на форуме вообще когда-то поднималась эта тема.
Кто-то вообще использует такой код на ARM-ах в своих проектах? Просто интересно... rolleyes.gif

PS: И пожалуйста - без религиозной нетерпимости.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Jun 29 2018, 00:32
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Давайте сначала:

Цитата(AVI-crak @ Jun 29 2018, 02:23) *
Всё дело в том что сама функция изменения физического и логического поведения кода на кортексах работает из коробки.

О какой магической функции речь? И что есть физическое и логическое поведение кода?

Цитата(AVI-crak @ Jun 29 2018, 02:23) *
Создавая собственный свод правил для определений поведения кода в режиме реального времени исполнения...

Свод правил для определений поведения - это как?

Цитата(AVI-crak @ Jun 29 2018, 03:11) *
Любая перетасовка программного кода - есть алгоритм. Ничего сложного, местами даже интересно, в плюсах вообще всё прозрачно получается.

Плюса-то здесь каким боком?
Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Jun 29 2018, 04:47
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 182
Регистрация: 16-10-15
Пользователь №: 88 894



Цитата(aaarrr @ Jun 29 2018, 06:32) *
О какой магической функции речь? И что есть физическое и логическое поведение кода?

Cortex, да и почти все arm чипы - используют внеочередное исполнение кода. Он может загружать адреса для двух функций одновременно. Просчитывать данные которые будут применяться где-то внутри функции до её реального вызова. Размазывать циклы на всю портянку. Обращать переменные в другое значение чем было назначено в пользовательской программе -без потери целостности алгоритма, и ещё много много чего. Это их главная фишка.
Фактически код в отладчике выполняется по строкам программы, а в реальности прыгает как бешеный сайгак.

Попытка воткнуть модификацию кода без предварительной изоляции всего куска - обычно приводит быстрому и окончательному сбою.

Свод правил - прикольная вещь. Кусок кода предварительно компилируется в асму, с сохранением всех имён, названий функций и так далее. На весь этот кусок кода накладывается структура - с достаточно детальным описанием, прежде всего для себя (запутаться проще простого). И только после этого компилятор поймёт - чего от него хотят.
Код который будет модифицировать этот кусок асмы - будет автоматически подстраиваться под имеющиеся логический цикл. Это означает что компилятор не воткнёт команды предварительного чтения на модифицированный код, корректно сделает переход, и корректно обработает замену кода и данных на которые он будет ссылаться.
Есно остальной код без модификаций - если он уже вызывал некоторые функции из этого блока - то потеряет адреса. Не просто так - а сработают заглушки по внешнему флагу.

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







Цитата(Николай Семёнович @ Jun 29 2018, 09:22) *
Компилятор вообще по барабану: он не знает, что за программу (какого назначения) он компилит.

Естественно.
Но если нужно модифицировать код - то требования повышаются. Компилятору нужно будет объяснить - где и чего менять, и как это скажется на его дальнейшей работе.


Цитата(jcxz @ Jun 29 2018, 10:20) *
Какая компиляция? Я же написал: код будет строить моя программа (на этом же Cortex-M). Т.е. - она сразу будет создавать функцию в машинных кодах (если так понятнее). Которая после будет вызываться.


Кхм, это наверное слишком глупо, но всё-же.
Флешка - это именно та флешка что вставляется в разъём компьютера?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 29 2018, 04:51
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AVI-crak @ Jun 29 2018, 07:36) *
Cortex, да и почти все arm чипы - используют внеочередное исполнение кода. Он может загружать адреса для двух функций одновременно. Просчитывать данные которые будут применяться где-то внутри функции до её реального вызова. Размазывать циклы на всю портянку. Обращать переменные в другое значение чем было назначено в пользовательской программе -без потери целостности алгоритма, и ещё много много чего. Это их главная фишка.

Тем не менее - количество чтений/записей из/в память которые нужно выполнить всё равно не уменьшится, менее чем требующееся по алгоритму, при любом оптимизаторе.
А перевод на самомодифицирующийся код сокращает это количество многократно.
Уж что-что, а ассемблер для Cortex-M я знаю неплохо. И пока не сделали такой оптимизатор, который напишет код лучше меня. rolleyes.gif

Цитата(AVI-crak @ Jun 29 2018, 07:47) *
Флешка - это именно та флешка что вставляется в разъём компьютера?

Вы о чём? wacko.gif
Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Jul 1 2018, 15:22
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 182
Регистрация: 16-10-15
Пользователь №: 88 894



Цитата(jcxz @ Jun 29 2018, 10:51) *
Вы о чём? wacko.gif

Простые вопросы на самом деле бывают со сложными ответами. Особенно когда мозаика не складывается в общий узор.
Я повторю свой вопрос - откуда мк читает программный код?
Есть ли дополнительный код или инструкции которые должен выполнять мк в нативе, или программный код на мк в режиме эмуляции?
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Jul 1 2018, 16:25
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата(AVI-crak @ Jul 1 2018, 18:22) *
Я повторю свой вопрос - откуда мк читает программный код?

При наличии PSRAM в чипе странно было бы генерить код не в него. Хотя, от задачи зависит тоже.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 2 2018, 16:12
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(VladislavS @ Jul 1 2018, 19:25) *
При наличии PSRAM в чипе странно было бы генерить код не в него. Хотя, от задачи зависит тоже.

Конечно генерю в PSRAM. При генерации в обычную SRAM время выполнения увеличивается примерно в 2 раза.
Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Jul 2 2018, 20:46
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 182
Регистрация: 16-10-15
Пользователь №: 88 894



Цитата(jcxz @ Jul 2 2018, 22:12) *
Конечно генерю в PSRAM. При генерации в обычную SRAM время выполнения увеличивается примерно в 2 раза.

Как и предполагалось, для ответа простые вопросы нужно хорошо подумать.
Повторюсь:
Откуда мк начинает выполнять программный код сразу после аппаратного сброса. Общая функция этого кода, и что происходит дальше по алгоритму.

Сообщение отредактировал AVI-crak - Jul 2 2018, 20:46
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- jcxz   Самомодифицирующийся код в экосистеме Cortex-M.   Jun 28 2018, 22:54
- - aaarrr   Цитата(jcxz @ Jun 29 2018, 01:54) И вот я...   Jun 28 2018, 23:01
- - AVI-crak   Цитата(jcxz @ Jun 29 2018, 04:54) Просто ...   Jun 28 2018, 23:23
|- - aaarrr   Цитата(AVI-crak @ Jun 29 2018, 02:23...   Jun 28 2018, 23:31
||- - AVI-crak   Не предполагает. Любая перетасовка программного ко...   Jun 29 2018, 00:11
|- - Николай Семёнович   Цитата(AVI-crak @ Jun 29 2018, 02:23...   Jun 29 2018, 03:22
|- - jcxz   Цитата(AVI-crak @ Jun 29 2018, 02:23...   Jun 29 2018, 04:20
||- - Arlleex   Цитата(AVI-crak @ Jul 3 2018, 00:46)...   Jul 3 2018, 04:44
||- - AVI-crak   Цитата(Arlleex @ Jul 3 2018, 10:44) А отк...   Jul 3 2018, 18:38
|- - aaarrr   Цитата(AVI-crak @ Jun 29 2018, 07:47...   Jun 29 2018, 07:24
- - halfdoom   Цитата(jcxz @ Jun 29 2018, 01:54) Есть мы...   Jun 29 2018, 03:29
- - AlexandrY   Цитата(jcxz @ Jun 29 2018, 01:54) PS: И п...   Jun 29 2018, 05:47
|- - jcxz   Цитата(AlexandrY @ Jun 29 2018, 08:47) Ил...   Jun 29 2018, 06:56
|- - AlexandrY   Цитата(jcxz @ Jun 29 2018, 09:56) Я уже в...   Jun 29 2018, 07:00
|- - jcxz   Цитата(AlexandrY @ Jun 29 2018, 10:00) То...   Jun 29 2018, 07:03
||- - AlexandrY   Цитата(jcxz @ Jun 29 2018, 10:03) Ну хоро...   Jun 29 2018, 07:05
|- - Николай Семёнович   Цитата(AlexandrY @ Jun 29 2018, 10:00) То...   Jun 29 2018, 16:00
|- - jcxz   Цитата(Николай Семёнович @ Jun 29 2018, 19...   Jun 29 2018, 17:11
|- - Arlleex   Цитата(jcxz @ Jun 29 2018, 20:11) Блин, к...   Jun 29 2018, 17:18
|- - jcxz   Цитата(Arlleex @ Jun 29 2018, 20:18) О ре...   Jun 29 2018, 17:23
|- - Arlleex   Цитата(jcxz @ Jun 29 2018, 20:23) Всего в...   Jun 29 2018, 17:36
|- - adnega   RE: Самомодифицирующийся код в экосистеме Cortex-M.   Jun 29 2018, 21:21
|- - jcxz   Цитата(adnega @ Jun 30 2018, 00:21) Прове...   Jun 30 2018, 00:22
|- - adnega   Цитата(jcxz @ Jun 30 2018, 03:22) мммм......   Jun 30 2018, 06:41
|- - jcxz   Цитата(adnega @ Jun 30 2018, 09:41) А что...   Jun 30 2018, 07:21
|- - adnega   Цитата(jcxz @ Jun 30 2018, 10:21) Да я уж...   Jun 30 2018, 08:59
|- - AlexandrY   Цитата(adnega @ Jun 30 2018, 11:59) Кста,...   Jun 30 2018, 10:09
|- - jcxz   Цитата(adnega @ Jun 30 2018, 11:59) Покаж...   Jun 30 2018, 11:56
|- - adnega   Цитата(jcxz @ Jun 30 2018, 14:56) Да, как...   Jun 30 2018, 12:12
||- - jcxz   Цитата(adnega @ Jun 30 2018, 15:12) Может...   Jun 30 2018, 13:30
||- - AlexandrY   Цитата(jcxz @ Jun 30 2018, 16:30) Ну-ну. ...   Jun 30 2018, 13:39
||- - jcxz   Цитата(AlexandrY @ Jun 30 2018, 16:39) И ...   Jun 30 2018, 13:56
||- - AlexandrY   Цитата(jcxz @ Jun 30 2018, 16:56) В то вр...   Jun 30 2018, 14:43
||- - jcxz   Цитата(AlexandrY @ Jun 30 2018, 17:43) Та...   Jun 30 2018, 19:41
||- - AlexandrY   Цитата(jcxz @ Jun 30 2018, 22:41) Ваш пос...   Jul 1 2018, 07:22
|- - AlexandrY   Цитата(jcxz @ Jun 30 2018, 14:56) Да прич...   Jun 30 2018, 13:17
- - Serge V Iz   Использовал хранимые в ОЗУ участки кода, которые з...   Jun 29 2018, 07:35
|- - jcxz   Цитата(Serge V Iz @ Jun 29 2018, 10:35) И...   Jun 29 2018, 08:43
- - AVR   Цитата(jcxz @ Jun 29 2018, 01:54) Есть мы...   Jun 29 2018, 07:43
|- - a123-flex   Цитата(AVR @ Jun 29 2018, 10:43) Оптимиза...   Jun 29 2018, 15:05
- - RadiatoR   Вопрос к ТС - а каков предполагаемый размер генери...   Jun 29 2018, 07:54
|- - _4afc_   Мой опыт показывает что оптимизация по скорости са...   Jun 29 2018, 08:23
|- - jcxz   Цитата(RadiatoR @ Jun 29 2018, 10:54) Во...   Jun 29 2018, 09:08
|- - _4afc_   Цитата(jcxz @ Jun 29 2018, 13:08) А тепер...   Jun 29 2018, 09:53
- - VladislavS   _4afc_, не стоит быть столь категоричным. Если гов...   Jun 29 2018, 08:38
- - Kabdim   Имхо сейчас время такое что проще взять более мощн...   Jun 29 2018, 08:44
- - Arlleex   Интересная тема для меня, тема СМК. Ни разу не при...   Jun 29 2018, 13:08
|- - RadiatoR   Цитата(Arlleex @ Jun 29 2018, 16:08) 2. Н...   Jun 29 2018, 13:23
|- - adnega   Цитата(Arlleex @ Jun 29 2018, 16:08) 1. П...   Jun 29 2018, 16:03
||- - Arlleex   Цитата(RadiatoR @ Jun 29 2018, 16:23) Та...   Jun 29 2018, 16:18
||- - adnega   Цитата(Arlleex @ Jun 29 2018, 19:18) Наде...   Jun 29 2018, 16:35
||- - Arlleex   Цитата(adnega @ Jun 29 2018, 19:35) Услов...   Jun 29 2018, 16:56
|- - jcxz   Цитата(Arlleex @ Jun 29 2018, 16:08) Прив...   Jun 29 2018, 16:56
||- - AlexandrY   Цитата(jcxz @ Jun 29 2018, 19:56) ... if ...   Jun 29 2018, 17:44
|- - kolobok0   Цитата(Arlleex @ Jun 29 2018, 16:08) Инте...   Jun 29 2018, 17:46
- - a123-flex   Цитата(jcxz @ Jun 29 2018, 01:54) Есть мы...   Jun 29 2018, 13:27
|- - twix   Цитата(a123-flex @ Jun 29 2018, 14:2...   Jun 29 2018, 14:35
- - Serge V Iz   Кстати, а какие есть основания предполагать, что р...   Jun 29 2018, 16:11
- - Arlleex   Цитата(AlexandrY @ Jun 29 2018, 20:44) А ...   Jun 29 2018, 18:19
- - AVI-crak   Цитата(jcxz @ Jun 29 2018, 04:54) Есть мы...   Jun 30 2018, 11:24
- - Arlleex   jcxz, а зачем тут это? Вы сначала загружаете адрес...   Jun 30 2018, 15:09
|- - jcxz   Цитата(Arlleex @ Jun 30 2018, 18:09) А вы...   Jun 30 2018, 19:31
|- - VladislavS   Цитата(jcxz @ Jun 30 2018, 22:31) Здесь н...   Jun 30 2018, 19:35
|- - Arlleex   Цитата(jcxz @ Jun 30 2018, 23:31) Поэтому...   Jun 30 2018, 19:45
|- - jcxz   Цитата(Arlleex @ Jun 30 2018, 22:45) По т...   Jun 30 2018, 19:54
- - VladislavS   Недавно в другой теме проскакивал вот такой код. П...   Jun 30 2018, 18:33
- - Arlleex   Кстати, решил почитать внимательнее 3.3.2. Load/st...   Jul 1 2018, 10:03
- - jcxz   Цитата(Arlleex @ Jul 1 2018, 13:03) Что э...   Jul 1 2018, 12:00


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 18:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01522 секунд с 7
ELECTRONIX ©2004-2016