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

 
 
> Самомодифицирующийся код в экосистеме 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
Ответов
AlexandrY
сообщение Jun 29 2018, 05:47
Сообщение #2


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(jcxz @ Jun 29 2018, 01:54) *
PS: И пожалуйста - без религиозной нетерпимости.

Обещать не могу. biggrin.gif

А загрузчики считаются самомодифицирующимся кодом?
Или самомодифицирующийся - это код который вот именно сам себя модифицирует, т.е. инструкция STR вот прямо по своему адресу что-то и пишет и сама себя таким образом затирает.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 29 2018, 06:56
Сообщение #3


Гуру
******

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



Цитата(AlexandrY @ Jun 29 2018, 08:47) *
Или самомодифицирующийся - это код который вот именно сам себя модифицирует, т.е. инструкция STR вот прямо по своему адресу что-то и пишет и сама себя таким образом затирает.

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

PS: Вот уже сколько откликов получил, а на собственно единственный вопрос, поставленный в первом сообщении, так никто и не ответил. И видимо забыли все в чём был вопрос..... sad.gif
Вопрос был собственно в том: использовал кто-нить из здесь присутствующих самомодифицирующийся код (именно такой код, который или сам своё тело правит или строит другой код (а не просто копирует из одного места в другое))? Именно на платформе ARM в embedded?
И, если использовали, то для какой задачи?
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jun 29 2018, 07:00
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(jcxz @ Jun 29 2018, 09:56) *
Я уже выше написал: будет функция, которая по некоторым условиям пишет другую функцию. По командам. В маш.кодах. Команды записываемые в тело создаваемой функции (и их последовательность) зависят от аргументов первой функции.

Тогда я не согласен с названием "самомодифицирующийся", у меня загрузчики тоже загружают разные не то что функции, а целые программы(и да в машинных кодах, разумеется) в зависимости от аргументов.
Go to the top of the page
 
+Quote Post
Николай Семёнови...
сообщение Jun 29 2018, 16:00
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 297
Регистрация: 20-05-17
Пользователь №: 97 202



Цитата(AlexandrY @ Jun 29 2018, 10:00) *
Тогда я не согласен с названием "самомодифицирующийся", у меня загрузчики тоже загружают разные не то что функции, а целые программы(и да в машинных кодах, разумеется) в зависимости от аргументов.

Попытаюсь объяснить (как я это понял), что подразумевать под "самомодифицирующимся кодом" топикстартер.

Не.

Не буду. Боюсь всё равно не поймёте
А разжигать холивар не хочу

Впрочем, скажу кое-что.
Ваш загрузчик просто подгружает целые законченные куски кода, а у топикстартера программа меняет отдельные команды своего собственного кода
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 29 2018, 17:11
Сообщение #6


Гуру
******

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



Цитата(Николай Семёнович @ Jun 29 2018, 19:00) *
Ваш загрузчик просто подгружает целые законченные куски кода, а у топикстартера программа меняет отдельные команды своего собственного кода

Вот именно. Даже полностью строит процедуру. Вот такой примерно должен быть результат (код) работы генератора:
CODE
;Назначение регистров в динамически генерируемой функции.
dstReg EQU c_R0 ;указатель на целевой буфер для записи (вх.аргумент)
tblReg EQU c_R1 ;указатель на таблицу адресов переменных (вх.аргумент)
tmpReg0 EQU c_R2 ;рабочий регистр 0
tmpReg1 EQU c_R3 ;рабочий регистр 1
;сама функция
;f0 LDR tmpReg0, [tblReg, #bit1*4]; где bit1 - номер первого единичного бита в мл.слове бит-карты
;f0 LDR tmpReg1, [tblReg, #bit2*4]; где bit2 - номер второго единичного бита в мл.слове бит-карты
;f1 LDR/LDRH tmpReg0, [tmpReg0]
;f2 STR/STRH tmpReg0, [dstReg], #step; где step==4 для STR и step==2 для STRH
;f0 LDR tmpReg0, [tblReg, #bit3*4]; где bit3 - номер 3-го единичного бита в мл.слове бит-карты
;f1 LDR/LDRH tmpReg1, [tmpReg1]
;f2 STR/STRH tmpReg1, [dstReg], #step; где step==4 для STR и step==2 для STRH
;f0 LDR tmpReg1, [tblReg, #bit4*4]; где bit4 - номер 4-го единичного бита в мл.слове бит-карты
;f1 LDR/LDRH tmpReg0, [tmpReg0]
;f2 STR/STRH tmpReg0, [dstReg], #step; где step==4 для STR и step==2 для STRH
; ...
;f3 ADDS tblReg, tblReg, #32*4; вставляется при переходе к ст.слову бит-карты если в нём есть единицы
;f0 LDR tmpReg0, [tblReg, #bit1*4]; где bit1 - номер 1-го единичного бита в ст.слове бит-карты
;f1 LDR/LDRH tmpReg1, [tmpReg1]
;f2 STR/STRH tmpReg1, [dstReg], #step; где step==4 для STR и step==2 для STRH
;f0 LDR tmpReg1, [tblReg, #bit2*4]; где bit2 - номер 2-го единичного бита в ст.слове бит-карты
;f1 LDR/LDRH tmpReg0, [tmpReg0]
;f2 STR/STRH tmpReg0, [dstReg], #step; где step==4 для STR и step==2 для STRH
; ...
;f1 LDR/LDRH tmpReg1, [tmpReg1]
;f2 STR/STRH tmpReg1, [dstReg], #step; где step==4 для STR и step==2 для STRH
;f4 BX LR

LDR или LDRH использовать - определяется весом бита, заданным в таблице. Генератор формирует код глядя в эту таблицу.

Цитата(Arlleex @ Jun 29 2018, 19:18) *
Как видно, в любом случае нет больше в цикле инструкций проверки условий в if(...)-ах (а они же ведь по сути Bxx в ассемблерном представлении) (да и куда лучше вовсе не проверять заранее ложные условия по списку), а выполняются только нужные инструкции сразу, как будто условных конструкций и нет. А п. 1 и 2, конечно, требуют тактов, только для моего случая п. 1. требуется выполнить только 1 раз для всех итераций цикла, на этапе составления списка инструкций СМК.
Надеюсь, моя мысль будет так понятнее.

Блин, коллега, позвольте пожать Вашу руку! Вы - похоже почти единственный человек на этом форуме сходу понявший все нюансы!!! rolleyes.gif

Цитата(Arlleex @ Jun 29 2018, 19:56) *
Я просто телепат cool.gif

Как будто заглянули в мои исходники! cool.gif
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
- - aaarrr   Давайте сначала: Цитата(AVI-crak @ Jun ...   Jun 29 2018, 00:32
|- - AVI-crak   Цитата(aaarrr @ Jun 29 2018, 06:32) О как...   Jun 29 2018, 04:47
|- - jcxz   Цитата(AVI-crak @ Jun 29 2018, 07:36...   Jun 29 2018, 04:51
||- - AVI-crak   Цитата(jcxz @ Jun 29 2018, 10:51) Вы о чё...   Jul 1 2018, 15:22
||- - VladislavS   Цитата(AVI-crak @ Jul 1 2018, 18:22)...   Jul 1 2018, 16:25
||- - jcxz   Цитата(VladislavS @ Jul 1 2018, 19:25) Пр...   Jul 2 2018, 16:12
||- - AVI-crak   Цитата(jcxz @ Jul 2 2018, 22:12) Конечно ...   Jul 2 2018, 20:46
||- - 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
|- - jcxz   Цитата(AlexandrY @ Jun 29 2018, 10:00) То...   Jun 29 2018, 07:03
||- - AlexandrY   Цитата(jcxz @ Jun 29 2018, 10:03) Ну хоро...   Jun 29 2018, 07:05
|- - 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 Текстовая версия Сейчас: 22nd June 2025 - 06:31
Рейтинг@Mail.ru


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