AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamisch Code Erzeugen

Ein Thema von neolithos · begonnen am 9. Jul 2004 · letzter Beitrag vom 9. Jul 2004
Antwort Antwort
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#1

Dynamisch Code Erzeugen

  Alt 9. Jul 2004, 19:33
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.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#2

Re: Dynamisch Code Erzeugen

  Alt 9. Jul 2004, 19:52
Delphi-Quellcode:
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;
Ich habe das mal einfach so versucht. Leider bricht er nach einer weile ohne Fehlermeldung ab?
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
rantanplan99
(Gast)

n/a Beiträge
 
#3

Re: Dynamisch Code Erzeugen

  Alt 9. Jul 2004, 20:04
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?
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#4

Re: Dynamisch Code Erzeugen

  Alt 9. Jul 2004, 20:16
Ich will einen sehr sehr flinken Formel-Parser entwickeln!
Delphi-Quellcode:
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;
Und dynamisch Code ausführen ist einfacher als ich dachte!
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Dynamisch Code Erzeugen

  Alt 9. Jul 2004, 20:21
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
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#6

Re: Dynamisch Code Erzeugen

  Alt 9. Jul 2004, 20:30
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?
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Dynamisch Code Erzeugen

  Alt 9. Jul 2004, 20:36
Hab dich im ICQ angetüdelt...
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
LarsMiddendorf

Registriert seit: 4. Sep 2003
Ort: Hemer
104 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Dynamisch Code Erzeugen

  Alt 9. Jul 2004, 21:39
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.
http://www.delphigl.com/forum/viewtopic.php?t=2803
Angehängte Dateien
Dateityp: pas expression.pas (12,0 KB, 15x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz