La programmazione di codice automodificante (in inglese self-modifying code) è una particolare tecnica di programmazione volta a realizzare programmi in grado di modificare il proprio codice durante l'esecuzione.

Per la complessità dell'analisi relativa a tali algoritmi, è una tecnica sconsigliata per quasi tutte le applicazioni:[1] allo stato attuale solo i virus, i programmi di intelligenza artificiale ed alcuni algoritmi di protezione del software fanno uso di codice automodificante.[2] I virus lo fanno per cercare di sfuggire all'analisi dei programmi antivirus, mentre in intelligenza artificiale serve per simulare (o per alcuni imitare) l'apprendimento. Infine gli algoritmi di protezione del software usano il codice automodificante per rendere difficoltosa la realizzazione di "crack" in grado di eliminare la protezione sul software stesso.[3]

Normalmente il codice automodificante viene scritto nel linguaggio nativo del processore su cui deve girare (assembly), tuttavia è possibile, con opportuni accorgimenti,[4] scrivere codice automodificante con linguaggio di alto livello.

In origine i programmi automodificanti erano realizzati per ottenere il massimo delle prestazioni dalle macchine,[5] ma con i moderni microprocessori ciò non è più vero, anzi spesso ottengono il risultato opposto: un moderno processore può venire rallentato dal codice automodificante.[6]

Attualmente l'utilizzo della tecnica del codice automodificante viene sconsigliata da tutti i produttori di microprocessori[senza fonte] poiché rende notevolmente più complessa la realizzazione degli stessi microprocessori. I microprocessori moderni suddividono le istruzioni e i dati in due aree separate di memoria. Il codice automodificante non è dotato di questa netta suddivisione dato che utilizza i dati per adattare il proprio codice e questo rende la sua gestione in un processore moderno molto difficile. Intel e AMD attualmente supportano l'esecuzione di codice automodificante sui loro prodotti della linea x86. Questo supporto è mantenuto per questioni di compatibilità con le precedenti applicazioni.

Note

modifica
  1. ^ Tecniche per il codice automodificante, su quequero.org. URL consultato il 27 ottobre 2007 (archiviato dall'url originale il 27 ottobre 2007).
  2. ^ Assembly Programming Journal - Tecniche (con esempi) per la gestione di codice automodificante
  3. ^ (EN) Advanced Self-Modifying Code Archiviato il 1º novembre 2007 in Internet Archive. - Polimorfismo e Metamorfismo del codice
  4. ^ Codice Java che si automodifica[collegamento interrotto]
  5. ^ Low Level Speed Optimization Archiviato il 27 ottobre 2007 in Internet Archive. - Come risparmiare nanosecondi ottimizzando a livello macchina
  6. ^ CPU cache - Il funzionamento della cache nelle odierne CPU

Voci correlate

modifica
  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica

📚 Artikel Terkait di Wikipedia

Cartoon Network Studios

www.cartoonnetwork.wikia.com/wiki/Cartoon_Network_CEE: Paragrafo Old Programming per gli anni di trasmissione per la versione polacca. ^ www.imdb.com/title/tt1867195/

Zilog Z80

dal miscuglio dei primi computer 8080 e Z80.» ^ Commodore 128 assembly programming - Z80 CPU, su commodore64.se. URL consultato l'11 novembre 2010 (archiviato

Memoria NAND flash

queste figurano le sigle SLC (Single-Level Cell, 1 bit/cella), MLC (Multi-Level Cell, 2 bit/cella) e TLC (Triple-Level Cell, 3 bit/cella). Recentemente sono

Critical Role

'Alpha' Subscription VOD Launch Plans, With Nerdist and Geek & Sundry Programming Slate, su Variety, 28 settembre 2016. URL consultato il 22 febbraio 2020

OpenBSD

Stallman in seno al Progetto GNU, tuttavia il 3 settembre 2016 sia LLVM (Low Level Virtual Machine) sia clang sono stati caricati nel cvs di OpenBSD, precisamente

Windows 10

ottobre 2014. ^ Ryan Smith, Microsoft Announces DirectX 12: Low Level Graphics Programming Comes To DirectX, su AnandTech, Purch Inc., 24 marzo 2014. URL

Nuove funzioni di Windows 10

ottobre 2014. ^ Ryan Smith, Microsoft Announces DirectX 12: Low Level Graphics Programming Comes To DirectX, su AnandTech, Purch Inc., 24 marzo 2014. URL

Memoria cache

Technology - AMD64 Architecture Programmer's Manual Volume 2: System Programming - http://developer.amd.com/wordpress/media/2012/10/24593_APM_v21.pdf