amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > BlitzBasic Decompiler? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- 2 [ - Beitrag schreiben - ]

31.01.2014, 15:34 Uhr

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 ;)

[ - Antworten - Zitieren - Direktlink - ]

31.01.2014, 16:24 Uhr

Blackbird
Posts: 634
Nutzer
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

[ - Antworten - Zitieren - Direktlink - ]

31.01.2014, 20:17 Uhr

huepper
Posts: 481
Nutzer
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 ?

[ - Antworten - Zitieren - Direktlink - ]

31.01.2014, 20:29 Uhr

inq
Posts: 445
Nutzer
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. :D
--
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. ]

[ - Antworten - Zitieren - Direktlink - ]

31.01.2014, 21:30 Uhr

Blackbird
Posts: 634
Nutzer
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


[ - Antworten - Zitieren - Direktlink - ]

31.01.2014, 21:57 Uhr

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...

[ - Antworten - Zitieren - Direktlink - ]

31.01.2014, 22:05 Uhr

Der_Wanderer
Posts: 1229
Nutzer
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

[ - Antworten - Zitieren - Direktlink - ]

31.01.2014, 23:51 Uhr

inq
Posts: 445
Nutzer
Zitat:
Original von Blackbird:
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...


Was für ein überflüssiger Ansatz, also mal ehrlich. Ich würde ja mit'nem 86k Assembler beginnen.....

[ - Antworten - Zitieren - Direktlink - ]

31.01.2014, 23:59 Uhr

inq
Posts: 445
Nutzer
Zitat:
Original von cgutjahr:
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.

(Noch) nicht für BB, nein.

Wenn es nur ein einfaches Spiel ist, kann man es doch auch neu schreiben, oder?
Zitat:
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...
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.


[ - Antworten - Zitieren - Direktlink - ]

01.02.2014, 00:26 Uhr

Der_Wanderer
Posts: 1229
Nutzer
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. ]

[ - Antworten - Zitieren - Direktlink - ]

01.02.2014, 08:26 Uhr

Blackbird
Posts: 634
Nutzer
@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


[ - Antworten - Zitieren - Direktlink - ]

01.02.2014, 11:39 Uhr

inq
Posts: 445
Nutzer
Zitat:
Original von Blackbird:
@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


Na, dahabe ich mal einen Zahlendreher, und schon versteht mich keiner mehr. :O 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.

[ - Antworten - Zitieren - Direktlink - ]

01.02.2014, 12:57 Uhr

_PAB_
Posts: 3016
Nutzer
@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...

[ - Antworten - Zitieren - Direktlink - ]

01.02.2014, 13:09 Uhr

Blackbird
Posts: 634
Nutzer
@inq:

Schon klar...wir wollten das eben mal ausprobieren. Die Idee hatte damals bernd undich hatte Zeit :D
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. ]

[ - Antworten - Zitieren - Direktlink - ]

01.02.2014, 19:50 Uhr

Der_Wanderer
Posts: 1229
Nutzer
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

[ - Antworten - Zitieren - Direktlink - ]

04.02.2014, 14:46 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Blackbird:
Den ASMsource hab ich dann versucht durch das PPCto68k von Coyote Flux zu zwängen um ppcasm zu bekommen...

Kein Wunder, dass das nicht besonders gut funktioniert hat. Ich hätte ja 68ktoPPC probiert ;)

Zitat:
Original von inq:
Allerdings wäre ein aus dem ASM neu assembliertes Exe wohl deutlich kleiner als das Original. :D

Warum sollte das so sein?

Zitat:
Original von Blackbird:
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...

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.

[ - Antworten - Zitieren - Direktlink - ]

04.02.2014, 15:04 Uhr

Thore
Posts: 2266
Nutzer
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.

[ - Antworten - Zitieren - Direktlink - ]

04.02.2014, 17:01 Uhr

inq
Posts: 445
Nutzer
Zitat:
Original von Holger:

Zitat:
Original von inq:
Allerdings wäre ein aus dem ASM neu assembliertes Exe wohl deutlich kleiner als das Original. :D

Warum sollte das so sein?

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:
;hello world 1
text$="Hello World!"
Print text$
End

Für "Print" wird die printlib.obj gelinkt.

code:
;hello world 2
text$="Hello World!"
PutStr_ &text$
End

Für "PutStr_" werden nur die LVOs/Structuren für die ROM-Library (DOS o.ä.) gelinkt.

[ Dieser Beitrag wurde von inq am 04.02.2014 um 17:15 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

04.02.2014, 18:30 Uhr

Blackbird
Posts: 634
Nutzer
@inq:

Das ist bei BB2 der Fall, bei Ab2/3 werden die nicht benötigten/unbenutzten Befehle per Functionsoptimizer "wegoptimiert"
--
regards
Blackbird


[ - Antworten - Zitieren - Direktlink - ]

04.02.2014, 18:49 Uhr

inq
Posts: 445
Nutzer
Zitat:
Original von Blackbird:
@inq:

Das ist bei BB2 der Fall, bei Ab2/3 werden die nicht benötigten/unbenutzten Befehle per Functionsoptimizer "wegoptimiert"
--
regards
Blackbird


Ö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. ]

[ - Antworten - Zitieren - Direktlink - ]

04.02.2014, 19:03 Uhr

Blackbird
Posts: 634
Nutzer
@inq:

Welche Version ist das ?

Das exe wurde mehrmals compiliert ?

Schickes flottes Lila I-) :D

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. ]

[ - Antworten - Zitieren - Direktlink - ]

04.02.2014, 20:24 Uhr

inq
Posts: 445
Nutzer
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. ]

[ - Antworten - Zitieren - Direktlink - ]

04.02.2014, 20:48 Uhr

inq
Posts: 445
Nutzer
mit ein paar kleinen Änderungen kompiliert das schon mal unter BB2. :D
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. ]

[ - Antworten - Zitieren - Direktlink - ]

04.02.2014, 22:09 Uhr

Thore
Posts: 2266
Nutzer
Ist ABSEXECBASE definiert? Normal ist das die Adresse $4.

Edit: Ach ja da oben ist ja der Source. Okay ist definiert :D


[ Dieser Beitrag wurde von Thore am 04.02.2014 um 22:10 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

04.02.2014, 22:14 Uhr

inq
Posts: 445
Nutzer
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... :rotate:



[ Dieser Beitrag wurde von inq am 04.02.2014 um 22:48 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

05.02.2014, 01:09 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Zitat:
Original von Blackbird:
@inq:

Das ist bei BB2 der Fall, bei Ab2/3 werden die nicht benötigten/unbenutzten Befehle per Functionsoptimizer "wegoptimiert"
--
regards
Blackbird

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. ]

[ - Antworten - Zitieren - Direktlink - ]

05.02.2014, 17:09 Uhr

inq
Posts: 445
Nutzer
Zitat:
Original von Der_Wanderer:

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.


Naja, aber man kann stundenlang philosophieren oder sich das Chaos mal am simpelsten Programm, das man sich vorstellen kann, praktisch ausprobieren. :O

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ß

[ - Antworten - Zitieren - Direktlink - ]

05.02.2014, 20:43 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von inq:
Beim neuerlichen Assemblieren würdest du die ganzen toten Sunbroutinen aber sicher rausoptimieren, …

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.

[ - Antworten - Zitieren - Direktlink - ]

05.02.2014, 20:47 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Der_Wanderer:
Ich glaube aber nicht, dass ein Disassemlber das wegoptimieren kann.

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.

[ - Antworten - Zitieren - Direktlink - ]

06.02.2014, 02:43 Uhr

Der_Wanderer
Posts: 1229
Nutzer
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

[ - Antworten - Zitieren - Direktlink - ]


-1- 2 [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > BlitzBasic Decompiler? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.