Autor |
Beitrag |
K.S.M.
      
Beiträge: 82
Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
|
Verfasst: So 03.08.08 13:53
Hi!
Ich hab schon bei Google gesucht, aber nichts brauchbares gefunden... Aber weiß jemand wie man zu seiner (eigenen) Programmiersprache einen Compiler schreibt, der eine EXE erstellen kann?
Mir würde erst natürlich was "einfaches" reichen (Konsolenanwendung).
Vielen Dank im Voraus! 
_________________ "Programmieren ist keine Kunst. Programmieren ist eine Fähigkeit!"
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: So 03.08.08 14:01
Für welches Betriebssystem denn? Win32 oder ein eigenes? 
_________________ We are, we were and will not be.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 03.08.08 14:03
Such mal nach Compilerbau dann solltest du einiges finden.
_________________ Markus Kinzler.
|
|
Robert.Wachtel
      
Beiträge: 895
Erhaltene Danke: 7
Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
|
Verfasst: So 03.08.08 14:03
|
|
Apollo
      
Beiträge: 125
Windows 7
Delphi 3 Prof., Delphi 2005
|
Verfasst: So 03.08.08 14:06
Das müsste möglich sein, aber das wird ne ganze menge Zeit in anspruch nehmen. Wiso willst du eine eigene programmiersprache entwickeln? Wenn dir Delphi nicht reicht steig einfach auf andere ganauso effektive programmiersprachen um z.B. java oder C#. Besonderst letzderes ist weit verbreitet. Jetzt zu deiner Frage:
Möchtest du deine eigene Programmiersprache erstellen wäre es wohl das einfachste sie in Delphi zu übersetzen. Du hast z.B. ein Memo auf dem Formular und tippst deinen Befehl für Text ein und die Position. Dann könntest du auf dem Programmformular einfach ein Label hinzufügen mit deinem Text und mit Top und Left kannst du es ausrichten. Wie man eine exe erstellt weiß ich leider nicht.
Ich hoffe ich konnte dir helfen.
[Edit]War mal wieder der Letzte 
_________________ Im Zweifelsfall immer das Richtige tun
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: So 03.08.08 14:14
Dir ist klar, was das für ein Aufwand ist? Du musst die Befehle parsen, i.d.R. in Assembler übersetzen und das ganze wiederum in die eigentlichen, numerischen Anweisungen übersetzen. Also bevor wir das hier vertiefen: Wie lange programmierst du in Delphi, und wie gut kannst du Assembler?
Ansonsten: Die Frage "Wie" verstehe ich in dem Zusammenhang nicht ganz. Ist doch klar: Du musst deine Befehle in die Mnemonics der CPU übersetzen.
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
K.S.M. 
      
Beiträge: 82
Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
|
Verfasst: Mo 04.08.08 10:52
Danke für die Antowrten  !
Zitat: | Für welches Betriebssystem denn? Win32 oder ein eigenes? |
Für Win32
Zitat: | Möchtest du deine eigene Programmiersprache erstellen wäre es wohl das einfachste sie in Delphi zu übersetzen. Du hast z.B. ein Memo auf dem Formular und tippst deinen Befehl für Text ein und die Position. Dann könntest du auf dem Programmformular einfach ein Label hinzufügen mit deinem Text und mit Top und Left kannst du es ausrichten. |
So habe ich mir das schon vorgestellt. Das ist ja auch nicht so schwierig.
Zitat: | Dir ist klar, was das für ein Aufwand ist? Du musst die Befehle parsen, i.d.R. in Assembler übersetzen und das ganze wiederum in die eigentlichen, numerischen Anweisungen übersetzen. Also bevor wir das hier vertiefen: Wie lange programmierst du in Delphi, und wie gut kannst du Assembler? |
Mir ist klar, dass das ein Aufwand ist. Also mit Delphi programmiere ich jetzt schon einige Jahre, und mit Assemblern habe ich eig auch schon gearbeitet.
Zitat: | Die Frage "Wie" verstehe ich in dem Zusammenhang nicht ganz |
Also, es gibt so gewisse reinfolgen wie "Sprache überlegen, Parser schreiben, ..." diese ersten kann ich in Delphi machen (das krieg ich auch hin). Aber wie schreibe ich einen compilierten Binärcode für die *.exe?
Danke für die raschen Antworten! 
_________________ "Programmieren ist keine Kunst. Programmieren ist eine Fähigkeit!"
|
|
Allesquarks
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: Mo 04.08.08 10:59
Nun ja entweder du holst dir Speicher (Delphi kann das glaube ich nicht untypisiert, obwohl in der System oder so manche Buffer keinen Typ haben, aber ich glaube das ist eine Ausnahme, die die Jungs von Borland sich da rausgenommen haben) und schreibst in den dann binär. Oder du machst einen Filestream (die exe soll später ja eh ne datai sein oder?) und schreibst da die binären Opcodes rein (das hat auch den Vorteil, dass dieser Buffer keinen Typ hat und da Delphi nicht meckert, aber das sollte wohl eines deiner kleineren Probleme sein).
|
|
K.S.M. 
      
Beiträge: 82
Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
|
Verfasst: Mo 04.08.08 11:06
Wahrscheinlich hast du mein Problem fehlverstanden, ich meinte wie ich den Binärcode erstelle (die Datei würd ich noch schaffen denke ich  ). Da fehlt mir die Lücke. Wie übersetze ich die Prozeduren in Binärcode und schreibe ihn dann in einen FileStream?
Tut mir Leid, wenn meine Fragen so uneindeutig sind  !

_________________ "Programmieren ist keine Kunst. Programmieren ist eine Fähigkeit!"
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mo 04.08.08 11:14
@Allesquarks: nichts für ungut, aber deine Antwort war glaube ich ungefähr so hilfreich wie "Da nimmst du einfach etwas Metall und bringst das in Form." Auf die Frage "Wie kann ich einen Motor für mein selbst entwickeltes Auto bauen?".
Wie vorher schon gesagt: Das ist ein recht komplexes Thema. Du brauchst erstmal Kenntnisse im Compilerbau, und dann tiefgehendes Wissen über Windows. Daher ja auch meine Frage, ob du Windows oder lieber ein eigenes OS benutzen willst.
Das einzige, was ich halbwegs für machbar hielte, wäre eine Interpretersprache mit einem Zusatzprogramm, was aus einem Code eine Exe baut, indem es den (mit Delphi?) compilierten Interpreter um eine Ressource ergänzt, in der der zu interpretierende Code steht. Das könnte man dann als Exe verteilen - die Exe lädt dann beim Start den Code aus der Ressource und arbeitet den ab.
_________________ We are, we were and will not be.
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Mo 04.08.08 11:19
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
K.S.M. 
      
Beiträge: 82
Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
|
Verfasst: Mo 04.08.08 11:23
Gausi hat folgendes geschrieben: | Das einzige, was ich halbwegs für machbar hielte, wäre eine Interpretersprache mit einem Zusatzprogramm, was aus einem Code eine Exe baut, indem es den (mit Delphi?) compilierten Interpreter um eine Ressource ergänzt, in der der zu interpretierende Code steht. Das könnte man dann als Exe verteilen - die Exe lädt dann beim Start den Code aus der Ressource und arbeitet den ab. |
(Ich fasse das mal für mich zusammen)
Also ich nehme eine in Delphi geschriebene "Inerpretier-Exe", die eine Ressource mit meinem Code zugewiesen bekommt. Das wäre natürlich simpel. Wie kann ich denn einer bereits vorhandenen EXE eine Ressource zuweisen?
--- Moderiert von Narses: Beiträge zusammengefasst---
@Timosch: Das ist ja sehr interessant! Wie mache ich daraus denn den Binärcode?
_________________ "Programmieren ist keine Kunst. Programmieren ist eine Fähigkeit!"
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Mo 04.08.08 11:43
K.S.M. hat folgendes geschrieben: | @Timosch: Das ist ja sehr interessant! Wie mache ich daraus denn den Binärcode? |
Ähm, die hexadezimalen Zahlen sind Maschinensprache...
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
K.S.M. 
      
Beiträge: 82
Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
|
Verfasst: Mo 04.08.08 11:45
Timosch hat folgendes geschrieben: |
Ähm, die hexadezimalen Zahlen sind Maschinensprache... |
Oh
na ja, ich mein wenn man mal auf die lustige Idee gekommen ist (so wie ich  ) eine EXE mit dem Editor zu öffnen, sehe ich doch viele lustige Zeichen. Wie schreibe ich den so einen Code?
_________________ "Programmieren ist keine Kunst. Programmieren ist eine Fähigkeit!"
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Mo 04.08.08 11:47
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
smt
      
Beiträge: 45
|
Verfasst: Mo 04.08.08 11:52
@KSM:
Schreib doch am erstmal eine Assembler-Datei (am besten als .COM-Datei - das ist erstmal am einfachsten, bevor Du Dich mit EXE-Dateien rumschlägst), die nur mal einen Text auf dem Bildschirm ausgibt (Kommandozeile). Dann nimm diesen Code und schreib mit Delphi ein Programm, welches diesen Codes als eine Art Bibliothek in einer .COM Datei ablegt. Dann baust Du einen Parser und wenn dann zum Beispiel das Kommando "write 'abc';" kommt, rufst Du diesen Code als Funktion aus Deiner Bibliothek auf.
Voila: Du hast einen Compiler geschrieben ! Nun müssen natürlich noch die weiteren Funktionen (Eingaben, Schleifen, Variablen, etc.) hinzugefügt werden. Und wenn Du das alles hast, kannst Du hingehen und aus Deiner Bibilothek noch das wegoptimieren, was Du nicht benötigt hast... Willst ja kein zweites Free-Pascal schreiben
Aber nichts für ungut: Einen Interpreter zu schreiben ist bedeutend einfacher und funktioniert mindestens genauso gut. Du musst halt in diesem Falle die "Sourcefiles" immer mitliefern. Aber diese kann man ja z.b. vorher verschlüsseln oder in eine Art Code zu übersetzen, falls der Source geschützt werden soll.
VG Sascha
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Mo 04.08.08 11:55
smt hat folgendes geschrieben: |
Aber nichts für ungut: Einen Interpreter zu schreiben ist bedeutend einfacher und funktioniert mindestens genauso gut. Du musst halt in diesem Falle die "Sourcefiles" immer mitliefern. Aber diese kann man ja z.b. vorher verschlüsseln oder in eine Art Code zu übersetzen, falls der Source geschützt werden soll.
VG Sascha |
...also Bytecode erzeugen. Sowas wäre in der Tat wesentlich einfacher, da muss ich smt Recht geben. Probiers erstmal besser mit sowas.
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
Allesquarks
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: Mo 04.08.08 12:45
@@Gausi: Er meinte er hat assembler Erfahrung da dachte ich schon das mein Kommentar hilfreich ist. Ich bin eben auch davon ausgegangen, dass er wenigstens weiß, dass ein mnemonic (wie schreibt sich das Viech) direkt ein binärer Opcode ist. Ich wollte ihm eigentlich nur sagen, dass er die aneinander reihen muss.
Vlt hilft ja diese Antwort mehr (ich halte übrigens einen Interpreter für nicht viel leichter): Guck dir mal an, was du bei einer Sprache machst oder erst recht in assembler. Du berechnest adressen schreibst sachen in Speicher und rechnest werte aus (gut und Sprungberechnung aber für den Anfang kannst du deine Funktions ja erstmal mit Zwischenraum designen). Einem := in Delphi müsste also dein Compiler in eine Adressberechnung der Variablen auflösen und dann das was rechts evt. berechnet wurde, von einer zweiten ggf. zu errechnenden Adresse holen. Manchmal gibts dann auch noch pointer auf pointer etc. Aber das wärs eigentlich schon  Ich weiß jetzt kommt wieder der Motor. Mir ist klar, dass man das beliebig verkomplizieren kann. Kommt ja auch darauf an, was du alles benutzen möchtest. Willst du den Stack benutzen, oder sogar ne Registerheuristik implementieren? Ich denke aber ein sehr langsamer basaler Compiler liegt durchaus im Bereich des Möglichen. Schreib doch erstmal schnell nen Disassembler das hilft dir dann ovn den Grundlagen ungemein.
|
|
K.S.M. 
      
Beiträge: 82
Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
|
Verfasst: Mo 04.08.08 22:10
Danke für die Antworten!
Ich werde das mit der COM-Datei ausprobieren. Kann vlt jemand einen Beispielcode schicken?
_________________ "Programmieren ist keine Kunst. Programmieren ist eine Fähigkeit!"
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 04.08.08 22:25
mhh, würde dir ebenfalls raten dir deinen eigenen interpreter zu schreiben, wie M$ mit .Net oder für den fang den code als ASM zu verpacken und anschliessend durch den assembler zu schicken (z. b. wie C)
wenn du es dann in ASM hast, brauchste es nur noch 1:1 übersetzen in maschinensprache, das ist aber dann vom jeweiligen prozessor abhängig... aber das kennste ja bestimmt ... 
|
|
|