Кіріспе

Компьютерлік ғылымда өзін-өзі өзгерту коды (SMC немесе SMoC) – өзінің нұсқауларын орындалып жатқанда өзгертетін код. Бұл әдетте нұсқаулар орындалу жолының ұзындығын қысқарту және өнімділікті арттыру үшін, немесе әйтпесе қайталанатын ұқсас кодты азайту арқылы техникалық қызмет көрсетуді жеңілдету үшін қолданылады. Бұл термин әдетте өзін-өзі өзгерту қасақана жасалған кодқа ғана қолданылады, кодтың буфер асып кету сияқты қатеге байланысты кездейсоқ түрде өзгеруіне емес. Өзін-өзі өзгерту коды қолданыстағы нұсқауларды жаңа нұсқаулармен жабуды немесе орындалу кезінде жаңа кодты жасауды және басқаруды осы кодқа беруді қамтиды. Өзін-өзі өзгерту, шартты бағдарлама тармақталуына және "жалаушаны орнату" әдісіне балама ретінде қолданылуы мүмкін, бұл негізінен шартты тексеру қажеттілігін азайту үшін пайдаланылады. Бұл әдіс жиі, әрбір кіріс/шығыс циклі үшін қосымша есептеу шығындарын қажет етпей, сынақ/түзету кодтарын шартты түрде шақыру үшін қолданылады. Өзгерістер: тек бастапқы параметрлерге негізделген инициализация кезінде ғана жасалуы мүмкін (егер процесс бағдарламалық құрал ретінде сипатталса және аппараттық тұрғыдан баспалы схема тақталары үшін селекторларды орнатуға ұқсас болса). Бағдарламаға кіру нүктелерін өзгерту – өзін-өзі өзгертудің баламалы, жанама әдісі, бірақ бағдарламаның көлемін ұлғайтатын бір немесе бірнеше баламалы нұсқау жолдарының болуын қажет етеді. орындалу кезінде ("ұшқында") – орындалу барысында қол жеткен нақты бағдарламалық күйлерге негізделген. Екі жағдайда да өзгерістер машиналық кодтың нұсқауларына тікелей жасалуы мүмкін, жаңа нұсқауларды қолда бар нұсқаулардың үстіне жабу арқылы (мысалы: салыстыру және тармақталуды шартсыз тармақталуға немесе "NOP" нұсқаулығына өзгерту). IBM System/360 архитектурасында және z/Architecture-ға дейінгі оның ізбасарларында EXECUTE (EX) нұсқаулығы логикалық түрде мақсатты нұсқаудың екінші байтын 1-тіркеменің кіші 8 битімен жабады. Бұл өзін-өзі өзгерту эффектін береді, бірақ сақтаудағы нақты нұсқаулар өзгермейді.

Ассамблея тілі

Ассемблер тілінде өздігінен өзгеретін кодты іске асыру өте қарапайым. Нұсқаулар жадта динамикалық түрде жасалуы мүмкін (немесе қорғалмаған бағдарламалық жадтағы қолданыстағы кодтың үстіне жабыстырылуы мүмкін). DR DOS ядросы жүктелу кезінде, негізгі процессор буынына байланысты, өзінің өте маңызды жылдамдыққа сезімтал бөлімдерін оңтайландырады.