Самомодифицирующийся код

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

По времени проведения модификации метод делится на:

  • Модификация при инициализации — проводится один раз перед запуском изменяемого кода
  • Модификация на лету (on-the-fly) — изменение состояния программы во время исполнения

В обоих случаях изменение проходит непосредственно в машинном коде, когда новые инструкции перезаписывают старые (напр. условный переход JZ, JNZ, JE, JNE и т.п. заменяются на безусловный переход JMP или NOP). В наборе инструкций IBM/360 и Z/Architecture имеется инструкция EXECUTE (EX), которая перезаписывает целевую инструкцию (записанную во втором байте команды EX) самыми младшими 8 битами регистра 1. На указанных архитектурах с её помощью реализуется стандартный, законный метод временного изменения инструкций.

Назначение

Основные применения самомодифицирующегося кода:

  • В критичных к безопасности местах для усложнения исследования кода (полиморфные вирусы, некоторые типы защиты от копирования, упаковщики и т. д.).
  • В критичных к скорости местах для ускорения работы. Так, например, во время исполнения можно уменьшить длину критического пути исполнения. Вместо установки и последующей многократной проверкой флагов с условными переходами можно всего лишь изменить адрес и тип перехода в машинном коде. Многие порты движка Doom устанавливали прямо в машинном коде ширину экрана, это ускоряло отрисовку столбца[1].
  • Иногда используется для включения/отключения во время исполнения некоторой функциональности для тестирования или отладки. Так, в ОС Linux и Solaris при использовании отладочных инструментов Kprobes и DTrace в некоторые места кода ядра или программ вставляются последовательности инструкций nop. При включении инструмента некоторые из этих последовательностей заменяются на безусловный переход на процедуру отладки. Использование СМК позволяет расставить значительное количество точек, в которых возможна отладка, слабо при этом влияя на скорость исполнения с отключенной отладкой.
  • В ядре Linux и, возможно, других ОС, используются для отключения частей ядра, не нужных в данном окружении. При загрузке Linux определяет, исполняется ли он на SMP или на однопроцессорной машине. Во втором случае часть примитивов синхронизации удаляется из кода ядра.
  • Чтобы машинный код можно было набрать в текстовом поле — см. EICAR. Функция выхода из программы (int 20) имеет вид CD 20 и текстом надёжно не набирается — для этого её поместили в тестовый «вирус» в зашифрованном виде и расшифровали на месте.

Применимость к процессорам с гарвардской архитектурой

В гарвардской архитектуре память для кода и память для данных разделены. Соответственно, в них сильно усложняется работа самомодифицирующегося кода. Хотя архитектура x86 определена как фон-неймановская (с единой памятью кода и данных), большинство современных процессоров имеет раздельные области кэша для кода и для данных. При этом кэш кода не поддерживает запись, и при изменении закэшированного участка памяти может потребоваться либо аппаратно проведенный частичный или полный сброс кэша кода (x86), либо явная инструкция процессору на сброс кэша кода (SPARC). Из-за этого только что измененный код может исполняться медленнее либо потребовать дополнительных команд для правильной работы. Также изменение кода сбрасывает конвейер процессора.[2]

Также, некоторые идеи гарвардской архитектуры реализуются в ОС (например, Data Execution Prevention в ОС Windows, W^X в OpenBSD) и в процессорах (для x86 — бит NX и подобные). В этих реализациях отдельные фрагменты памяти могут быть помечены как неисполняемые (то есть данные) или как исполняемые, но немодифицируемые (то есть код без права на изменение). Использование самомодифицирующегося кода в таких программных окружениях усложняется, так как его приходится располагать либо в незащищенной области памяти (иногда такой областью является стэк), либо явно отключать защиту для подлежащего изменению кода.

Использование

  • JIT (Just in time — компиляция)
  • Динамическая трансляция
  • Динамическая рекомпиляция — при которой двоичный транслятор следит за частотой исполнения региона, и, если регион выполняется часто, проводится рекомпиляция этого региона с изменением его кода во время исполнения. В наиболее совершенных двоичных трансляторах может иметься до 4-5 последовательных уровней оптимизации региона.

Интерпретируемые языки

Языки Perl, PHP и Python позволяют программе создавать новый код во время выполнения и выполнять его, используя функцию eval, но не позволяют самомодифицироваться существующему коду (interactive python shell):

>>> x = 1
>>> eval('x + 1')
2
>>> eval('x')
1

Иллюзия модификации (при том, что никакой машинный код в действительности не изменяется) достигается путём изменения указателя функции, как в этом JavaScript-примере:

var f = function (x) {return x + 1};
alert(f(0)); //1

f = new Function('x', 'return x + 2'); // assign a new definition to f
alert(f(0)); //2

См. также

Примечания

  1. См., например, исходный код Doom Legacy, функция ASM_PatchRowBytes.
  2. Касперски, абзац с "Процессоры семейства Pentium .."

Ссылки

Read other articles:

2012 2022 Élections législatives de 2017 dans la Somme 5 sièges de députés à l'Assemblée nationale 11 et 18 juin 2017 Type d’élection Élections législatives Campagne 22 mai au 10 juin12 juin au 16 juin Débat(s) 1re circonscription : le 6 juin sur Wéo TV en collaboration avec Le Courrier picard[1]le 7 juin sur France 3 Picardie[2] (1er tour) le 14 juin sur France 3 Picardie[3] (2e tour)2e circonscription : le 14 juin sur France 3 Picardie[3] (2...

 

 

Former U.S. House district in Virginia Virginia's 22nd congressional districtObsolete districtCreated1800Eliminated1830Years active1793–1833 Virginia's 22nd congressional district is an obsolete congressional district. It was eliminated in 1833 after the 1830 U.S. census. Its last congressman was Joseph Draper. List of members representing the district Representative Party Term Congress Electoral history District established March 4, 1803 John Clopton(Tunstall) Democratic-Republican March 4...

 

 

Religion before written records The Venus of Laussel, a stone relief of a seated woman Part of a series onHistory of religions Founding figures Jesus (Christianity) Muhammad (Islam) Abraham (Judaism) Siddhartha Gautama (Buddhism) Guru Nanak (Sikhism) Mahavira (Jainism) Zoroaster (Zoroastrianism) Hamza ibn Ali (Druzism) Laozi (Taoism) Confucius (Confucianism) Baháʼu'lláh (Baháʼí Faith) Study of religion Anthropology Comparative religion Neurotheology God gene Origins Psychology Timeline ...

American sportswriter This article may rely excessively on sources too closely associated with the subject, potentially preventing the article from being verifiable and neutral. Please help improve it by replacing them with more appropriate citations to reliable, independent, third-party sources. (February 2018) (Learn how and when to remove this template message) For the Scrabble player, see Joel Sherman. Joel Sherman is a sportswriter for the New York Post. He is also a baseball insider wit...

 

 

TenLahirChittaphon Leechaiyapornkul (ชิตพล ลี้ชัยพรกุล)27 Februari 1996 (umur 28)Bangkok, ThailandPekerjaanPenyanyi Chittaphon Leechaiyapornkul (ชิตพล ลี้ชัยพรกุล) atau Lee Young Heum (이영흠) atau Li Yongqin (李永钦) (lahir 27 Februari 1996) adalah seorang penari dan penyanyi Thailand yang berada di bawah naungan SM Entertainment dengan nama panggung Ten (텐). Ia merupakan penari utama, vokalis utama dan rapper dari...

 

 

Vanilla SkyPoster rilis teatrikalSutradaraCameron CroweProduserCameron CroweTom CruisePaula WagnerSkenarioCameron CroweBerdasarkanOpen Your Eyesoleh Alejandro AmenábarMateo GilPemeranTom CruisePenélope CruzKurt RussellJason LeeNoah TaylorCameron DiazPenata musikNancy WilsonSinematograferJohn TollPenyuntingJoe HutshingMark LivolsiPerusahaanproduksiVinyl FilmsWingNut FilmsCruise/Wagner ProductionsDistributorParamount PicturesTanggal rilis 14 Desember 2001 (2001-12-14) Durasi137 men...

This article includes a list of general references, but it lacks sufficient corresponding inline citations. Please help to improve this article by introducing more precise citations. (December 2016) (Learn how and when to remove this message)The FrogsThe 11 founding members of the Frogs.Named afterAesops FablesPredecessorThe Colored Vaudeville Benevolent AssociationFormation1908Founded at52 West 153rd Street, New York, New YorkDissolved1920sTypeBenevolent AssociationPurposeTo create an all-Bl...

 

 

Baptist university in Bluefield, Virginia, US Not to be confused with Bluefield State University. Bluefield UniversityFormer namesBluefield College (1922–2021)MottoDeus, Patria, LuxMotto in EnglishGod, Country, LightTypePrivate universityEstablished1922Religious affiliationBaptist (Baptist General Association of Virginia)PresidentMichael Salmeier (Interim)Students912[1]Undergraduates894[1]Postgraduates16[1]LocationBluefield, Virginia, United StatesCampus82 acres...

 

 

Synagogue in Hong Kong This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Ohel Leah Synagogue – news · newspapers · books · scholar · JSTOR (October 2010) (Learn how and when to remove this message) Ohel Leah Synagogueבית הכנסת אהל לאהBeit Ha-Knesset Ohel Leah猶太教莉亞堂Exterior of the Ohel...

Wakil Bupati LamandauPetahanaRiko Porwanto, S.STP.sejak 24 September 2018Masa jabatan5 tahunDibentuk2003Pejabat pertamaDrs. H. Gusti Muhammad AfhaniSitus webportal.lamandaukab.go.id Berikut ini adalah daftar Wakil Bupati Lamandau dari masa ke masa. No Potret Wakil Bupati Mulai Jabatan Akhir Jabatan Prd. Ket. Bupati 1 Drs. H.Gusti Muhammad Afhani 2003 2007 1   Drs.Bustani Dj. Mamud Jabatan kosong 2007 2008   Drs. H.Gusti Muhammad Afhani(Pelaksana Tugas) 2 Drs. H.SugiyartoM.A.P. ...

 

 

この項目には、一部のコンピュータや閲覧ソフトで表示できない文字が含まれています(詳細)。 数字の大字(だいじ)は、漢数字の一種。通常用いる単純な字形の漢数字(小字)の代わりに同じ音の別の漢字を用いるものである。 概要 壱万円日本銀行券(「壱」が大字) 弐千円日本銀行券(「弐」が大字) 漢数字には「一」「二」「三」と続く小字と、「壱」「�...

 

 

  「俄亥俄」重定向至此。关于其他用法,请见「俄亥俄 (消歧义)」。 俄亥俄州 美國联邦州State of Ohio 州旗州徽綽號:七葉果之州地图中高亮部分为俄亥俄州坐标:38°27'N-41°58'N, 80°32'W-84°49'W国家 美國加入聯邦1803年3月1日,在1953年8月7日追溯頒定(第17个加入联邦)首府哥倫布(及最大城市)政府 • 州长(英语:List of Governors of {{{Name}}}]]) •&...

Memorial Park, in Hayward, California, is a public park managed by the Hayward Area Recreation and Park District. The park contains an indoor swim center, the Hayward Plunge, which opened in 1936.[1] The park is the access point to the Greenbelt Trails, which follow Ward Creek Canyon adjacent to California State University, East Bay. The park has a small bandstand with musical events offered on major holidays. It borders on Mount Saint Joseph Cemetery (also known as All Saints or Port...

 

 

If I leave a message for you: Please respond on your talk page. I'll probably add it to my watchlist, but if I miss something, feel free to leave a talkback. If you leave a message for me: I will most likely respond here. Either add this page to your watchlist or ask me to notify you of a response on your talk page. Note: I reserve the right to decline or withdraw from a situation that is escalating or uncomfortable, without giving a reason, or to take further action through permissable mean...

 

 

هذه المقالة تحتاج للمزيد من الوصلات للمقالات الأخرى للمساعدة في ترابط مقالات الموسوعة. فضلًا ساعد في تحسين هذه المقالة بإضافة وصلات إلى المقالات المتعلقة بها الموجودة في النص الحالي. (يناير 2024) مهرجان كان السينمائي 2024 البلد فرنسا  المكان كان  تعديل مصدري - تعديل   مه...

Ir.Ratna Machmud Bupati Musi Rawas ke-20PetahanaMulai menjabat 26 Februari 2021PresidenJoko WidodoGubernurHerman DeruWakilSuwartiPendahuluHendra Gunawan EC. Priskodesi (Plh.)PenggantiPetahana Informasi pribadiLahir8 Agustus 1964 (umur 59)Lubuklinggau, Sumatera SelatanKebangsaanIndonesiaPartai politikGolkarSuami/istriRiza Novianto GustamHubunganIbnu Amin (kakak)Anak1Orang tuaH. Machmud Amin (ayah)Hj. Ambiyah Mantab (ibu)Alma materInstitut Sains dan Teknologi NasionalPekerjaanDirek...

 

 

American singer Kat DeLunaDeLuna in 2011Background informationBirth nameKathleen Emperatriz DeLunaBorn (1987-11-26) November 26, 1987 (age 36)New York City, U.S.OriginNewark, New Jersey, U.S.Genres Pop R&B hip hop Latin dance dancehall Occupation(s) Singer songwriter dancer Years active2006–presentLabels Epic Republic eOne Island Universal Musical artist Kathleen Emperatriz DeLuna (born November 26, 1987)[1][2] is an American singer. DeLuna began pursuing a career a...

 

 

عدوى المستشفيات أماكن ملوثة في المستشفيات تؤدي إلى عدوى المستشفياتأماكن ملوثة في المستشفيات تؤدي إلى عدوى المستشفيات معلومات عامة الاختصاص أمراض معدية من أنواع عدوى،  وأثر ضائر  تعديل مصدري - تعديل   عدوى المستشفيات أو الخمج المشفوي (بالإنجليزية: Nosocomial Infection)‏ هي �...

هذه مقالة غير مراجعة. ينبغي أن يزال هذا القالب بعد أن يراجعها محرر؛ إذا لزم الأمر فيجب أن توسم المقالة بقوالب الصيانة المناسبة. يمكن أيضاً تقديم طلب لمراجعة المقالة في الصفحة المخصصة لذلك. (مارس 2019) هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وص�...

 

 

Disambiguazione – Se stai cercando altri significati, vedi Ventimiglia (disambigua). Ventimigliacomune Ventimiglia – VedutaLa città vecchia di Ventimiglia LocalizzazioneStato Italia Regione Liguria Provincia Imperia AmministrazioneSindacoFlavio Di Muro (Lega) dal 29-5-2023 TerritorioCoordinate43°47′25″N 7°36′30″E43°47′25″N, 7°36′30″E (Ventimiglia) Altitudine9 m s.l.m. Superficie53,73 km² Abitanti22 922[1] (28-2-2024...