das ist so nicht richtig Moppi, du hast einen Programmcounter, welcher dem Prozessor sagt wo die nächste Instruktion steht, die Instruktionen entscheiden dann darüber wohin der Programmcounter wandert und was sonst noch so im Prozessor passiert.
Die Instruktionen stehen bei einem µC meistens in einem Flashspeicher oder im RAM, bei einem PC ausschließlich im "Speicher" (gesamtheit aus Cache, RAM und was da sonst noch an Magie drin steckt für mehr Speed)
Du kannst also nur dann ein Programm sich selbst modifizieren lassen, wenn du ihm beibringst wie es den Speicher modifiziert.
Jetzt kommen wir mal aus Maschinencode zurück zur Programmiersprache, in einer Programmiersprache hast du Regeln für Syntax und Grammatik die ein Compiler (nicht NUR Compiler, auch Linker etc., eh hier einer Spitzfindig wird) dann zu Maschinencode macht.
Wenn ich also "Code" selbst umschreiben lassen möchte, muss es in den Regeln der Sprache und der enthaltenen Unterprogramme eine entsprechend Entwickelte Routine geben die es dir erlaubt Zugriff auf den Speicher mit dem gespeicherten Maschinencode zu nehmen und diesen zu ändern.
C++ ist eine Sprache die üblicherweise von einem Compiler zu Maschinencode übersetzt wird, während bei Java z.B. vorher Bytecode generiert wird der dann wie JavaScript interpretiert wird.
Ich kann den Bytecode im RAM verändern und damit sein Verhalten nachdem er neu interpretiert worden ist, genau so wie cih den JS im Speicher ändern kann bevor daraus vom Interpreter der veränderte Maschinencode gemacht wird.
Du vermischst hier Hochsprachen und Maschinencode.
Das was du möchstest erreichst du nur wenn du ein sich selbst modifizierendes Programm IN einer Programmierrsprache deiner Wahl schreibst.
Es ist von der Srpache und der bereitgestellten Librarys/Unterprogrammen abhängig in wie weit du das im Rahmen der Programmiersprache selbst schon erschlagen kannst, aber C++ kann jedenfalls nicht seine Klassen zur Laufzeit umschreiben.
Gönn dir mal ein Buch zu Rechnerarchitektur und Compilern
Lesezeichen