Maschinencode zur Laufzeit generieren u. ausführen

Hallo Leute,

Ich habe da ein kleines C+±Programm, welches aufgrund div. Eingangsparameter zur Laufzeit eine Funktion a la

mov ax,7
mov bx,5
add ax,bx

generiert (i.d.R. sind die Funktionen viel komplexer). Da diese Funktionen einige tausend Male aufgerufen wird, möchte ich statt des jetzt angewandten Interpreters die Funktion im x86-Maschinencode in den Speicher schreiben und von dort aus dann aufrufen. Leider wurde ich bei meiner Internetrecherche nicht sehr schlau. Hat jemand eine Ahnung, wie man das hinbekommt?

Danke im voraus,
Pürsti

P.S.: Falls es von Bedeutung ist: Im konkreten Fall ist das OS Win 2k.

hi,
du musst rausfinden, wie die entsprechenden Befehle kodiert werden, dann entsprechend viel Speicher allokieren(möglichst mit execute+) und dann an die entsprechende Stelle springen.

lg
georg

Hallo Georg,

Danke für Deine schnelle Antwort!

du musst rausfinden, wie die entsprechenden Befehle kodiert
werden, dann entsprechend viel Speicher allokieren(möglichst
mit execute+)

Was meinst Du mit „execute+“?

und dann an die entsprechende Stelle springen.

Lässt sich Code an jeder Speicherstelle ausführen?

Nochmals Danke!
Pürsti

mit execute+(Ok, nicht sehr verständlich) meine ich, dass die Page es erlaubt Code auszuführen. Ob das bei Pages, die mit malloc allokiert wurden, der Fall ist kann ich nicht beantworten.
Da du aber Windows verwendest kannst du dir ja Speicher mit z.B.:VirtualAlloc allokieren, da kannst du angeben, dass die Page ausführbar sein soll.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

kleiner Nachtrag:
Unter http://msdn.microsoft.com/library/default.asp?url=/l…
findest Hilfe zu VitualAlloc, dort hab ich auch grad folgendes gefunden:
To execute dynamically generated code, use VirtualAlloc to allocate memory and the VirtualProtect function to grant PAGE_EXECUTE access.

lg
georg

1 Like

kleiner Nachtrag:
Unter
http://msdn.microsoft.com/library/default.asp?url=/l…
findest Hilfe zu VitualAlloc,

Danke, dass hilft mir schon viel weiter!

Einen schönen Abend,
Pürsti