Selbstmodifizierender Code

Abschnitt eines Computerprogramms, das zur Lösung der Programmaufgabe Teile des eigenen Programmcodes während der Ausführung gezielt verändert
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 3. April 2006 um 17:24 Uhr durch PANAMATIK (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Mit der Bezeichung Selbstmodifizierender Code wird ein Abschnitt eines Computerprogramms bezeichnet, der zur Lösung der Programmaufgabe während der Ausführung Teile des eigenen Programmcodes gezielt verändert.

Das Programm muß dabei in der Lage sein im Maschinencode bestimmte Befehle durch sinnvolle andere Maschinenbefehle zu ersetzen. Da eine Programmiertechnik, die selbstmodifizierenden Code benutzt, gravierende Nachteile hat, wird sie in der Praxis kaum angewendet und wird sogar abgelehnt. Außerdem läßt sich jede Aufgabenstellung auch ohne selbstmodifizierenden Code, mit Hilfe von bedingten Verzweigungen programmieren.

Die Veränderung des Programmcodes ist nur im Computern mit einer Von-Neumann-Architektur möglich, wo Programm und Daten den selben Adressraum teilen. In der Harvard-Architektur ist das Modifizieren von Programmcode während der Laufzeit nicht vorgesehen. Da das Programm keinen Compiler enthält, muß die Modifikation direkt in Maschinensprache ausgeführt werden. Aus diesen Gründen ist eine Portierung von selbstmodifizierendem Code auf einen beliebigen Prozessor fast nicht möglich.

Der selbstmodifizierende Code eines Programms hat nichts mit Lernen oder der Verbesserung eines Programmes zu tun. Selbstmodifizierende Programme, die die Hochsprache des Programms modifizieren, sind in der Zukunft möglicherweise hilfreich, die Maschinenintelligenz zu steigern.

Beispiel

In einem Videotennis Spiel kann im Programmteil, das den Ball steuert, ein Inkrement Befehl durch einen Dekrement Befehl ersetzt werden, wenn er an die Wand prallt, dadurch wird die Bewegungsrichtung umgekehrt.

Vorteile

  1. Bei bestimmten Aufgabenstellungen kann ein sehr kompaktes Programm konstruiert werden.
  2. Die gefundene Programmlösung kann elegant erscheinen.

Nachteile

  1. Die Erstellung von selbstmodifizierendem Code wird von Compilern nicht unterstützt.
  2. Der Programmcode ist schwierig oder gar nicht portierbar.
  3. Der Maschinencode ist schwierig nachzuvollziehen.
  4. Das Program kann vor Reengeneering besser geschützt werden.