Selbstmodifizierender Code
Programme, die während der Ausführung ihre eigenen Befehle umschreiben — auf den ersten Rechnern mit gespeichertem Programm keine Spielerei, sondern Notwendigkeit.
Dass Befehle und Daten sich denselben Speicher teilen, bedeutet, dass ein Programm seine eigenen Befehle als Daten behandeln und zur Laufzeit verändern kann. Auf dem Manchester Baby und der EDSAC um 1948 gab es noch keine Indexregister, weshalb ein Programm zum Durchlaufen eines Arrays schlicht das Adressfeld seiner eigenen Befehle Schritt für Schritt umschrieb. Das war Alltag, kein Trick.
Tom Kilburns Indexregister auf der Manchester Mark 1 (1949) machte die Technik überflüssig: Eine Adresse ließ sich nun in einem Hilfsregister hochzählen, ohne den Code anzufassen. Selbstmodifizierender Code wurde fortan etwas, das man lieber vermied — schwer zu lesen, unmöglich in Nur-Lese-Speicher zu legen, ein Albtraum beim Debuggen. Trotzdem lebt er dort weiter, wo er sich lohnt: JIT-Compiler erzeugen Maschinencode zur Laufzeit, und Schadsoftware mutiert sich selbst, um der Erkennung zu entgehen.