DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > BlitzBasic Decompiler? | [ - Search - New posts - Register - Login - ] |
-1- 2 | [ - Post reply - ] |
2014-01-31, 15:34 h cgutjahr Posts: 2783 [Administrator] |
Gibt es einen Decompiler für Blitz Basic? Mir ist nichts bekannt, aber vielleicht hat ja der Wanderer noch drei oder fünf halbfertige Projekte zu Hause herumliegen [ - Answer - Quote - Direct link - ] |
2014-01-31, 16:24 h Blackbird Posts: 634 User |
Glaube ich nicht das da einer rumfliegt... Was meinst du mit Decompiler überhaupt ? Das das Exe wieder zurück in Blitzbasic2 Source verwandelt wird ? Das gibts meines bescheidenen Wissens nicht, du kannst aber einen Disassembler (z.B Adis) nehmen und die Exe wieder in asm wandeln... So hat Bernd Rösch damals (tm) AmiBlitz2 gemacht... Für was brauchst du sowas wenn ich fragen darf ? -- regards Blackbird PerfectPaint : supportOS4@amiforce.de HP: http://perfectpaint.amiforce.de/ Have also a look at my personal Website: http://www.blackbird-net.de [ - Answer - Quote - Direct link - ] |
2014-01-31, 20:17 h huepper Posts: 481 User |
Ich vermute mal, daß er sich den Programmcode von einem in Basic geschriebenen Programm mal anschauen möchte. ASM geht ja dann immer, aber wieder in den ursprünglichen Code ist m.E. nicht so einfach, wenn überhaupt möglich. -- Signatur ? hmm wo hab ich sie nur wieder ? [ - Answer - Quote - Direct link - ] |
2014-01-31, 20:29 h inq Posts: 445 User |
Ein Compiler erzeugt gemeinhin Maschinensprache. Demzufolge ließe sich höchstens etwas dem nahe liegendes erzeugen: ASM. Bei Blitz-Exes könnte man noch die dazugelinkten Libs erkennen; das setzt aber etwas Kenntnis und eine Datenbank derselben voraus-oder/und die DBG-Informationen. sehr viel höher als ASM kommt man aber sicher nicht. Allerdings wäre ein aus dem ASM neu assembliertes Exe wohl deutlich kleiner als das Original. -- Config: A1200/30/50/FPU/SCSI/64MB, WinUAE/40/xx/xxMB, EUAE/40/25/xxMB, CDTV, CD32/SX32MK2/HD - AOS3.5 [ Dieser Beitrag wurde von inq am 31.01.2014 um 20:30 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2014-01-31, 21:30 h Blackbird Posts: 634 User |
letztes oder sogar vorletztes Jahr hatten wir mal ein paar Versuche gemacht Ein Exe in AmiBlitz3 erzeugt mit Debuginfos... Dann durch Adis gejagd... Den ASMsource hab ich dann versucht durch das PPCto68k von Coyote Flux zu zwängen um ppcasm zu bekommen... Hat aber nicht so toll funktioniert, und dann hat ich keinen Bock mehr das näher zu verfolgen, wäre eh nur Warpup geworden... -- regards Blackbird [ - Answer - Quote - Direct link - ] |
2014-01-31, 21:57 h cgutjahr Posts: 2783 [Administrator] |
Korrekt, ich würde gerne den Source-Code eines einfachen BlitzBasic-Spiels, den der Autor verloren hat, wieder "gewinnen". Einen Decompiler gibt es also offenbar nicht, schade. Wundert mich allerdings, dass die Idee auf so viel Verwunderung stößt. Natürlich muss es irgendwo eine Grenze geben, ab der die verwendete Sprache oder der generierte Code so komplex sind, dass eine Wiederherstellung der Sourcen an Grenzen stößt. Aber ich bin einfach davon ausgegangen, das Sprachen wie AMOS oder BlitzBasic noch in die Kategorie "ersetze Befehl X durch Assembler Konstrukt Y" gehören... [ - Answer - Quote - Direct link - ] |
2014-01-31, 22:05 h Der_Wanderer Posts: 1229 User |
Nein, gibt es nicht. Der Compilvorgang ist eine Einwegfunktion. -- -- Author of NTUI, AIDE, A/A++, HD-Rec, MacroWave, Sweeper, Samplemanager, ArTKanoid, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ImageConverter, ScreenCam, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Answer - Quote - Direct link - ] |
2014-01-31, 23:51 h inq Posts: 445 User |
Zitat: Was für ein überflüssiger Ansatz, also mal ehrlich. Ich würde ja mit'nem 86k Assembler beginnen..... [ - Answer - Quote - Direct link - ] |
2014-01-31, 23:59 h inq Posts: 445 User |
Zitat:(Noch) nicht für BB, nein. Wenn es nur ein einfaches Spiel ist, kann man es doch auch neu schreiben, oder? Zitat:Ja, so in etwa ist es auch, zumindest ungefähr. Im Prinzip werden beim Compiler zig Unterfunktionen aneinandergelinkt und über main ansprechbar gemacht. Die Unterfunktionen/Subroutinen sind aber selbst in ASM, also als Maschinensprache assembliert und dann zu Unterbibliotheken zusammenkompiliert. Demzufolge könnte man anhand der zugelinkten Libs zumindest einen Teil der Funktionalität Decompilieren; im Allgemeinen funktioniert das jedoch nicht. [ - Answer - Quote - Direct link - ] |
2014-02-01, 00:26 h Der_Wanderer Posts: 1229 User |
Amiblitz2/3 hat auch PPC inline Assembler, fyi. Wie gesagt, Decompiler funktioniert nicht weil nicht nur Macros aneinandergepappt werden. Man kann natürlich herausfinden, welche BlitzLibs eingelinkt wurden, da die immer komplett reingelinkt werden. Das kann ich aber auch vom bloßen Anschauen des Spiels schon sagen... und hilft nicht wirklich weiter. -- -- Author of NTUI, AIDE, A/A++, HD-Rec, MacroWave, Sweeper, Samplemanager, ArTKanoid, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ImageConverter, ScreenCam, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ Dieser Beitrag wurde von Der_Wanderer am 01.02.2014 um 00:28 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2014-02-01, 08:26 h Blackbird Posts: 634 User |
@inq: Da AmiBlitz per Compiler nur 68k exe ausspuckt, hätte das sehr wohl Sinn gemacht. Man hätte am ende wenn alles klappt ein natives PPC-exe erhalten... einen 86k Assembler kenn ich nicht und wird es auch nicht geben... Klar kann man in AmiBlitz auch PPC-inline programmieren (wenn mans kann) Aber alte Programme wo teils auch noch der Source fehlt in was Natives außer 68k zu bringen war eine reizvolle Aussicht damals (tm) Erzähl doch mal wie du das so machen würdest... -- regards Blackbird [ - Answer - Quote - Direct link - ] |
2014-02-01, 11:39 h inq Posts: 445 User |
Zitat: Na, dahabe ich mal einen Zahlendreher, und schon versteht mich keiner mehr. Ich meine natürlich 68k-Assembler. Dann ist dir die Vorgehensweise aber schon klar, oder? Dissassemblieren mit den Debug-Infos, alles freiräumen, was nicht Niet-und-Nagelfest ist und danach wieder Reassemblieren. Somit hättest du schon mal sauber(re)en ASM-Code, den du nach PPC-ASM wandeln könntest. [ - Answer - Quote - Direct link - ] |
2014-02-01, 12:57 h _PAB_ Posts: 3016 User |
@inq: 68k nach PPC Assembler zu konvertieren ist - rein logisch betrachtet - eine absolut machbare Aufgabe. Im Prinzip muss man nur die 68k-Befehle in PPC-Befehle übersetzen (was auch bedeutet, die Registerzuordnung anzupassen, aber auch das ist automatisiert machbar). Komplexere 68k-Befehler, die es auf dem (RISC-)PPC nicht gibt, müssten durch längere PPC-Codeblöcke ersetzt werden. Dabei verschieben sich natürlich alle Sprungmarken, die sich nach der Ersetzungstelle befinden um einen konstanten Offset. Mit einer gründlichen Analyse des 68k-Codes sollte aber auch das automatisiert machbar sein. Einen solchen Wandler zu programmieren ist halt nur eine recht komplexe Aufgabe, die viel Geduld und gute Projektplanung erfordert. Aber vom Prinzip her implementiert ein 68k-JIT-Compiler eine ähnliche Idee... [ - Answer - Quote - Direct link - ] |
2014-02-01, 13:09 h Blackbird Posts: 634 User |
@inq: Schon klar...wir wollten das eben mal ausprobieren. Die Idee hatte damals bernd undich hatte Zeit Die genauen Gründe weis ich jetzt auch nicht mehr, aber entweder hatte das was mit Adis oder ira zu tun weil das bis dato die einzigen weiterentwickelten Disassembler sind die Quelloffen (?) sind... @_PAB_ Für Windows gibt es einen 68k zu PPC Konverter, was der kostet und was er taugt weis ich allerdings nicht. Ich gehe auch davon aus das man dann immer noch selbst Hand anlegen muß weil so ein Konverter auch nicht zaubern kann... -- regards Blackbird [ Dieser Beitrag wurde von Blackbird am 01.02.2014 um 13:10 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2014-02-01, 19:50 h Der_Wanderer Posts: 1229 User |
Hm, was hat ein offline Konverter für Vorteile gegenüber einem JIT Konverter? Offensichtlich hat man mehr Zeit für Optimierungen. Fraglich ist aber ob da viel zu holen ist. -- -- Author of NTUI, AIDE, A/A++, HD-Rec, MacroWave, Sweeper, Samplemanager, ArTKanoid, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ImageConverter, ScreenCam, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Answer - Quote - Direct link - ] |
2014-02-04, 14:46 h Holger Posts: 8116 User |
Zitat:Kein Wunder, dass das nicht besonders gut funktioniert hat. Ich hätte ja 68ktoPPC probiert Zitat:Warum sollte das so sein? Zitat:Muss er ja gar nicht. Wenn die Übersetzung 68k→PPC von einem JIT on-the-fly gestemmt werden kann, sollte es wohl auch möglich sein, das ganze offline auf Assembler-Basis zu machen. Die Frage ist nur, wozu. Der JIT macht doch seine Arbeit ganz gut, so weit ich weiß. -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2014-02-04, 15:04 h Thore Posts: 2266 User |
Die Größe vom Binary sagt gar nichts über die Geschwindigkeit aus, der Algorithmus, Anzahl Takte und Taktung ist entscheidend Und ob ein Binary größer oder kleiner wird hat viele Faktoren. Der JIT ist sicher gut, und da schon schneller als ein echter 680x0 Prozessor. Daher ist eine PPC Umsetzung nicht _nötig_ auch wenn sie einen Tick schneller wäre. Und ja, wenn ein JIT die Umsetzung kann, dann kann auch ein offline compiler das gleiche, allerdings mit Abstriche (Offset-Anpassungen, Selbstmodifizierten Code erkennen etc pp, wo ein JIT einfach den Block neu compiliert...) Eine zweite Recompiliermöglichkeit ist Bin-Src->Src-Bin, also ein 4 Wege Recompiler. Von 68k-code nach 68k-Asm-Text, dann nach ppc-Asm-Text und diesen dann wieder assemblieren. Das mag erst doof klingen, aber auf dem zweiten Blick merkt man, daß hier die komplexen Offset-Berechnungen entfallen, wenn mit Labels gearbeitet wird. Bisschen OT aber in dem Zusammenhang auch interessant was MAME mit verschiedenen Prozessortypen macht. Es generiert einen eigenen Opcode und dieser wird dann interpretiert. So bleibt der Interpreter stets gleich, wobei nur der Programmcode nach (sie nennen es) UML Code konvertiert wird. [ - Answer - Quote - Direct link - ] |
2014-02-04, 17:01 h inq Posts: 445 User |
Zitat: Weil BB2 bei der Kompilierung immer die jeweilige Befehlsbibliothek an das EXE linkt, auch wenn man nur einige wenige Befehle daraus braucht. Beispiel: ich benutze (aus welchen Gründen auch immer) die Funktion Chr$(), dann wird dafür die ganze StringFunc.lib dazugelinkt. Beim neuerlichen Assemblieren würdest du die ganzen toten Sunbroutinen aber sicher rausoptimieren, die Einsprungoffsets in die notwendigen sind ja dann schon drin. Ebenso Strukturen/Data-Bereiche, die für die benutzten Funktionen nicht notwendig wären. Beispiel2: Bild: http://imageshack.com/a/img577/4131/5awo.png hello world in BB2: (ohne Assembler) code:Für "Print" wird die printlib.obj gelinkt.;hello world 1 text$="Hello World!" Print text$ End code:Für "PutStr_" werden nur die LVOs/Structuren für die ROM-Library (DOS o.ä.) gelinkt.;hello world 2 text$="Hello World!" PutStr_ &text$ End [ Dieser Beitrag wurde von inq am 04.02.2014 um 17:15 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2014-02-04, 18:30 h Blackbird Posts: 634 User |
@inq: Das ist bei BB2 der Fall, bei Ab2/3 werden die nicht benötigten/unbenutzten Befehle per Functionsoptimizer "wegoptimiert" -- regards Blackbird [ - Answer - Quote - Direct link - ] |
2014-02-04, 18:49 h inq Posts: 445 User |
Zitat: Öhm, nein! ? Bild: http://imageshack.com/a/img208/492/8aai.png Die Falschfarben sind nicht meine Schuld! Ich habe natürlich "kleinstes .... exec" usw. und make smallest Code und ohne debugger... Probier mal selbst. -- Config: A1200/30/50/FPU/SCSI/64MB, WinUAE/40/xx/xxMB, EUAE/40/25/xxMB, CDTV, CD32/SX32MK2/HD - AOS3.5 [ Dieser Beitrag wurde von inq am 04.02.2014 um 18:50 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2014-02-04, 19:03 h Blackbird Posts: 634 User |
@inq: Welche Version ist das ? Das exe wurde mehrmals compiliert ? Schickes flottes Lila Edit: Jo, bekomme die selbe Größe beim Exe mit Ab3 3.6 (6,928kb) -- regards Blackbird [ Dieser Beitrag wurde von Blackbird am 04.02.2014 um 19:09 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2014-02-04, 20:24 h inq Posts: 445 User |
Hier das helloworld2 mal als disassembliert:code:; IRA V2.07 (31.08.13) (c)1993-95 Tim Ruehsen, (c)2009-2012 Frank Wille ABSEXECBASE EQU $4 SECTION S_0,CODE SECSTRT_0: JSR LAB_0002 ;000: 4eb90000006e NOP ;006: 4e71 MOVEA.L -32756(A5),A3 ;008: 266d800c MOVEA.L #LAB_002C,A0 ;00c: 207c000003a4 MOVE.L (A0)+,-(A7) ;012: 2f18 JSR LAB_0007 ;014: 4eb9000000fc CLR.B (A3)+ ;01a: 421b MOVE.L -32756(A5),D0 ;01c: 202d800c MOVEA.L D0,A3 ;020: 2640 LEA -32764(A5),A2 ;022: 45ed8004 MOVEA.L -32760(A5),A6 ;026: 2c6d8008 JSR LAB_001B ;02a: 4eb9000002c2 MOVEA.L -32764(A5),A2 ;030: 246d8004 MOVE.L A2,D0 ;034: 200a MOVE.L D0,-(A7) ;036: 2f00 MOVE.L (A7)+,D1 ;038: 221f MOVEA.L -32752(A5),A6 ;03a: 2c6d8010 JSR -948(A6) ;03e: 4eaefc4c ;hier ist PutStr_ JSR LAB_002B ;042: 4eb900000392 LAB_0000: JMP LAB_0001 ;048: 4ef90000004e LAB_0001: DC.L $226d8010 ;04e DC.W $4eb9 DC.L LAB_0026 ;054: 00000360 DC.W $4eb9 ;058 DC.L LAB_000F ;05a: 00000162 DC.L $203c0000,$00184eb9 ;05e DC.L LAB_0005 ;066: 000000de DC.L $70004e75 ;06a LAB_0002: MOVE.L #$00000018,D0 ;06e: 203c00000018 JSR LAB_0003 ;074: 4eb9000000b4 MOVE.L D0,-32768(A5) ;07a: 2b408000 JSR LAB_000E ;07e: 4eb90000014a MOVE.L D0,-32760(A5) ;084: 2b408008 MOVE.L #$00002800,D0 ;088: 203c00002800 JSR LAB_0006 ;08e: 4eb9000000f2 MOVE.L D0,-32756(A5) ;094: 2b40800c MOVE.L #LAB_0000,D0 ;098: 203c00000048 JSR LAB_002A ;09e: 4eb90000037e MOVE.L D0,-32748(A5) ;0a4: 2b408014 JSR LAB_0024 ;0a8: 4eb90000034a MOVE.L D0,-32752(A5) ;0ae: 2b408010 RTS ;0b2: 4e75 LAB_0003: MOVE.L A0,-(A7) ;0b4: 2f08 MOVE.L #$00010001,D1 ;0b6: 223c00010001 MOVEA.L ABSEXECBASE,A6 ;0bc: 2c7900000004 JSR -198(A6) ;0c2: 4eaeff3a TST.L D0 ;0c6: 4a80 BEQ.W LAB_0004 ;0c8: 6700000e MOVEA.L D0,A5 ;0cc: 2a40 SUBA.W #$8000,A5 ;0ce: 9afc8000 MOVE.L A5,D0 ;0d2: 200d MOVEA.L (A7)+,A0 ;0d4: 205f RTS ;0d6: 4e75 LAB_0004: LEA 12(A7),A7 ;0d8: 4fef000c RTS ;0dc: 4e75 LAB_0005: DC.L $224dd2fc,$80002c79,$00000004,$4eeeff2e ;0de DC.L $70004e75 LAB_0006: MOVEQ #1,D1 ;0f2: 7201 JSR LAB_0013 ;0f4: 4eb900000190 RTS ;0fa: 4e75 LAB_0007: MOVEM.L D0-D1,-(A7) ;0fc: 48e7c000 MOVE.L 12(A7),D0 ;100: 202f000c CMPI.L #$00000008,D0 ;104: 0c8000000008 BCS.W LAB_0009 ;10a: 65000020 MOVE.L D0,D1 ;10e: 2200 LSR.L #3,D1 ;110: e689 LAB_0008: MOVE.B (A0)+,(A3)+ ;112: 16d8 MOVE.B (A0)+,(A3)+ ;114: 16d8 MOVE.B (A0)+,(A3)+ ;116: 16d8 MOVE.B (A0)+,(A3)+ ;118: 16d8 MOVE.B (A0)+,(A3)+ ;11a: 16d8 MOVE.B (A0)+,(A3)+ ;11c: 16d8 MOVE.B (A0)+,(A3)+ ;11e: 16d8 MOVE.B (A0)+,(A3)+ ;120: 16d8 SUBQ.L #1,D1 ;122: 5381 BNE.W LAB_0008 ;124: 6600ffec AND.W #$0007,D0 ;128: c07c0007 LAB_0009: SUBQ.W #1,D0 ;12c: 5340 BMI.W LAB_000B ;12e: 6b000008 LAB_000A: MOVE.B (A0)+,(A3)+ ;132: 16d8 DBF D0,LAB_000A ;134: 51c8fffc LAB_000B: CLR.B (A3) ;138: 4213 MOVEM.L (A7)+,D0-D1 ;13a: 4cdf0003 RTS ;13e: 4e75 DC.L $70004e75 ;140 LAB_000C: DS.L 1 ;144 LAB_000D: DS.W 1 ;148 LAB_000E: CLR.L LAB_000C ;14a: 42b900000144 BSR.W LAB_0015 ;150: 610000f2 MOVE.L #LAB_0010,D0 ;154: 203c0000016c CLR.W LAB_000D ;15a: 427900000148 RTS ;160: 4e75 LAB_000F: BSR.W LAB_0016 ;162: 6100010e BNE.W LAB_000F ;166: 6600fffa RTS ;16a: 4e75 LAB_0010: DC.L $60000056,$60000086,$6000001a,$60000030 ;16c LAB_0011: TST.L (A0) ;17c: 4a90 BEQ.W LAB_0012 ;17e: 67000008 MOVEA.L (A0),A0 ;182: 2050 BRA.W LAB_0011 ;184: 6000fff6 LAB_0012: MOVE.L A0,LAB_000C ;188: 23c800000144 RTS ;18e: 4e75 LAB_0013: MOVE.L A0,-(A7) ;190: 2f08 MOVEA.L LAB_000C(PC),A0 ;192: 207affb0 MOVE.L A0,-(A7) ;196: 2f08 BSR.W LAB_0011 ;198: 6100ffe2 BSR.W LAB_0014 ;19c: 61000026 MOVE.L (A7)+,LAB_000C ;1a0: 23df00000144 MOVEA.L (A7)+,A0 ;1a6: 205f RTS ;1a8: 4e75 DC.L $2f08207a,$ff962f08,$6100ffc8,$61000040 ;1aa DC.W $23df DC.L LAB_000C ;1bc: 00000144 DC.L $205f4e75 ;1c0 LAB_0014: MOVEM.L A0-A1/A6,-(A7) ;1c4: 48e700c2 ADDQ.L #8,D0 ;1c8: 5080 MOVE.L D0,-(A7) ;1ca: 2f00 MOVEA.L ABSEXECBASE,A6 ;1cc: 2c7900000004 JSR -198(A6) ;1d2: 4eaeff3a TST.L D0 ;1d6: 4a80 BEQ.W LAB_001A ;1d8: 670000dc MOVEA.L D0,A0 ;1dc: 2040 MOVEA.L LAB_000C(PC),A1 ;1de: 227aff64 MOVE.L 4(A1),(A0) ;1e2: 20a90004 MOVE.L A0,4(A1) ;1e6: 23480004 MOVE.L (A7)+,4(A0) ;1ea: 215f0004 ADDQ.W #8,A0 ;1ee: 5048 MOVE.L A0,D0 ;1f0: 2008 MOVEM.L (A7)+,A0-A1/A6 ;1f2: 4cdf4300 RTS ;1f6: 4e75 DC.L $48e74082,$223aff46,$6700001e,$51492041 ;1f8 DC.L $5848b3d0,$66000018,$20912029,$00042c79 DC.L $00000004,$4eaeff2e,$4cdf4102,$4e752210 DC.L $20416600,$ffde323a,$ff186600,$ffec4679 DC.L LAB_000D ;238: 00000148 DC.W $203c ;23c DC.L LAB_001C+3 ;23e: 000002d1 DC.W $4e40 ;242 LAB_0015: MOVEM.L D0-D1/A0-A1/A6,-(A7) ;244: 48e7c0c2 MOVEQ #8,D0 ;248: 7008 MOVEQ #1,D1 ;24a: 7201 MOVEA.L ABSEXECBASE,A6 ;24c: 2c7900000004 JSR -198(A6) ;252: 4eaeff3a TST.L D0 ;256: 4a80 BEQ.W LAB_001A ;258: 6700005c MOVEA.L D0,A0 ;25c: 2040 MOVE.L LAB_000C(PC),(A0) ;25e: 20bafee4 MOVE.L A0,LAB_000C ;262: 23c800000144 CLR.L 4(A0) ;268: 42a80004 MOVEM.L (A7)+,D0-D1/A0-A1/A6 ;26c: 4cdf4303 RTS ;270: 4e75 LAB_0016: MOVEM.L D0-D1/A0-A2/A6,-(A7) ;272: 48e7c0e2 MOVEA.L ABSEXECBASE,A6 ;276: 2c7900000004 MOVE.L LAB_000C(PC),D0 ;27c: 203afec6 BEQ.W LAB_0019 ;280: 6700002e MOVEA.L D0,A1 ;284: 2240 MOVE.L (A1),LAB_000C ;286: 23d100000144 MOVEA.L 4(A1),A2 ;28c: 24690004 MOVEQ #8,D0 ;290: 7008 JSR -210(A6) ;292: 4eaeff2e LAB_0017: CMPA.W #$0000,A2 ;296: b4fc0000 BEQ.W LAB_0018 ;29a: 67000012 MOVEA.L A2,A1 ;29e: 224a MOVE.L 4(A2),D0 ;2a0: 202a0004 MOVEA.L (A2),A2 ;2a4: 2452 JSR -210(A6) ;2a6: 4eaeff2e BRA.W LAB_0017 ;2aa: 6000ffea LAB_0018: MOVEQ #-1,D0 ;2ae: 70ff LAB_0019: MOVEM.L (A7)+,D0-D1/A0-A2/A6 ;2b0: 4cdf4703 RTS ;2b4: 4e75 LAB_001A: BSR.W LAB_000F ;2b6: 6100feaa MOVE.L #LAB_001B,D0 ;2ba: 203c000002c2 TRAP #0 ;2c0: 4e40 LAB_001B: ADDQ.W #8,A6 ;2c2: 504e MOVE.L D1,-(A7) ;2c4: 2f01 MOVE.L (A2),D0 ;2c6: 2012 BEQ.W LAB_001E ;2c8: 67000026 MOVEA.L D0,A1 ;2cc: 2240 LAB_001C: MOVE.L 8(A7),D0 ;2ce: 202f0008 CMP.L -8(A1),D0 ;2d2: b0a9fff8 BHI.W LAB_001D ;2d6: 6200000e MOVE.L D0,-4(A1) ;2da: 2340fffc BEQ.W LAB_0023 ;2de: 6700005c BRA.W LAB_001F ;2e2: 60000020 LAB_001D: MOVEQ #9,D0 ;2e6: 7009 SUBQ.W #8,A1 ;2e8: 5149 ADD.L (A1),D0 ;2ea: d091 JSR 4(A6) ;2ec: 4eae0004 LAB_001E: MOVEQ #9,D0 ;2f0: 7009 ADD.L 8(A7),D0 ;2f2: d0af0008 MOVEQ #1,D1 ;2f6: 7201 JSR (A6) ;2f8: 4e96 MOVEA.L D0,A1 ;2fa: 2240 MOVE.L 8(A7),(A1) ;2fc: 22af0008 MOVE.L (A1)+,(A1)+ ;300: 22d9 MOVE.L A1,(A2) ;302: 2489 LAB_001F: MOVE.L 8(A7),D0 ;304: 202f0008 CMPI.L #$00000008,D0 ;308: 0c8000000008 BCS.W LAB_0021 ;30e: 65000020 MOVE.L D0,D1 ;312: 2200 LSR.L #3,D1 ;314: e689 LAB_0020: MOVE.B (A3)+,(A1)+ ;316: 12db MOVE.B (A3)+,(A1)+ ;318: 12db MOVE.B (A3)+,(A1)+ ;31a: 12db MOVE.B (A3)+,(A1)+ ;31c: 12db MOVE.B (A3)+,(A1)+ ;31e: 12db MOVE.B (A3)+,(A1)+ ;320: 12db MOVE.B (A3)+,(A1)+ ;322: 12db MOVE.B (A3)+,(A1)+ ;324: 12db SUBQ.L #1,D1 ;326: 5381 BNE.W LAB_0020 ;328: 6600ffec AND.W #$0007,D0 ;32c: c07c0007 LAB_0021: SUBQ.W #1,D0 ;330: 5340 BMI.W LAB_0023 ;332: 6b000008 LAB_0022: MOVE.B (A3)+,(A1)+ ;336: 12db DBF D0,LAB_0022 ;338: 51c8fffc LAB_0023: CLR.B (A1) ;33c: 4211 MOVE.L (A7)+,D1 ;33e: 221f MOVE.L (A7)+,(A7) ;340: 2e9f RTS ;342: 4e75 DC.L $70004e75 ;344 DS.W 1 LAB_0024: MOVEA.L ABSEXECBASE.W,A6 ;34a: 2c780004 LAB_0025: LEA LAB_0027(PC),A1 ;34e: 43fa0018 MOVEQ #0,D0 ;352: 7000 JSR -552(A6) ;354: 4eaefdd8 TST.L D0 ;358: 4a80 BEQ.W LAB_0025+2 ;35a: 6700fff4 RTS ;35e: 4e75 LAB_0026: DC.L $2c780004,$4eeefe62 ;360 LAB_0027: ;368 ;DC.B $64,$6f,$73,$2e,$6c,$69,$62,$72,$61,$72,$79,$00,$00,$00 DC.B "dos.library",0,0,0 LAB_0028: DS.L 1 ;376 LAB_0029: DS.L 1 ;37a LAB_002A: MOVE.L D0,LAB_0028 ;37e: 23c000000376 MOVE.L A7,LAB_0029 ;384: 23cf0000037a MOVE.L #LAB_002B,D0 ;38a: 203c00000392 RTS ;390: 4e75 LAB_002B: MOVEA.L LAB_0029(PC),A7 ;392: 2e7affe6 ADDQ.W #8,A7 ;396: 504f MOVEA.L LAB_0028(PC),A0 ;398: 207affdc JMP (A0) ;39c: 4ed0 DC.L $70004e75 ;39e DC.W $0022 LAB_002C: DC.L $0000000c,$48656c6c,$6f20576f,$726c6421 ;3a4 ; >Hell o Wo rld! END *Edit2: Bullsh*t [ Dieser Beitrag wurde von inq am 04.02.2014 um 20:31 Uhr geändert. ] [ Dieser Beitrag wurde von inq am 04.02.2014 um 22:44 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2014-02-04, 20:48 h inq Posts: 445 User |
mit ein paar kleinen Änderungen kompiliert das schon mal unter BB2. Allerdings stoppt der Debugger hart bei Label_0025 . Das ist ja wohl "Lea dosname(pc)... openlibrary... hm. mal schauen *Edit: gefixt. Jetzt bekomme ich einen Stop beim ersten Allocmem_ Aufruf (18 Bytes). Bild: http://imageshack.com/a/img811/2167/ou62.png [ Dieser Beitrag wurde von inq am 04.02.2014 um 21:58 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2014-02-04, 22:09 h Thore Posts: 2266 User |
Ist ABSEXECBASE definiert? Normal ist das die Adresse $4. Edit: Ach ja da oben ist ja der Source. Okay ist definiert [ Dieser Beitrag wurde von Thore am 04.02.2014 um 22:10 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2014-02-04, 22:14 h inq Posts: 445 User |
Im Registerwindow vom Debugger siehst du bei a6 auch $4 drinne stehen. bytes angefordert sind $18 (d0). was ist eigentlich normalerweise in a0 beim nach Programmstart? Weil er das gleich auf den stack schiebt. Das ist jetzt natürlich doppelt seltsam, weil Blitz2 jetzt seinen eigenen Startup-Code nochmal draufpappt... [ Dieser Beitrag wurde von inq am 04.02.2014 um 22:48 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2014-02-05, 01:09 h Der_Wanderer Posts: 1229 User |
Zitat:Um etwas Licht ins Dunkel zu bringen: Nein, nur Funktionen werden wegoptimiert, also nicht benutzter Basic Code. BlitzLibs werden nach wie vor im ganzen dazugelinked. Das Hello World mit OS Funktionen ist kleiner, weil das lediglich Stubs sind für die OS Funktionen, ohne zusätzliche Funktionalität. Wenn man so coded braucht man aber kein Basic ;-) Wenn man die PrintLib von Basic dazu linkt, ist das logischerweise größer. Ich glaube aber nicht, dass ein Disassemlber das wegoptimieren kann. Sobald Addressen berechnet werden, weis ja niemand ob der Code erreichbar ist oder nicht. Das kann man eigentlich nur in Hochspreachen sicher wissen. Und zu guter letzt, wen juckt das eigentlich? War die Frage nicht nach einem Decompiler weil der Source verloren gegangen war? Wie gesagt, diese Frage kann man mit "Nein, das geht nicht und wird auch nicht (zufriedenstellend) gehen." beantworten. -- -- Author of NTUI, AIDE, A/A++, HD-Rec, MacroWave, Sweeper, Samplemanager, ArTKanoid, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ImageConverter, ScreenCam, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ Dieser Beitrag wurde von Der_Wanderer am 05.02.2014 um 01:17 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2014-02-05, 17:09 h inq Posts: 445 User |
Zitat: Naja, aber man kann stundenlang philosophieren oder sich das Chaos mal am simpelsten Programm, das man sich vorstellen kann, praktisch ausprobieren. Wie wir erfahren haben, ist der Init/Finit-Code von BB2 offenbar deutlich größer, als die eigentlich darzustellende Funktion, im o.g. Beispiel. Damit ist zumindest klar, daß ein mittelgroßes Programm/Spiel ungleich mehr Aufwand erfordert. Da kann man es dann besser gleich neuschreiben. Gruß [ - Answer - Quote - Direct link - ] |
2014-02-05, 20:43 h Holger Posts: 8116 User |
Zitat:Würde ich das? Dazu müsste ich ja erst mal den Assembler-Code durchforsten und unbenutzte Funktionen identifizieren. Deine Aussage „Allerdings wäre ein aus dem ASM neu assembliertes Exe wohl deutlich kleiner als das Original.“ erweckt dagegen den Eindruck als würde das automatisch passieren, nur weil ich disassembliert und wieder assembliert habe. -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2014-02-05, 20:47 h Holger Posts: 8116 User |
Zitat:Natürlich nicht. Ist ja schließlich nicht dessen Aufgabe. Weder Assembler noch Disassembler werden das tun. Dazu bräuchte es entweder ein eigenes Werkzeug oder Handarbeit. -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2014-02-06, 02:43 h Der_Wanderer Posts: 1229 User |
Naja, wie gesagt kann der Assembler oder ein anderes Tool gar nicht wissen welche Code Stellen unbenutzt sind, es sei denn es gibt nur konstante Sprünge und keine (Sprung-)Adresse wird an externe Libraries rausgegeben. Ist auch nicht notwendig. Natürlich wird durch das Dazulinken einer ganzen BlitzLib ein Mini-Hello World verhältnismäßig groß gegenüber ASM. Aber das Sinn beim Optimieren ist nicht ein Mini Program noch kleiner zu machen, sondern ein großes Program klein zu halten. Sobald das Program komplexer wird sinkt der Anteil des BlitzLib Codes relativ zum eigenen Code, und man wird vermutlich auch mehr Funktionen als nur "Print" benutzen. Da die BlitzLibs relativ fein granular sind, ist das vertretbar, denke ich. Es wird ja nicht eine Mega Runtime dazu gelinked, sondern diese ist in ca. 250 kleine Module zerteilt, von denen selectiv gelinkt wird. -- -- Author of NTUI, AIDE, A/A++, HD-Rec, MacroWave, Sweeper, Samplemanager, ArTKanoid, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ImageConverter, ScreenCam, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Answer - Quote - Direct link - ] |
-1- 2 | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > BlitzBasic Decompiler? | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |