I programmi autolocanti sono programmi per computer in grado di spostare il proprio codice e i propri dati da un indirizzo di memoria a un altro. Ciò consente loro di essere eseguiti in posizioni diverse della memoria e persino in spazi di memoria diversi. Ciò li rende particolarmente utili in situazioni in cui la memoria è limitata o quando il programma deve essere in grado di funzionare su versioni diverse di un sistema operativo.
I programmi autolocanti presentano diversi vantaggi rispetto ai programmi tradizionali, tra cui la capacità di ricollocarsi in spazi di memoria diversi, la capacità di funzionare su versioni diverse di un sistema operativo e la capacità di funzionare su hardware con dimensioni di memoria diverse. Ciò li rende particolarmente utili per le applicazioni che devono essere in grado di funzionare in ambienti diversi.
Il principale svantaggio dei programmi autoreferenziati è che sono più difficili da sviluppare e mantenere rispetto ai programmi tradizionali. Questo perché il codice e i dati devono essere scritti in modo da essere in grado di ricollocarsi. Inoltre, la dimensione del programma aumenta man mano che si sposta in spazi di memoria diversi, il che può portare a problemi di memoria e di prestazioni.
I programmi autolocalizzati utilizzano una tecnica chiamata "codice automodificante" per spostare le proprie istruzioni e i propri dati da un indirizzo di memoria a un altro. Questa tecnica serve a garantire che le istruzioni e i dati del programma si trovino sempre nell'indirizzo di memoria corretto. Ciò rende possibile l'esecuzione del programma in posizioni diverse e su versioni diverse di un sistema operativo.
I programmi autolocanti sono utili in una serie di applicazioni, tra cui i sistemi embedded, i giochi per computer e i kernel dei sistemi operativi. Sono anche utilizzati negli schemi di protezione del software, dove possono essere impiegati per impedire l'esecuzione di codice dannoso.
I programmi autolocanti sono limitati perché possono essere utilizzati solo in situazioni in cui la dimensione della memoria e il sistema operativo sono noti in anticipo. Inoltre, il codice e i dati devono essere scritti in modo da essere in grado di ricollocarsi da soli, cosa che può essere difficile da fare.
I programmi che si autolocalizzano possono essere usati per aggirare le misure di sicurezza, come la randomizzazione del layout dello spazio degli indirizzi, usata per impedire l'esecuzione di codice dannoso. Per questo motivo, è importante assicurarsi che i programmi di autolocalizzazione siano usati in modo responsabile.
Il debug dei programmi a rilocazione automatica può essere difficile a causa del fatto che il codice e i dati vengono spostati continuamente. Pertanto, è importante disporre di uno strumento di debug in grado di tenere traccia delle posizioni di memoria del programma.
I programmi autolocalizzati sono una tecnologia importante che probabilmente diventerà ancora più importante in futuro. Poiché l'hardware e il software diventano sempre più complessi, la capacità di spostare codice e dati da una posizione all'altra sarà essenziale per creare sistemi efficienti e affidabili.