[c++]Programmcode zur Laufzeit Ändern



  • Hi Leute!
    Hat jemand schon mal versucht den Programmcode des eigenen Programms zur Laufzeit zu ändern?

    Eigentlich müsste man dazu, die Adresse des eigenen Programms im RAM ermitteln und anschließend den Opcode an der gewünschten stelle abändern.
    Oder allgemeiner : Um eine Funktion zur Laufzeit zu erstellen müsste man lediglich den Speicher allozieren und könnte dort eine Funktion in Opcode schreiben, richtig?

    Um die Funktion anschließend aufzurufen müsste man den Zeiger auf den Speicher in eine Funktion casten. Müsste man etwas bei der Parameterübergabe und Rückgabe beachten?

    Wie Rufe ich in Assembler eine Funktion bzw. Methode auf, die ich in meinem C++ Programm definiert habe? - was ist da zu beachten? - was ist wenn die Funktion virtuell ist?

    Gibt es vielleicht in irgendeiner form unterscheide zwischen Linux und Windows?

    Kennt jemand nen Link zu einer guten und übersichtlichem Nachschlagewerk zu Opcodes/ASM für die gängigen Prozessoren?



  • Speed schrieb:

    Müsste man etwas bei der Parameterübergabe und Rückgabe beachten?

    http://en.wikipedia.org/wiki/Calling_convention

    http://ref.x86asm.net/coder32-abc.html

    Dass das natürlich nicht vom Standard abgedeckt wird und man solche Spielereien nur zum lernen nutzen sollte, ist hoffentlich klar 🙂



  • Danke für die schnelle Antwort.
    Es ist ein Idee die ich im Moment nicht aus dem Kopf kriege, seit mein Info-Prof gesagt hat, dass sich selbst ändernde Programme zu schreiben eine effiziente Methode war, die er selbst einsetze um große Programme in kleine RAMs zu stopfen(Overlays).
    Jetzt möchte ich an einem kleinen Proof-of-Concept basteln um meinen Entwicklergeist(und den von einigen anderen) zu befriediegen.

    Klar das das nicht vom Standard abgedeckt wird, meine sogar das dies, Nichtmal etwas mit dem Programierstandard zu tun hat... Man kloppt da bloß Opcode in den RAM und hofft, das der Prozessor das tut, was man glaubt ihm gesagt zu haben ;P
    Aber gut das die Prozessoren scheinbar sehr ähnlichen Befehlssatz haben...



  • Wenn du das zum lernen/spielen machen willst, benutz doch Lisp


Anmelden zum Antworten