Autor Beitrag
K.S.M.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
BeitragVerfasst: 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! :D

_________________
"Programmieren ist keine Kunst. Programmieren ist eine Fähigkeit!"
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 03.08.08 14:01 
Für welches Betriebssystem denn? Win32 oder ein eigenes? ;-)

_________________
We are, we were and will not be.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 03.08.08 14:03 
Such mal nach Compilerbau dann solltest du einiges finden.

_________________
Markus Kinzler.
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: So 03.08.08 14:03 
Das hier dürfte Dir erstmal ein paar Infos bringen:

de.wikipedia.org/wiki/Compilerbau
www.google.de/search?q=compilerbau
Apollo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125

Windows 7
Delphi 3 Prof., Delphi 2005
BeitragVerfasst: 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 :motz:

_________________
Im Zweifelsfall immer das Richtige tun
Timosch
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
BeitragVerfasst: Mo 04.08.08 10:52 
Danke für die Antowrten :D !

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! :wave:

_________________
"Programmieren ist keine Kunst. Programmieren ist eine Fähigkeit!"
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
BeitragVerfasst: 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 :D !

:wink:

_________________
"Programmieren ist keine Kunst. Programmieren ist eine Fähigkeit!"
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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?". :lol:

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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: Mo 04.08.08 11:19 
user profile iconK.S.M. hat folgendes geschrieben:
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 :D !

:wink:

Du musst wissen, welcher Assembler-Mnemonic für welche numerische Anweisung steht. Bei MASM32 liegt da eine Hilfedatei bei:
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460:
461:
462:
463:
464:
465:
466:
467:
468:
469:
470:
471:
472:
473:
474:
475:
476:
477:
478:
479:
480:
481:
482:
483:
484:
485:
486:
487:
488:
489:
490:
491:
492:
493:
494:
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
512:
513:
514:
515:
516:
517:
518:
519:
520:
521:
522:
523:
524:
525:
526:
527:
528:
529:
530:
531:
532:
533:
534:
535:
536:
537:
538:
539:
540:
541:
542:
543:
544:
545:
546:
547:
548:
549:
550:
551:
552:
553:
554:
555:
556:
557:
558:
559:
560:
561:
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574:
575:
576:
577:
578:
579:
580:
581:
582:
583:
584:
585:
586:
587:
588:
589:
590:
591:
592:
593:
594:
595:
596:
597:
598:
599:
600:
601:
602:
603:
604:
605:
606:
607:
608:
609:
610:
611:
612:
613:
614:
615:
616:
617:
618:
619:
620:
621:
622:
623:
624:
625:
626:
627:
628:
629:
630:
631:
632:
633:
634:
635:
636:
637:
638:
639:
640:
641:
642:
643:
644:
645:
646:
647:
648:
649:
650:
651:
652:
653:
654:
655:
656:
657:
658:
659:
660:
661:
662:
663:
664:
665:
666:
667:
668:
669:
670:
671:
672:
673:
674:
675:
676:
677:
678:
679:
680:
681:
682:
683:
684:
685:
686:
687:
688:
689:
690:
691:
692:
693:
694:
695:
696:
697:
698:
699:
700:
701:
702:
703:
704:
705:
706:
707:
708:
709:
710:
711:
712:
713:
714:
715:
            00 ADD  
            01 ADD

            02 ADD
            03 ADD
            04 ADD
            05 ADD
            06 PUSH
            07 POP
            08 OR
            09 OR
            0A OR
            0B OR
            0C OR
            0D OR
            0E PUSH
            0F 00 LLDT
            0F 00 LTR
            0F 00 SLDT
            0F 00 STR
            0F 00 VERR
            0F 00 VERW
            0F 01 INVLPG
            0F 01 LGDT
            0F 01 LIDT
            0F 01 LMSW

            0F 01 SGDT
            0F 01 SIDT
            0F 01 SMSW
            0F 01 SMSW 
            0F 02 LAR
            0F 03 LSL
            0F 08 INVD
            0F 09 WBINVD
            0F 0B UD2
            0F 20 MOV
            0F 21 MOV
            0F 22 MOV
            0F 23 MOV
            0F 30 WRMSR
            0F 31 RDTSC
            0F 32 RDMSR
            0F 33 RDPMC
            0F 40 CMOVO
            0F 41 CMOVNO
            0F 42 CMOVB

            0F 42 CMOVC
            0F 42 CMOVNAE
            0F 43 CMOVAE
            0F 43 CMOVNB
            0F 43 CMOVNC
            0F 44 CMOVE
            0F 44 CMOVZ
            0F 45 CMOVNE
            0F 45 CMOVNZ
            0F 46 CMOVBE
            0F 46 CMOVNA
            0F 47 CMOVA
            0F 47 CMOVNBE
            0F 48 CMOVS
            0F 49 CMOVNS
            0F 4A CMOVP
            0F 4A CMOVPE
            0F 4B CMOVNP
            0F 4B CMOVPO

            0F 4C CMOVL
            0F 4C CMOVNGE
            0F 4D CMOVGE
            0F 4D CMOVNL
            0F 4E CMOVLE
            0F 4E CMOVNG
            0F 4F CMOVG
            0F 4F CMOVNLE
            0F 60 PUNPCKLBW
            0F 61 PUNPCKLWD
            0F 62 PUNPCKLDQ
            0F 63 PACKSSWB
            0F 64 PCMPGTB
            0F 65 PCMPGTW 
            0F 66 PCMPGTD
            0F 67 PACKUSWB
            0F 68 PUNPCKHBW
            0F 69 PUNPCKHWD

            0F 6A PUNPCKHDQ
            0F 6B PACKSSDW 
            0F 6E MOVD
            0F 6F MOVQ
            0F 71 PSLLW 
            0F 71 PSRAW
            0F 71 PSRLW
            0F 72 PSLLD
            0F 72 PSRAD
            0F 72 PSRLD
            0F 73 PSLLQ
            0F 73 PSRLQ
            0F 74 PCMPEQB
            0F 75 PCMPEQW
            0F 76 PCMPEQD
            0F 77 EMMS
            0F 7E MOVD
            0F 7F MOVQ
            0F 80 JO

            0F 81 JNO
            0F 82 JB
            0F 82 JC
            0F 82 JNAE
            0F 83 JAE
            0F 83 JNB
            0F 83 JNC
            0F 84 JE
            0F 84 JZ
            0F 85 JNE
            0F 85 JNZ
            0F 86 JBE
            0F 86 JNA
            0F 87 JA
            0F 87 JNBE
            0F 88 JS
            0F 89 JNS
            0F 8A JP
            0F 8A JPE
            0F 8B JNP
            0F 8B JPO

            0F 8C JL
            0F 8C JNGE
            0F 8D JGE
            0F 8D JNL
            0F 8E JLE
            0F 8E JNG
            0F 8F JG
            0F 8F JNLE
            0F 90 SETO
            0F 91 SETNO
            0F 92 SETB
            0F 92 SETC
            0F 92 SETNAE
            0F 93 SETAE
            0F 93 SETNB
            0F 93 SETNC
            0F 94 SETE
            0F 94 SETZ
            0F 95 SETNE
            0F 95 SETNZ

            0F 96 SETBE
            0F 96 SETNA
            0F 97 SETA
            0F 97 SETNBE
            0F 98 SETS
            0F 99 SETNS
            0F 9A SETP
            0F 9A SETPE
            0F 9B SETNP
            0F 9B SETPO
            0F 9C SETL
            0F 9C SETNGE
            0F 9D SETGE
            0F 9D SETNL
            0F 9E SETLE
            0F 9E SETNG
            0F 9F SETG
            0F 9F SETNLE
            0F A0 PUSH
            0F A1 POP

            0F A3 BT
            0F A4 SHLD
            0F A5 SHLD
            0F A8 PUSH
            0F A9 POP
            0F AA RSM
            0F AB BTS
            0F AC SHRD
            0F AD SHRD
            0F AF IMUL
            0F B0 CMPXCHG
            0F B1 CMPXCHG
            0F B2 LSS
            0F B3 BTR
            0F B4 LFS
            0F B5 LGS
            0F B6 MOVZX
            0F B7 MOVZX
            0F BA BT
            0F BA BTC
            0F BA BTR

            0F BA BTS
            0F BB BTC
            0F BC BSF
            0F BD BSR
            0F BE MOVSX
            0F BF MOVSX
            0F C0 XADD
            0F C1 XADD
            0F C7 CMPXCHG8B
            0F C8 BSWAP
            0F D1 PSRLW
            0F D2 PSRLD
            0F D3 PSRLQ
            0F D8 PSUBUSB
            0F D9 PSUBUSW
            0F DB PAND
            0F DC PADDUSB
            0F DD PADDUSW
            0F DF PANDN
            0F E1 PSRAW

            0F E2 PSRAD
            0F E5 PMULHW 
            0F E8 PSUBSB
            0F E9 PSUBSW
            0F EB POR
            0F EC PADDSB
            0F ED PADDSW 
            0F EF PXOR
            0F F1 PSLLW 
            0F F2 PSLLD
            0F F3 PSLLQ 
            0F F5 PMADDWD
            0F F8 PSUBB
            0F F9 PSUBW
            0F FA PSUBD
            0F FC PADDB
            0F FD PADDW 
            0F FE PADDD
            10 ADC

            11 ADC
            12 ADC
            13 ADC
            14 ADC
            15 ADC
            16 PUSH
            17 POP
            18 SBB
            19 SBB
            1A SBB
            1B SBB
            1C SBB
            1D SBB
            1E PUSH
            1F POP
            20 AND
            21 AND
            22 AND
            23 AND
            24 AND
            25 AND
            27 DAA
            28 SUB
            29 SUB

            2A SUB
            2B SUB
            2C SUB
            2D SUB
            2F DAS
            30 XOR
            31 XOR
            32 XOR
            33 XOR
            34 XOR
            35 XOR
            37 AAA
            38 CMP
            39 CMP
            3A CMP
            3B CMP
            3C CMP
            3D CMP
            3F AAS
            40 INC
            48 DEC
            50 PUSH
            58 POP
            60 PUSHA

            60 PUSHAD
            61 POPA
            61 POPAD
            62 BOUND
            63 ARPL
            68 PUSH
            69 IMUL
            6A PUSH
            6B IMUL
            6C INS
            6C INSB
            6D INS
            6D INSD
            6D INSW
            6E OUTS
            6E OUTSB
            6F OUTS
            6F OUTSD
            6F OUTSW
            70 JO
            71 JNO
            72 JB
            72 JC

            72 JNAE
            73 JAE
            73 JNB
            73 JNC
            74 JE
            74 JZ
            75 JNE
            75 JNZ
            76 JBE
            76 JNA
            77 JA
            77 JNBE
            78 JS
            79 JNS
            7A JP
            7A JPE
            7B JNP
            7B JPO
            7C JL
            7C JNGE
            7D JGE
            7D JNL
            7E JLE
            7E JNG

            7F JG
            7F JNLE
            80 ADC
            80 ADD
            80 AND
            80 CMP
            80 OR
            80 SBB
            80 SUB
            80 XOR
            81 ADC
            81 ADD
            81 AND
            81 CMP
            81 OR
            81 SBB
            81 SUB
            81 XOR
            83 ADC
            83 ADD
            83 AND
            83 CMP
            83 OR
            83 SBB

            83 SUB
            83 XOR
            84 TEST
            85 TEST
            86 XCHG
            87 XCHG
            88 MOV
            89 MOV
            8A MOV
            8B MOV
            8B MOV 
            8C MOV
            8D LEA
            8E MOV
            8F POP
            90 NOP
            90 XCHG
            98 CBW
            98 CWDE
            99 CDQ
            99 CWD
            9A CALL
            9A CALL
            9B D9 FSTCW

            9B D9 FSTENV
            9B DB E2 FCLEX
            9B DB E3 FINIT
            9B DD FSAVE
            9B DD FSTSW
            9B DF E0 FSTSW
            9B FWAIT
            9B WAIT
            9C PUSHF
            9C PUSHFD
            9D POPF
            9D POPFD
            9E SAHF
            9F LAHF
            A0 MOV
            A1 MOV
            A2 MOV
            A3 MOV
            A4 MOVS
            A4 MOVSB 
            A5 MOVS

            A5 MOVSD
            A5 MOVSW 
            A6 CMPS
            A6 CMPSB
            A7 CMPS
            A7 CMPSD
            A7 CMPSW
            A8 TEST
            A9 TEST
            AA STOS 
            AA STOSB
            AB STOS
            AB STOSD
            AB STOSW
            AC LODS
            AC LODSB
            AD LODS
            AD LODSD
            AD LODSW
            AE SCAS
            AE SCASB
            AF SCAS
            AF SCASD

            AF SCASW
            B0 MOV
            B8 MOV
            C0 RCL
            C0 RCR
            C0 ROL
            C0 ROR
            C0 SAL
            C0 SAR
            C0 SHL
            C0 SHR
            C1 RCL
            C1 RCR
            C1 ROL
            C1 ROR
            C1 SAL
            C1 SAR
            C1 SHL
            C1 SHR
            C2 RET
            C3 RET
            C4 LES
            C5 LDS
            C6 MOV

            C7 MOV
            C8 00 ENTER
            C8 01 ENTER
            C8 ENTER
            C9 LEAVE
            CA RET
            CC INT
            CD INT
            CE INTO
            CF IRET
            CF IRETD
            D0 RCL
            D0 RCR
            D0 ROL
            D0 ROR
            D0 SAL
            D0 SAR
            D0 SHL
            D0 SHR
            D1 RCL
            D1 RCR
            D1 ROL
            D1 ROR

            D1 SAL
            D1 SAR
            D1 SHL
            D1 SHR
            D2 RCL
            D2 RCR
            D2 ROL
            D2 ROR
            D2 SAL
            D2 SAR
            D2 SHL
            D2 SHR
            D3 RCL
            D3 RCR
            D3 ROL
            D3 ROR
            D3 SAL
            D3 SAR
            D3 SHL
            D3 SHR
            D4 (No mnemonic)
            D4 0A AAM
            D5 (No mnemonic)

            D5 0A AAD
            D7 XLAT
            D7 XLATB
            D8 C0 FADD
            D8 C8 FMUL
            D8 D0 FCOM
            D8 D1 FCOM
            D8 D8 FCOMP
            D8 D9 FCOMP
            D8 E0 FSUB
            D8 E8 FSUBR
            D8 F0 FDIV
            D8 F8 FDIVR
            D8 FADD
            D8 FCOM
            D8 FCOMP
            D8 FDIV
            D8 FDIVR
            D8 FMUL
            D8 FSUB
            D8 FSUBR

            D9 C0 FLD
            D9 C8 FXCH
            D9 C9 FXCH
            D9 D0 FNOP
            D9 E0 FCHS
            D9 E1 FABS
            D9 E4 FTST
            D9 E8 FLD1
            D9 E9 FLDL2T
            D9 EA FLDL2E
            D9 EB FLDPI
            D9 EC FLDLG2
            D9 ED FLDLN2
            D9 EE FLDZ
            D9 F0 F2XM1
            D9 F2 FPTAN
            D9 F3 FPATAN 
            D9 F4 FXTRACT
            D9 F5 FPREM1
            D9 F6 FDECSTP

            D9 F7 FINCSTP
            D9 F9 FYL2XP1
            D9 FA FSQRT
            D9 FB FSINCOS
            D9 FC FRNDINT
            D9 FD FSCALE
            D9 FE FSIN 
            D9 FF FCOS
            D9 FLD
            D9 FLDCW 
            D9 FLDENV
            D9 FNSTCW
            D9 FNSTENV
            D9 FST
            D9 FSTP
            DA C0 FCMOVB
            DA C8 FCMOVE
            DA D0 FCMOVBE
            DA D8 FCMOVU
            DA E9 FUCOMPP

            DA FIADD
            DA FICOM
            DA FICOMP
            DA FIDIV
            DA FIDIVR
            DA FIMUL
            DA FISUB
            DA FISUBR
            DB C0 FCMOVNB
            DB C8 FCMOVNE
            DB D0 FCMOVNBE
            DB D8 FCMOVNU
            DB E2 FNCLEX
            DB E3 FNINIT
            DB E8 FUCOMI
            DB F0 FCOMI
            DB FILD
            DB FIST
            DB FISTP
            DB FLD
            DB FSTP

            DC C0 FADD
            DC C8 FMUL
            DC E0 FSUBR
            DC E8 FSUB
            DC F0 FDIVR
            DC F8 FDIV
            DC FADD
            DC FCOM
            DC FCOMP
            DC FDIV
            DC FDIVR
            DC FMUL
            DC FSUB
            DC FSUBR
            DD C0 FFREE
            DD D0 FST
            DD D8 FSTP
            DD E0 FUCOM
            DD E1 FUCOM
            DD E8 FUCOMP
            DD E9 FUCOMP

            DD FLD
            DD FNSAVE
            DD FNSTSW
            DD FRSTOR
            DD FST
            DD FSTP
            DE C0 FADDP
            DE C1 FADDP
            DE C8 FMULP
            DE C9 FMULP
            DE D9 FCOMPP
            DE E0 FSUBRP
            DE E1 FSUBRP
            DE E8 FSUBP
            DE E9 FSUBP
            DE F0 FDIVRP
            DE F1 FDIVRP
            DE F8 FDIVP
            DE F9 FDIVP
            DE FIADD

            DE FICOM
            DE FICOMP
            DE FIDIV
            DE FIDIVR
            DE FIMUL
            DE FISUB
            DE FISUBR
            DF E0 FNSTSW
            DF E8 FUCOMIP
            DF F0 FCOMIP
            DF FBLD
            DF FBSTP
            DF FILD
            DF FIST
            DF FISTP
            E0 LOOPNE
            E0 LOOPNZ
            E1 LOOPE
            E1 LOOPZ
            E2 LOOP
            E3 JCXZ
            E3 JECXZ

            E4 IN
            E5 IN
            E6 OUT
            E7 OUT
            E8 CALL
            E9 JMP
            EA JMP
            EB JMP
            EC IN
            ED IN
            EE OUT
            EF OUT
            F0 LOCK
            F2 A6 REPNE
            F2 A7 REPNE
            F2 AE REPNE
            F2 AF REPNE
            F3 6C REP
            F3 6D REP
            F3 6E REP
            F3 6F REP
            F3 A4 REP
            F3 A5 REP

            F3 A6 REPE
            F3 A7 REPE
            F3 AA REP
            F3 AB REP
            F3 AC REP
            F3 AD REP
            F3 AE REPE
            F3 AF REPE
            F4 HLT
            F5 CMC
            F6 DIV
            F6 IDIV
            F6 IMUL
            F6 MUL 
            F6 NEG
            F6 NOT
            F6 TEST
            F7 DIV
            F7 IDIV
            F7 IMUL
            F7 MUL
            F7 NEG
            F7 NOT

            F7 TEST
            F8 CLC
            F9 STC
            FA CLI
            FC CLD
            FD STD
            FE DEC
            FE INC
            FF CALL
            FF DEC
            FF INC
            FF JMP
            FF PUSH

_________________
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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
BeitragVerfasst: Mo 04.08.08 11:23 
user profile iconGausi 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 user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: Mo 04.08.08 11:43 
user profile iconK.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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
BeitragVerfasst: Mo 04.08.08 11:45 
user profile iconTimosch hat folgendes geschrieben:

Ähm, die hexadezimalen Zahlen sind Maschinensprache...


Oh :D

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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: Mo 04.08.08 11:47 
user profile iconK.S.M. hat folgendes geschrieben:
user profile iconTimosch hat folgendes geschrieben:

Ähm, die hexadezimalen Zahlen sind Maschinensprache...


Oh :D

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?

Dieser Frage nach solltest du dich vielleicht mit etwas einfacherem als einem Compiler beschäftigen...
Ein Editor stellt ASCII-/ANSI-/Unicode-Zeichen dar. Öffne eine EXE mal mit einem Hex-Editor und du siehst genau solche Opcodes.

_________________
If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
smt
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 45



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: Mo 04.08.08 11:55 
user profile iconsmt 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: 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 :wink: 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
BeitragVerfasst: 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



BeitragVerfasst: 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 ... :-)