![]() |
Dynamisch Code Erzeugen
Gibt es eine Möglichkeit in Windows eine Procedure dynamisch zu erzeugen.
Also ich lege die Binären Daten in den Speicher ab. Gebe diesen Speicher ausführrechte. Und springe zu guterletzt mit einem Call dorthin. Hintergrund: Das nicht alle denken hier sollen irgentwelcher Viren entworfen werden. Es geht darum eine Formel die durch den Nutzer angegebene wird, zu Compilieren und als Procedure im Programm abzulegen. Nur für NT-Systeme. |
Re: Dynamisch Code Erzeugen
Delphi-Quellcode:
Ich habe das mal einfach so versucht. Leider bricht er nach einer weile ohne Fehlermeldung ab?
function Fkt(a : Integer) : Integer;
var p : Pointer; begin p := VirtualAllocEx(GetCurrentProcess, nil, 1024, MEM_COMMIT, PAGE_EXECUTE_READWRITE); Move(b, p^, SizeOf(b)); asm mov ecx, p mov eax, a call ecx mov Result, eax end; VirtualFree(p, 1024, MEM_RELEASE); end; |
Re: Dynamisch Code Erzeugen
Ich weiss nicht ob ich dein Problem richtig verstanden habe.
1) Aber wie will dein Programm auf dem fremd Rechner Code kompilieren? 2) Tuts nicht auch den Code in eine DLL zu packen? Also das der neue Code mit der Funktion als DLL abgelegt wird? |
Re: Dynamisch Code Erzeugen
Ich will einen sehr sehr flinken Formel-Parser entwickeln!
Delphi-Quellcode:
Und dynamisch Code ausführen ist einfacher als ich dachte!
var b : array [0..5] of byte = ($03, $C0, $83, $E8, $03, $C3); // a * 2 - 3
function Fkt(a : Integer) : Integer; var p : Pointer; begin p := VirtualAlloc(nil, 1024, MEM_COMMIT, PAGE_EXECUTE_READWRITE); if p = nil then raise Exception.Create('p=nil'); CopyMemory(p, @b, SizeOf(b)); asm mov ecx, p mov eax, a call ecx mov Result, eax end; VirtualFree(p, 0, MEM_RELEASE); end; |
Re: Dynamisch Code Erzeugen
Also so langsam werde ich hier von meinen wachsenden Ohren erschlagen! Was du da machst stellt bei mir z.Zt. sämtliche Klausurübungsbemühungen in einen gaaaanz dunkeln Schatten!
...auch machen will! Wenn das ginge *froi*, wär das der Knaller! Evtl. könnten wir ja kooperieren! Weil ich hab so eben auch noch meine Lib für Komplexe Zahlen und Quaternionen korrigiert, und da könnte man doch was drehen :?: |
Re: Dynamisch Code Erzeugen
Von Complexen Zahlen und Co habe ich wiederrum keine Ahnung. Das ist eher mein gefilte.
Ich studiere Wirtschaftsinformatik! Und unsere oberste divise ist: "Vermeide jede Gleitkommaoperation". Deshalb müsste ich mich jetzt langsam mal mit den FPU-Befehlen auseinander setzten. Das ist ein riesen Stück arbeit. Denn was ich da vor habe und wo du kooperieren möchtest, ist fast ein vollwertiger Compilier. Das kann Wochen dauern bis das Teil steht. Mein erster Schritt wird Wahrscheinlich sein,den Parser und Scanner von C# nach Delphi umzuheben. Dann kommt das was ich noch nie gemacht habe. Code für eine Register-Maschine zu erzeugen. FRAGE: Hast du eine ICQ-Nummer? |
Re: Dynamisch Code Erzeugen
Hab dich im ICQ angetüdelt...
|
Re: Dynamisch Code Erzeugen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe so etwas auch mal gemacht. Vielleicht hilft euch das als Anregung. Die Klasse ist im Anhang. Ist aber nur für single Zahlen.
exp:=TExpression.create('a+b',['a','b']); exp.Evaluate([1,2]); Wenn man das noch ein wenig weiter fortsetzen möchte kann man auch dynamisch komplette Units und Delphi kompatible Klassen generieren. ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz