Показать сообщение отдельно
Старый 22.02.2022, 19:05   #44
Paul Kellerman
Gold Member
 
Регистрация: 25.06.2005
Адрес: F000:FFF0
Сообщений: 1,804
По умолчанию

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

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

Последний раз редактировалось Paul Kellerman; 22.02.2022 в 20:06.
Paul Kellerman вне форума   Ответить с цитированием
Реклама