Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 12, 2025 09:26

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 14, 2003 08:24 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
IFlo hat geschrieben:

Wie wäre es wenn man mit Hilfe eines Assemblers Befehl in Delphi zu modifiezierbaren Code springt. Das somit erstelle Programm könnte dan das Grundgerüst für neue Anwendugen sein.


Früher war das durchaus eine gängige Praxis. Delphi selber verwendet das teilweise aus der folgenden Problematik: funktionen innerhalb eines Objektes können nicht als CallBack an die Windows-API übergeben werden, da jede Funktion innerhalb eines Objektes als zusätzlichen Parameter den Pointer auf das entsprechende Objekt mitbekommt. Deswegen legt die VCL speicher ein, in welchem eine "prozedur" hinterlegt wird die dann die entsprechende Funktion innerhalb des Objektes anspringt. Die Adresse des Speicherbereiches wird dann als CallBack an die API übergeben.

DAS IST ABER EINE AUSNAHME!!!! In der Regel macht man heutzutage keinen Selbsmodifizierenden Code mehr aus den folgenden Gründen:

- Selbstmodifizierender Code ist zu fehleranfällig (bis das mal läuft...)
- Mann kann diesen Bereich extrem schlecht debuggen
- Es ist im allgemeinen mittlerweile ein schlechter Programmierstiel
- Die übersicht im Source leidet deutlich darunter
- es bringt (im Gegensatz zu früher zu DOS und i386 Zeiten) keine Geschwindigkeitsvorteile mehr!

Deswegen Rate ich: vergiss es gleich wieder!

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 14, 2003 10:27 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Wenn du einen richtigen Compiler machen willst, dann kannst du dir ja mal das Minimum Beispiel von MASM ansehen. Da wird nur eine MessageBox angezeigt und die EXE Datei enthält nur weniger Befehle. Daher kann man daran gut den allgemeinen Aufbau erkennen. MASM kann kostenlos von http://www.masm32.com/ geladen werden. Dieser Debugger ist auch hilfreich http://home.t-online.de/home/Ollydbg/.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 17, 2003 18:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Zitat:

- Selbstmodifizierender Code ist zu fehleranfällig (bis das mal läuft...)
- Mann kann diesen Bereich extrem schlecht debuggen
- Es ist im allgemeinen mittlerweile ein schlechter Programmierstiel
- Die übersicht im Source leidet deutlich darunter

- es bringt (im Gegensatz zu früher zu DOS und i386 Zeiten) keine Geschwindigkeitsvorteile mehr!
Keine merkbaren meinst du wohl, oder?

Deswegen Rate ich: vergiss es gleich wieder!

Ich hatte eigentlich damit vor Objekte in meinen openGL-Programmen zuladen. Ich nehme einfach den von Delphi fertig compilte Code für das Objekt, und speichere dies in einer Datei ab. Diese wird dann in den Arbeitsspreicher geladen und ausgeführt. Müsste doch eigentlich gut klappen... ...oder gilt auch dann SchodMCs Rat?
Mfg
IFlo

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 17, 2003 19:24 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
So einfach geht das nicht weil dann die Referenzen auf andere Code Teile nicht stimmen. Das sind z.B. globale Funktionen, nicht virtuelle Methoden und viele Arten von Konstanten. Daher gibt es in einer Exe Datei den Bereich mit den Relokations, in dem steht wo welche Addressen angepaßt werden müssen. Auch wenn der nur bei DLL tatsächlich benötigt wird.
In einer früheren Version einer Engine habe ich mal einen Compiler eingebaut der eine Art minimales C++ zu Delphi kompatiblen Klassen kompiliert hat, so daß die kompilierten Klassen und die original Delphi Klassen austauschbar waren und es wegen den virtuelle Methoden auch beim Aufruf keinen Unterschied machte.
Das Testen von solchem Code geht eigentlich ganz gut mit dem CPU Fenster von Delphi. Wenn man richtig dokumentiert wie man eigenen Code einbindet, dann dürfte das eigentlich machbar sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 25, 2003 09:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 18:50
Beiträge: 92
Vielleicht ist es leichter, sog. Compiler - Construction - Tools zu verwenden. Ich hoffe, der folgende Link hilft ein bisschen.
http://www.thefreecountry.com/programming/compilerconstruction.shtml

Hab leider von diesem Thema selbst wenig Ahnung.

Mfg Alzheimer


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 25, 2003 16:39 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Auch wenn TP 3.0 schon sehr alt ist, kann man davon lernen, denn der TP3.0 Compiler ist ein 1 Pass Compiler mit Top Down Parser (ähnlich wie der Parser im Script Tutorial) und die Code Generierung ist erschreckend einfach gehalten. Hier wird das zeimlich genau beschrieben:
http://www.pcengines.ch/tp3.htm

Natürlich ist diese Vorgehensweise heutzutage nicht mehr modern, aber wenn man bedenkt, daß man für solch einen Compiler nur aus wenigen Prozeduren besteht, dann ist das schon beieindruckend. Für eine Scriptsprache dürfte das Verhältnis zwischen Aufwand und Leistung in Ordnung sein.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]