Autor Thema: DATA Block disassemblieren  (Gelesen 513 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline Thor

  • Schreibgeschützter
  • *
  • Beiträge: 4
  • Liked: 2
  • Karma: +1/-0
DATA Block disassemblieren
« am: 01. Mai 2018, 11:27:38 »
Hallo,
um Maschinencode in einem Basic Programm zu verwenden, kann der Inhalt als Hexacode direkt in den RAM gepoket werden. Das Verfahren wird im Buch "Das Maschinensprachebuch zum CPC" von Dullin/Strassenburg erläutert.

Anscheinend kann man das auch anders machen. In einer englischen Zeitschrift wird ein Programm zum Anzeigen von Fraktalen vorgestellt. Dort ist der DATA Block nicht als kommagetrennter Hexacode, sondern als reiner Buchstaben-Spaghetticode angegeben.

Wie kann ich den assemblierten Code wieder aus dem RAM auslesen? JavaCPC hat unter 'Hilfe' den 'Debugger'. Aber ich bin mir nicht sicher, wie ich den gepoketen Code dort herauslesen kann.

Sorry für die blöde Frage, bin noch recht neu in der Materie


Offline HAL6128

  • Schreibgeschützter
  • *
  • Beiträge: 48
  • Liked: 22
  • Karma: +11/-0
Re: DATA Block disassemblieren
« Antwort #1 am: 01. Mai 2018, 23:32:44 »
Jedes Zeichen entspricht einen einfachen ASCII-Code, der als Nummer / Zahl in den RAM gepokt wird. Einfach mal eintippen, in den RAM laden und mit Maxam, WinApe oder natürlich den Debugger im JavaCPC (die entsprechende Speicherstelle) zu disassemblieren. Bei der Größe sollte es kein allzu großes Problem sein, das Programm zu lesen.

Offline HAL6128

  • Schreibgeschützter
  • *
  • Beiträge: 48
  • Liked: 22
  • Karma: +11/-0
Re: DATA Block disassemblieren
« Antwort #2 am: 01. Mai 2018, 23:41:42 »
...irgendwie scheint das Programm nicht vollständig zu sein, es bricht mit DATA exhausted in 1390 ab.

Offline Thor

  • Schreibgeschützter
  • *
  • Beiträge: 4
  • Liked: 2
  • Karma: +1/-0
Re: DATA Block disassemblieren
« Antwort #3 am: 02. Mai 2018, 06:05:55 »
Hallo, habe das komplette Programm angehängt. Die erste Version war schon auf das Entscheidende reduziert. Aber das volle Programm sollte auf jeden Fall laufen.

Im RAM sind die Assemblerbefehle in Hexazahlen codiert. So wird zum Beispiel aus:
LD A,10
LD (&B289),A
RET
==> DATA &3E,10,&32,&89,&C9

Im Gegensatz dazu hat eine DATA Zeile in dem anderen Programm den Aufbau:
==> DATA BvX>C;CI]JvH>u=>CSCI[C[\=EKBq

Wie wird dieser ASCII Code nun in Hexacode umgewandelt? Ein ASCII Zeichen hat 8 Bit. Die ersten 32 Zeichen sind Steuerzeichen und lassen sich nicht als Buchstabe wiedergeben. Der Bereich 127 bis 255 sind Symbole, die in dem Data Block nicht auftauchen. Sind also 96 oder 16x3 Kombinationsmöglichkeiten. Man kann also 3 mal jeweils eine Hexazahl (1,2,3,4,5,6,7,8,9,10,A,B,C,D,E,F) in einem Buchstaben verschlüsseln. Dabei ist mir noch nicht klar, wie die 0 (Null) verschlüsselt wird und warum in dem ganzen Block keine einzige Zahl vorkommt (Zufall?).

Offline HAL6128

  • Schreibgeschützter
  • *
  • Beiträge: 48
  • Liked: 22
  • Karma: +11/-0
Re: DATA Block disassemblieren
« Antwort #4 am: 02. Mai 2018, 09:38:09 »
Da hat sich der Autor ein Verschlüsselungsverfahren ausgedacht. Er liest die komplette Zeile als String ein, unterteilt diese in jeweils Dreier-Blöcke und rechnet die einzelnen Buchstaben nach einem festen Algorithmus für LSB und MSB um. Zumindest scheint das so auf den ersten Blick so.

Offline almasys

  • CPC 464
  • **
  • Beiträge: 67
  • Liked: 23
  • Karma: +13/-0
Re: DATA Block disassemblieren
« Antwort #5 am: 02. Mai 2018, 18:50:05 »
Wenn Du das Programm startest wird der Maschinencode ab &8000 im Speicher abgelegt und da kannst Du es einsehen.

Viel Erfolg,
Mr. AMS

Offline TFM

  • Administrator
  • CPC 6128+
  • *****
  • Beiträge: 2330
  • Liked: 501
  • Karma: +24/-0
  • Geschlecht: Männlich
  • FutureSoft und CPC - Ein starkes Team!
    • FutureOS
Re: DATA Block disassemblieren
« Antwort #6 am: 03. Mai 2018, 17:44:10 »
Am besten mit MAXAM mal reinschauen :-)

Maxam gibt's auch auf Diskette, falls keine ROM Box zur Hand ist.
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak

Offline Thor

  • Schreibgeschützter
  • *
  • Beiträge: 4
  • Liked: 2
  • Karma: +1/-0
Re: DATA Block disassemblieren
« Antwort #7 am: 03. Mai 2018, 21:22:48 »
Da hat sich der Autor ein Verschlüsselungsverfahren ausgedacht. Er liest die komplette Zeile als String ein, unterteilt diese in jeweils Dreier-Blöcke

Die Mnemonics werden üblicherweise in 2 Nibble bzw. 2 Hexazahlen p0 und p1 umgewandelt und dann gepoket. Deren Binärdarstellung wird hier in 3 Teile c(1), c(2) und c(3) aufgeteilt und als entsprechendes ASCII-Zeichen interpretiert.

            p0                          p1
  _ _ _ _/ \_ _ _ _     _ _ _ _ /\ _ _ _
/                         \  /                        \
1 1 1 1       1 1 1 1   1 1    1 1 1 1  1 1
  c(1)        \_____  ____/         c(3)
                          \/
                         c(2)

Wobei c(1) ASCII 59-74 (16 Zeichen) und c(2) und c(3) ASCII 59-122 (63 Zeichen) entsprechen.

Dadurch werden p0 und p1 mit insgesamt 4 Stellen (+ einem Komma zur Trennung) in nur 3 Buchstaben (ohne ein notwendiges Trennungszeichen)  umgewandelt. Das ist dann wohl eine Art primitiver Komprimierung von Maschinencode!