Ausführbaren Programmcode dynamisch nachladen
-
Hallo, kann mir da einer Tipps
geben?
Gibt es eine Möglichkeit im Binärformat vorliegenden Programmcode nachzuladen, auszuführen und dann in den Ursprungscode zurückzuspringen.
Mein Gedanke ist in etwa so:
1. verschlüsseltes "ProgrammcodeSchnipsel" z.B. aus Resource laden
2. entschlüsseln und in Stream schreiben
3. Sprungadresse des entschlüsselten Codes ermitteln
4. Programmcode an Sprungadresse im Stream aufrufen (z.B. mit asm jmp XXX)
5. ProgrammSchnipsel ausführen
6. RücksprungDas ganze soll nicht im Rahmen einer DLL funktionieren deren Entry-Point ja bekannt ist.
In Assembler ließen sich solche Jumps wahrscheinlich programmieren. Aber läßt sich das auch in C++ mit dem Builder realisieren?Würde mich über Ideen freuen...
Danke
Werner
-
Hallo
Hat dann aber sicher nichts mit dem Builder speziell zu tun, sondern eher mit dem Betriebssystem.
bis bald
akari
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
.. danke für den hinweis
werner
-
Werner Kraus schrieb:
In Assembler ließen sich solche Jumps wahrscheinlich programmieren. Aber läßt sich das auch in C++ mit dem Builder realisieren?
Schau Dir doch mal Funktionszeiger an. Einen solchen könnte man mit reinterpret_cast<> mit der Sprungadresse versehen und dann aufrufen. Muß eben nur die Aufrufkonvention stimmen.
-
Wahrscheinlich sollte dein Code nach dem Laden auch noch korrekt reloziert werden (Anpassen aller Adressen im Code). Alternativ muss der Code an eine feste Adresse geladen werden und der Compiler der den Code erzeugt muss diese Adresse irgendwie kennen oder der Code darf nur relative Adressen beinhalten.
-
Wieso nicht gleich das ganze Programm verschlüsseln und durch einen Loader vorher entschlüsseln lassen. Wenn der Schlüssel falsch ist - Kein Programm. Ist das selbe in Grün, oder?
-
.... reinterpret_cast<> war genau der richtige Hinweis. Funzt prima...
Danke
Werner