 

 

 

 

          Desert Drain - 68000er Disassembler fr Atari ST/STE 
          Version 1.4x  (August 1991 - Juli 1992) 
           
           
           
                                    Anleitung 
           
           
           
          Inhaltsverzeichnis: 
           
                 0. Generelles 
                 1. Sharewarevermerk 
                 2. Systemanforderungen 
                 3. Die Dateien 
                 4. Das Dateiensystem 
                 5. Quelle laden 
                 6. Optionen 
                 7. Disassembler 
                 8. Datas im Textsegment 
                 9. Symboltabelle 
                10. Trap-Benennungen 
                11. System-Info 
                12. Editor, Bearbeiten 
                13. Editor-Optionen 
                14. Hilfsdatei 
                15. Wie arbeite ich mit Desert Drain? 
           
           
           
           
          0. Generelles 
           
          Desert Drain wurde von mir frei entwickelt. Alle hnlich- 
          keiten mit anderen Programmen sind zufllig, oder liegen in 
          der Sache und sind deshalb unvermeidbar. 
           
          Ich bernehme keinerlei Gewhr dafr, da Desert Drain so 
          funktioniert, wie es im Folgenden beschrieben wird oder zu 
          erwarten wre. Die Benutzung ist auf eigene Gefahr. Ich hafte 
          nicht fr Schden, die bei der Benutzung des Programmes 
          auftreten. (Nein, das Programm enthlt natrlich keinen 
          Virus!) 
           
          Lattice C ist Warenzeichen von Lattice Inc., HiSoft und CCD. 
          TurboAss stammt von -soft. 
          GFA-Basic ist Warenzeichen der GFA Systemtechnik GmbH. 
           
           
           
           
 

 

 

 

          1. Shareware 
           
          Desert Drain 1.4 ist Shareware, d.h. das Programm und seine 
          Zusatzdateien drfen und sollen beliebig oft kopiert und 
          weitergegeben werden. Jeglicher kommerzieller Vertrieb, 
          auer auf Basis von PD-Vertrieben, ist untersagt. 
           
          Zum Austesten des Programmes habt Ihr 3 Wochen Zeit! Wer 
          danach Desert Drain 1.4x weiter benutzen mchte, mu die 
          Shareware-Gebhr von 25,- DM zahlen. Hierfr erhaltet Ihr 
          eine registrierte Version und ein spteres Update frei Haus. 
          Jedes weitere ist fr 10,- DM bei mir erhltlich. Als 
          Zahlungsmittel akzeptiere ich Bargeld oder Schecks. Schreibt 
          bitte an folgende Adresse: 
           
                         Volker Hemsen 
                         Gremskampstrae 3 
                         W-2427 Malente 
           
          So, jetzt habe ich ein dreiviertel Jahr an diesem Programm 
          herumgebastelt und hoffe, das alle Fehler beseitigt sind. Ich 
          mchte an dieser Stelle allen danken, die mir Fehler- 
          beschreibungen und Verbesserungsvorschlge geschickt haben, 
          und mich so dazu aufmunterten an dem Programm weiter- 
          zuschreiben: "Desert Drain ist wirklich gut, aber ..." - Ok, 
          vergessen wir das. Leute, macht weiter so! 
           
          'Desert Drain' heit bersetzt soviel wie 'wster Abflu',  
          'de Rinne' oder umgangssprachlich 'Wstentropfen'.  
          Ich habe diesen Namen zwar nur gewhlt, weil er gut klingt,  
          aber vielleicht baut ja jemand Metaphern zum Durcheinander  
          eines disassemblierten Programmes auf. Na ja, was soll's! 
           
           
           
           
          2. Systemanforderungen 
           
          Das Programm luft in jeder Auflsung mit mindestens 640 
          Pixel Bildbreite (mittlere und hohe ST-Auflsung). Testen 
          konnte ich es auf einem MEGA STE 4 mit TOS 2.05. Mit Turbo ST 
          und Quick ST 2.0 Demo luft es einwandfrei. Der freie 
          Speicher sollte nicht kleiner als 512 kB sein, aber je mehr 
          desto besser. 
           
           
           
           
 

 

 

 

          3. Die Dateien 
           
          fr den Disassembler: 
           - DS_DRAIN.PRG      Programmdatei 
           - DS_DRAIN.INF      abgespeicherte Einstellungen 
           - DS_DRAIN.RSC      Resourcedatei 
           - DS_HILFE.TXT      Hifstext mit Symbolnamen 
          zugehrige Textdateien: 
           - OPCODE.TXT        Textdateien mit Opcodes und Hintergrund- 
                               informationen fr Disassembler 
           - READ_140.TXT      dieser Text 
           - DATE_140.TXT      kurzes Update-Info 
          zustzliche Programme: 
           - IMG_MAKE.PRG      macht aus Bildern verschiedener Formate 
                               Resourcedateien mit Images 
           - STECACHE.PRG      steuert einige Sytemvariablen des 
                               MEGA STE, luft als  PRG,ACC und Auto- 
                               ordnerprogramm 
           - XBRAREAD.PRG      liest die XBRA-Kennungen einiger  
                               Systemvektoren, luft als PRG/ACC 
           - SOLITAIR.PRG      eine weitere Variante unter GEM 
          zustzliche Routinen: 
           - V_GTEXT           schnelle Textausgaberoutine fr GFA 
           - RCS2PTCH          Patchroutine fr das RCS2 von DR 
           - PROGDEF           UserDefineObjektTypes fr GFA-Basic 
           
           
           
           
          4. Das Dateiensystem 
           
          Nach dem Start von Desert Drain werden die Dateien DS_DRAIN. 
          INF, RSC und DS_HILFE.TXT gesucht. Sollten sie nicht im 
          aktuellen Ordner zu finden sein, wird die Environment- 
          Variable 'DS_DRAIN' gesucht, und dessen Wert als Pfad ver- 
          wendet. (z.B. 'DS_DRAIN=F:\DS_DRAIN\', nheres siehe Anlei- 
          tung zum TurboAss: SetEnv, ST-Magazin 6/90 oder ST-STE-TT- 
          Profibuch). Wenn dies fehlschlgt erhlt man die Mglichkeit 
          den Pfad fr die RSC-Datei festzulegen. 
           
          Die Hilfsdatei mu immer im selben Ordner wie das Programm 
          selbst stehen. Beim Abspeichern der Parameter in die INF- 
          Datei wird hier nur der Dateiname gespeichert. Der Pfad fr 
          die Quellparameter wird vollstndig gesichert. 
           
          Die Dateien mit den Extensionen INF, SYB, DBT und PAR 
          stellen eigene Formate dar, und knnen sich bei spteren 
          Versionen noch ndern. Wenn jemand den Aufbau wissen mchte, 
          so schreibe er mich bitte an. 
           
          Die Parameterdatei mit der Extension INF enthlt alle Para- 
          meter, die in den Dialogboxen 'Installation', 'Speicher-Ein- 
          teilung', 'Disassembler-Optionen', 'Editor-Optionen', 'GEM- 
          Traps', 'TOS-Traps', 'Suchen' und unter dem Mentitel 
          'Quelle' einstellbar sind. 
           
 

 

 

 

          Die Quellparameterdatei mit der Extension PAR enthlt alle 
          Optionen, die in den Dialogboxen 'Speicher-Einteilung', 
          'Disassembler-Optionen', 'GEM-Traps', 'TOS-Traps', 'Data- 
          bereiche im Textsegment', 'ersetzte Symbole', 'Suchen' und 
          unter dem Mentitel 'Quelle' einstellbar sind. Es kann also 
          zu berschneidungen kommen. 
           
           
           
           
          5. Quelle laden 
           
          5.1. Programmdatei laden 
          In der Fileselectbox kann man eine Programmdatei (PRG,APP, 
          GTP,TOS,TTP,ACC) auswhlen. Es werden folgende Segmente 
          erkannt und geladen: 
               - Programmheader 
                    - Segmentlngen 
                    - Fast-Load-Bit 
                    - Headerbits fr den TT 
               - TEXT-Segment 
               - DATA-Segment 
               - Symboltabelle 
               - Reloziertabelle 
          Es sollte sich unbedingt um eine Programmdatei mit dem 
          entsprechenden Header handeln, andernfalls drohen nette 
          kleine Abstrze. Wenn es im Quellparameterpfad gleichnamige 
          Datei/en mit den Extensionen "PAR" oder "DBT" und "SYB" gibt, 
          wird/werden diese entsprechend mitgeladen - aber dazu spter 
          mehr. 
           
          5.2. Programmteil laden 
          Arbeitet wie 'Programmdatei laden' (zumindest hoffe ich es - 
          war schwieriger als es aussieht), nur das man sich hier einen 
          Teil (Text und/oder Data) aussuchen und ein Programm so 
          zerlegen kann. Das BSS wird immer bersetzt. Ihr solltet 
          hierbei bedenken, da das sptere Zusammenfgen so gut wie 
          unmglich ist, da immer nur die Label gesetzt werden knnen, 
          zu denen im selben Programmteil verzweigt wird. 
           
          5.3. Routine laden 
          Die selektierte Datei wird vollstndig als TEXT geladen. 
          Sinnvoll ist dies z.B. bei GFA-Inline-Assembler und sonstigen 
          in Hochsprachen eingebauten Unterprogrammen ohne Header, 
          Symbol- und Reloziertabelle. Das Disassemblieren von Objekt- 
          dateien im DR- Format ist bisher noch nicht mglich. Wre 
          aber vielleicht ganz interessant! 
           
          5.4. RAM/ROM laden 
          Hier knnen die Adressen von Speicherbereichen aus dem RAM 
          oder ROM eingestellt werden. Sie werden als TEXT-Segment 
          weiterverwendet. Adressen von Betriebssystemroutinen erhlt 
          man bei SYS-Info. 
           
 

 

 

 

          5.5. Resource laden 
          Hiermit kann man RSC-Dateien als Data laden. Beim Disassem- 
          blieren werden smtliche Adressen durch Label ersetzt, sowie 
          die Headereintrge fr Segmentanfnge und -lngen variabel 
          eingerichtet. Dies dient dazu sie im Assembler zu erweitern 
          oder in Assembler/Pascal-Programme einzubinden. 
          Das Resource Construction Set von Digital Research erkennt 
          die Verkleinerung von RSC-Dateien nicht. Hierzu sind diese zu 
          disassemblieren, der Quellcode im TurboAss wieder einzuladen, 
          die Zeilen hinter der Tabelle mit den Trees abzutrennen (z.B. 
          durch Einfgen eines 'END') und das ganze als absoluten Code 
          mit Offset 0 abzuspeichern. Fertig. 
           
          5.6 Data laden 
          Es knnte ja mal das Problem entstehen, da man ein Bild oder 
          eine ASCII- Datei als Data einem Assemblerprogramm beifgen 
          mchte. 
           
           
           
           
          6. Disassembler-Optionen 
          Alle Einstellungen in der Dialogbox 'Optionen' mssen grund- 
          stzlich vor dem Disassemblieren vorgenommen werden!!! 
           
          6.1. ASCII 
          Hier lassen sich mit Radio-Buttons drei Formate auswhlen, 
          die die Tabulatorpositionen im spteren ASCII-Code bestimmen. 
               - Norm:   Leerzeichen zwischen linkem Rand und Befehl 
               - Spar:   Keine Leerzeichen zwischen linkem Rand und  
                         Befehl, es sei denn es steht ein Label am  
                         Zeilenanfang. 
               - Hyper.: Zwischen Label, Befehl, Operanden und Remark 
                         nur ein Leerzeichen 
          Alle drei Formen knnen von TurboAss gelesen werden. Wenn 
          man den Assemblercode mit einem normalen Editor weiter- 
          verarbeiten mchte, eignet sich nur das Normformat. Beim 
          Laden einer ASCII- Datei wird angenommen, da sie durch- 
          schnittlich mindestens 20 Zeichen pro Zeile lang ist, es sei 
          denn Ihr gebt bei Speicher-Einteilung die Anzahl der Zeilen 
          absolut an. 
           
          6.2. Tabulator 
          Hier lassen sich die Tabulatoren fr Befehl, Operanden und 
          Remark festlegen. 
           
          6.3. Symbole einsetzen 
          Mit dieser Option kann man eine Symboltabelle verschmhen. 
          Beim Neuladen wird sie nicht mitgeladen. Da Symbole nur 
          maximal 8 Zeichen lang sein drfen, Hochsprachen-Compiler 
          und Assembler jedoch lngere Label (z.B. Prozedur- und 
          Funktionsnamen) erlauben, welch Glck, kann es vorkommen da 
          sich Symbole gleichen, und ein spteres Weiterverarbeiten 
          schwierig wird. Vergit bitte nicht diese Option abzu- 
          schalten, wenn Ihr die Symboltabelle des Programmes in die 
          Tabelle mit den ersetzten/eigenen Symbolen bernommen habt! 
           
 

 

 

 

          6.4. Kommentar 
          Bei den Traps #1, (#2), #13 und #14 und Systemvariablen 
          wird ein Remark angefgt. siehe Editor, Disassembler und 
          Hilfsdatei. Leider rufen die Hochsprachen-Systeme die AES- 
          und VDI- Funktionen auf vllig verschiedene Art und Weise 
          auf, und verzweigen dabei auch noch sehr hufig, so da ein 
          Einfgen der Symbolnamen sehr schwierig ist. Hier mt Ihr 
          selbst etwas mithelfen. siehe Traps 
           
          6.5. Label in HEX 
          Die Label (Sprungadressen) werden als Hexadezimal oder 
          Dezimal-Zahlen geschrieben. z.B. T_100 in Hex entspricht 
          T_256 in Dez 
           
          6.6. Text 
          Mit dem 'Konstanten in HEX'-Button stellt Ihr die Zahlendar- 
          stellung fr Konstanten aus dem TEXT- Segment ein. Zustzlich 
          ist es noch mglich die Bereichsberprfung fr bytelange 
          Konstanten abzustellen. Einige Assembler erlauben z.B. ein 
          andi.b #$FFFF,d0. Aus Grnden der Codegleichheit mu Desert 
          Drain dies als Data-Segment melden! 
           
          6.7. Data 
          Hier kann mit vier Buttons und einem EDIT-Feld die Disassem- 
          blierung des DATA-Segments gesteuert werden. Es besteht die 
          Mglichkeit es als vollstndigen String, als String mit 
          Zeichen von 0 bis 31 als Zahl oder als Zahl in HEX oder DEZ 
          darzustellen. Zustzlich kann angegeben werden wie lang eine 
          Zeile werden darf. 
           
          6.8. BSS: mit Bereichsgre 
          Im aktivierten Zustand wird die Lnge der Bereiche als Remark 
          eingefgt. 
           
          6.9. Zeilen anfgen 
          Der Editor hat die Eigenart, keinen Curser zu besitzen. Wenn 
          eine Zeile direkt angesprochen werden soll, mu sie in der 
          ersten Zeile stehen. Dies hat den Nachteil, da man nicht an 
          die letzen Zeilen herankommt. Bei Aktivierung dieser Option 
          hngt der Disassembler noch einige leeren Zeilen an, sofern 
          das Zielarray gengend gro ist. 
           
           
           
           
          7. Disassember 
           
          7.1. Speicher-Einteilung 
          In der Dialogbox wird festgelegt, wie das String-Array 
          (Ziel) dimensioniert werden soll. Auerdem wird die ber- 
          setzungsgeschwindigkeit in Zeilen pro Minute, die Array- 
          Ausnutzung und der freie und maximale Speicherplatz (ab 
          Initialisierung) aufgefhrt. Die Gesamtlnge der Zeilen 
          entspricht der Lnge der spteren ASCII-Datei (incl. LF/CR). 
 

 

 

 

          Diese Optionen dienen zum Finden der maximalen Speicher- 
          ausnutzung bei lngeren Quellen oder kleineren Rechnern. Das 
          Disassemblieren geht umso schneller, je weniger Strings 
          vorhanden sind! Es kann zwischen zwei verschiedenen Modi 
          gewhlt werden: Anzahl der Zeilen relativ zu den Segment- 
          lngen oder absolut. 
           
          7.2. Label 
          Label, die nicht in der Symboltabelle enthalten sind, werden 
          selbst benannt: 'T_' steht fr 'zeigt ins Textsegment', 'D_' 
          fr Data, 'B_' fr BSS und 'A_' fr auerhalb. Danach folgt 
          eine Zahl mit der Offset-Adresse ab Programmanfang (Datei- 
          anfang+$1C). Wenn die Adresse negativ ist und auf keine 
          negative Systemvariable zutrifft, wird am Programmanfang ein 
          Label gesetzt und ab hier entsprechend adressiert. (z.B. 
          erster Befehl eines GFA-Basic-Compilates) 
           
          7.3. Opcodes 
          Smtliche im Programm verwendete Opcodes und Mnemoniks sind 
          in der Datei OPCODE.TXT aufgefhrt. 
           
          7.4. DC.W 
          Unbekannte Opcodes werden als 'dc.w' ausgegeben. Am Ende der 
          Zeile steht der Wert als ASCII. 
           
          7.5. XBRA 
          XBRA-Kennungen im Text-Segment werden als 'dc.l'... ent- 
          schlsselt. 
           
          7.6. Kommentare 
          Wenn eine wortlange effektive Adresse einer Systemvariable 
          aus der Hilfsdatei gleicht, wird deren Name als Remark 
          angefgt. Traps mit den Nummern #1 (gemdos), #13 (bios) und 
          #14 (xbios) knnen nur erkannt werden, wenn die Funktions- 
          nummer einige Zeilen zuvor mit 'move.w/.l #XX,?(sp)' oder 
          'pea' auf den Stack gelegt wird. Bei Trap #2 mu hier 'move. 
          ? #XX,D0' stehen, damit zwischen aes, vdi und gdos unter- 
          schieden werden kann. siehe Traps 
           
          7.7. DATA 
          Datas werden als 'dc.b' geschrieben. Ob String, Hex oder 
          Dez und wie lang jede Zeile sein darf, wird bei den 
          Disassembler-Optionen eingestellt. 
           
          7.8. BSS 
          Das Block-Storage-Segment wird je nach Lnge mit den 
          Direktiven 'ds.b', '.w' oder '.l' aufgefllt. Das Beifgen 
          der Bereichsgre soll die bersichtlichkeit erhhen. 
           
          7.9. TurboAss 
          Alle Befehle, Direktiven usw. wurden auf den TurboAss von - 
          Soft abgestimmt. Wenn irgendetwas nicht klappen, bitte ich 
          um Nachricht. Ich helfe gern. Sollte ich demnchst an voll- 
          stndige Opcode-Listen fr 68020, 030, 040 und 881/2 Prozes- 
          soren herankommen, werde ich den Disassembler erweitern. 
           
 

 

 

 

          7.10. Assembler-Anpassungen 
          Da ich nur mit dem TurboAss und dem Lattice C Assembler 
          arbeite, die beide in Sachen Mnemonik die Motorola-Norm 
          einhalten, wei ich nicht wie es mit der Kompatibilitt zu 
          anderen Assemblern ausschaut. Ich habe aus dem TurboAss- 
          Handbuch einige fremde Mnemoniks und Direktiven heraus- 
          gesucht, zwischen denen Ihr whlen knnt. 
           
          7.11. interner Vorgang (fr Insider) 
          Das Disassemblieren geschieht in folgender Reihenfolge: 
          - Anlegen der entsprechenden Felder fr 
               - die Ablage des Zielcodes: Stringarray 
               - das Setzen der Label: Booleanarray 
               - die Zeilenadressen: Longintegerarray 
          - Vormerken der relozierten Adressen als Label 
          - bersetzen des TEXT-Segmentes 
          - bersetzen der DATA-Blcke im Textsegment 
          - bersetzen des DATA-Segmentes 
          - BSS-Segment nach Labeln einteilen 
          - Setzen der Label (am linken Rand) 
               - Symboltabelle des Programmes 
               - eigene Symboltabelle 
               - selbst gesetzte Symbole 
           
           
           
           
          8. Databereiche im Textsegment 
           
          8.1. Grundstzliches 
          Es kommt immer wieder vor, das Datas wie z.B. Strings sich 
          nicht im Data- sondern im Textsegment befinden. Um spter 
          berhaupt noch etwas mit dem disassemblierten Code anfangen 
          zu knnen (siehe letztes Kapitel), mu man diese Bereiche 
          herausfischen und die Quelle erneut disassemblieren. Dazu 
          gibt man jeweils die Anfangs- und Endadresse des Bereiches 
          an, wobei das letzte, als Data zu bersetzende, Byte in der 
          um 1 verminderten Endadresse steht. Beim Anlegen der Blcke 
          ist zu beachten, da sie sich nicht berschneiden! 
           
          8.2. Dialogbox 
          In der Dialogbox 'Data im Text' werden die Blcke aufge- 
          listet. Hier gibt es folgende Buttons: 
          - Eintrag 
             - aktivieren : zum aktivieren des aktuellen Eintrags 
             - lschen : lscht den aktuellen Eintrag 
             - goto : springt zu der entsprechenden Stelle 
          - Feld 
             - aktivieren : das ganze Verfahren aktivieren 
             - lschen : alle Eintrge lschen 
          - Datei 
             - laden : Es wird eine DBT-Datei geladen und angezeigt. 
             - speichern : Die aktuelle DBT-Datei abspeichern.  
 

 

 

 

          - Tastenkombination 
             - Shift links : Curser eine Position nach oben 
             - Shift rechts : Curser eine Position nach unten 
             - Shift hoch : Curser eine Seite nach oben 
             - Shift herunter : Curser eine Seite nach unten 
             - Clr Home : Curser zur Position 0 
             - Help : Eintrag de-/aktivieren 
          Bei Maximum kann man angeben, wie lang das Feld sein soll. 
          Die aktuelle Lnge stellt sich nur neu ein, wenn man alle 
          Eintrge abspeichert und neuldt, oder das ganze Feld lscht. 
          Die Blcke werden nach Verlassen der Dialogbox und beim Start 
          des Disassemblierens neu sortiert. 
           
          8.3. Arbeitsweise 
          Man sollte so vorgehen, da man nach dem ersten Disassem- 
          blieren, den Code durchgeht (z.B. mit 'Text suchen' ';') und 
          so jeden Bereich der nach Data ausschaut mit den Tasten- 
          kombinationen 'Alt B' und 'Alt K' anstreicht. Falls es 
          zweifelhaft ist ob Data oder Text, schaut euch doch mal die 
          Stellen an denen diese Bereichen mit dem Label angegeben ist. 
          Steht hier ein Sprungbefehl? 
          Beispiel: 
                         rts 
                         dc.w      $4562      ;in dieser Zeile 'Alt B' 
                         adda.l    #$51,A2 
                         ori.b     #0,D0 
                         dc.w      $0000 
          T_124:         move.w    #2,D0      ;hier 'Alt K' 
                         bra.s     T_102 
           
           
           
           
          9. Symboltabelle 
           
          9.1. 2 Tabellen 
          Ihr mt grundstzlich zwischen zwei verschiedenen Symbol- 
          tabellen unterscheiden: Die eine hngt am Programmcode, und 
          wird von Desert Drain mitgeladen und entsprechend eingesetzt. 
          Die andere kann von Euch selbst erstellt werden, um einen 
          Programmcode lesbarer zu machen. Beide werden beim Disassem- 
          blieren parallel eingesetzt. 
           
          9.2. Dialogbox: Symbol ersetzen 
          Hier lassen sich die Symbole im Text direkt ersetzen. Symbole  
          und Adresse werden automatisch vermerkt und auf Wunsch beim  
          nchsten Disassemblieren wieder eingesetzt. 
           
          9.3. Dialogbox: ersetzte Symbole 
          Hier werden die bereits ersetzten Symbole aufgefhrt und 
          knnen beliebig verndert und erweitert werden. Der aktuelle 
          Wert wird mit dem schwarzen Balken angezeigt. 
          - Eintrag 
              - lschen : lscht den aktuellen Eintrag 
              - goto : springt zum aktuellen Symbol 
 

 

 

 

          - Feld 
              - aktivieren : aktiviert diese Symboltabelle 
              - lschen : lscht das gesamte Feld 
              - max____ : Diese Eingabe ist erst nach lschen des 
                          Feldes oder Abspeichern und Neuladen wirksam. 
          - Quellsymbole 
              - ersetzen : Holt die Symboltabelle der Quelle und lscht 
                           alle anderen Symbole. Das Maximum liegt 50 
                           Werte ber der Lnge der neuen Tabelle. 
              - anfgen : Fgt die Symboltabelle der Quelle an die 
                          bestehende Tabelle an. Es wird max_____ 
                          beachtet. 
          - Datei 
              - laden : ldt SYB-Datei als Symboltabelle 
              - speichern : sichert die aktuelle Tabelle als SYB-Datei 
          - Tastenkombination 
              - Shift links : Curser eine Position nach oben 
              - Shift rechts : Curser eine Position nach unten 
              - Shift hoch : Curser eine Seite nach oben 
              - Shift herunter : Curser eine Seite nach unten 
              - Clr Home : Curser zur Position 0 
           
           
           
           
          10. Trap-Benennungen 
           
          10.1. Warum? 
          Disassemblierte Programme ohne Symboltabelle sind extrem 
          unleserlich. Um Euch ein kleines bischen zu helfen, kann 
          Desert Drain Systemvariablen und Traps mit Ihrem Namen 
          benennen und stellt die Mglichkeit bereit auf Knopfdruck 
          weitere Infos auszuspucken. (siehe Hilfsdatei) 
          Mit den Sprngen ins Betriebssystem ist das so'ne Sache, 
          weil sie sehr stark von dem verwendeten Compiler abhngen. 
          Ich habe versucht einige Optionen einzubauen, mit denen eine 
          Anpassung an den Code mglich ist. 
           
          10.2. OS-Traps mit direktem TRAP 
          Die GEMDOS-,BIOS- und XBIOS-Traps laufen in der Regel alle  
          gleich ab: Die Parameter werden rckwrts auf den Stack  
          gelegt. Zuletzt folgt die Funktionsnummer. 
          z.B. fr Fsetdta(): 
          ...       pea       dta(pc) 
                    move.w    #26,-(sp) 
                    trap      #1             ... 
          Es gibt aber Librarys in denen steht statt move.w #26,-(sp) 
                    move.w    #26,d0 
                    move.w    d0,-(sp) 
          Der Code ist zwar gleichlang, nur Desert Drain mu zwei oder 
          mehrere Zeilen untersuchen. Die Anzahl, der von unten nach 
          oben zu untersuchenden Zeilen, ist in einer Dialogbox ein- 
          stellbar. Auerdem mt Ihr natrlich auch angeben, woran er 
          die entsprechende Zeile erkennen soll. Grundstzlich wird 
          immer nach einem '#' gesucht. Die auch abstellbare Standard- 
          erkennung entspricht der vor Version 1.4. Hier werden automa- 
          tisch 'pea' und 'clr' erkannt. (siehe Disassembler) 
           
 

 

 

 

          10.3. OS-Traps mit Universalroutinen 
          Nun gibt es aber Librarys, die legen die Parameter in 
          irgendwelchen Registern ab und rufen Univeralroutinen auf, in 
          denen dann der 'trap'-Befehl steht. Durch Benennen dieser 
          (erfolgt natrlich getrennt fr GEMDOS, BIOS und XBIOS) und 
          der entsprechenden Kennparameter fr die richtige Zeile mit 
          der Funktionsnummer, wird eine Benennung mglich. Als Aufrufe 
          werden 'b??','jmp' und 'jsr' akzeptiert. 
           
          10.4. GEM-Traps 
          Die Erkennung der AES- und VDI-Traps erfolgt wie bei den 'OS- 
          Traps mit Universalroutinen'. Fr die Ablage der Funktions- 
          nummern und weiterer Parameter gibt es zwei Mglichkeiten: 
          Entweder werden sie vor dem Universalaufruf in Registern 
          abgelegt oder die Parameter liegen in einem speziellen Data- 
          bereich und es wird nur ein Offset angegeben. In der Regel 
          wird das erste Verfahren verwendet, nur in der AES-Lib zu 
          Lattice C nicht. Hier berechnet sich die Funktionsnummer aus 
          (Parameter/4)+10. Eine entsprechende Einstellung ist vorzu- 
          nehmen. 
           
          Bei den VDI-Parametern der Ausgabefunktionen und Escapes 
          gibt es ein weiteres Problem: Es wird ein Subopcode ver- 
          wendet. Dieser wird in der Regel mit dem Opcode in einer 
          Konstante verschlsselt, wenn nicht sieht's schlecht aus. Es 
          wird angenommen, da der Opcode das oberste belegte Byte ist 
          (in diesem Falle Byte Nummer 0 genannt). Die Lage des Sub- 
          opcodes mt Ihr selbst festlegen. Bei Lattice C ist es das 
          dritte Byte. Bei der Lib des TurboAss das zweite. 
           
          10.5. Symboltabellen 
          Wenn Ihr ein Programm mit Symboltabelle disassembliert, kann 
          es beim Benennen der Traps zu einigen Problemen kommen. So 
          wird einigen Symbolen ein '@' vorgesetzt. In einer GEM- 
          Dialogbox gibt es dieses Zeichen aber nicht. Die Lsung: Ganz 
          einfach: Desert Drain wartet nicht auf das Label, sondern auf 
          eines das dieses beinhaltet. Dies hat noch einen weiteren 
          Vorteil: 
           
          10.6. Probleme mit GFA-Basic 
          In GFA-Basic gibt es mehrere  AES- und VDI-Routinen. In  
          diesem Fall mt Ihr Label vergeben, die sich gleichen: 
          als Universalroutine:    aes_call 
          fr die Routinen:        aes_call1 
                                   aes_call2 
                                   aes_call3  usw. 
           
          10.7. Benennung per Hand 
          Es ist auch mglich, die Aufrufe 'per Hand' zu benennen. 
          Hierzu mu die Zeile mit der entscheidenen Parameterbergabe 
          in der ersten Zeile des Editor stehen. Im Menbaum ganz 
          rechts stehen die entsprechenden Bedienelemente. 
           
           
           
           
 

 

 

 

          11. System-Info 
          Hier erfhrt man die Inhalte von Systemvariablen und einigen 
          wichtigen Vektoren. 
           
          11.1. Die Funktion 
          Die Dialogbox enthlt neben diversen Buttons ein Eingabe- 
          feld,zwei Ausgabefelder und einen Pfeilbutton. Das Eingabe- 
          feld sollte die entsprechenden Eingaben enthalten (was  
          sonst). In der linken Ausgabe steht der zurckgegebene Wert 
          als Zahl (HEX oder DEZ) und in der rechten als String. Der 
          Pfeilbutton dient dazu den Inhalt des linken Ausgabefeldes in 
          das Eingabefeld zu kopieren. Im Eingabefeld sind folgende 
          Symbole erlaubt: Ziffern von 0 bis F, $ fr Hexadezimalzahl, 
          + fr addiere und - fr negativ oder subtrahiere. 
           
          11.2. GET ..., rechnen 
          Nichts anderes als peek, dpeek (2 Byte) und lpeek (4 Byte). 
          Der 'rechnen'-Button dient der Neuauswertung des Eingabe- 
          feldes. 
           
          11.3. CPU-Vektor 
          Erwartet Werte von 0 bis 263 und gibt die Vektoradressen 
          zurck. Intern wird setexec [bios(5)] benutzt. Diese Vektor- 
          adressen entsprechen den Systemvariablen: 
           
          Beispiele:    
              bios(5)   Systemvariable 
                 33          $84          Vektor auf GEMDOS - Routinen 
                 34          $88                     VDI/AES 
                 45          $B4                     BIOS 
                 46          $B8                     XBIOS 
               $100         $400          System-Timer-Interrupt 
               $101         $404          Critical Error Handler 
           
           
          11.4. KBD-Vektor 
          Erwartet Werte von 0 bis 8 und gibt die Adressen 
          verschiedener Routinen zurck, die die vom Tastaturprozessor 
          kommenden Daten verarbeiten. Es wird kbdvbase [xbios(34)] 
          benutzt. 
               0 : midi_ein 
               1 : tast_ueberlauf 
               2 : midi_ueberlauf 
               3 : ikbd_status 
               4 : maus 
               5 : timer 
               6 : joystick 
               7 : midi_sys 
               8 : ikbd_sys 
           
          11.5. _sysbase 
          Holt die Basisadresse des TOS. 
           
 

 

 

 

          11.6. linea 
          Gibt je nach Eingabe eine Basisadresse zurck. (intern: nach 
          dem Befehl linea #0  $A000 werden die Adressregister A0-A2 
          verschieden belegt.) 
           Eingabe     Ausgabe 
             0     Basisadresse der LINE-A Variablen 
             1     Zeiger auf Tabelle mit Zeigern auf die System- 
                   zeichenstze (Wird hier wohl kaum jemand bentigen!) 
             2     Zeiger auf eine Tabelle mit den Anfangsadressen der  
                   Line-A-Routinen (hnlich wie der Inhalt des Line-A- 
                   Vektors) 
           
           
           
           
          12. Editor, Bearbeiten 
          Dieses Fenster als Editor zu bezeichnen ist zwar etwas ber- 
          trieben, aber mir fiel kein anderer Name ein. Einen Curser 
          habe ich aus Bequemlichkeit weggelassen. Wenn eine Zeile 
          direkt angesprochen werden soll, mu sie an erster Stelle der 
          Seite stehen. 
           
          12.1. Scrolling 
          Das Bewegen des Textes erfolgt ber den rechten Slider oder 
          die Cursertasten, evtl. in Verbindung mit Shift. Mit ClrHome 
          gelangt man zum Anfang, mit Shift Clr Home zum Ende des 
          Textes. (auch Hilfe) 
           
          12.2. 8er/16er Text, Texthhe 
          Mit Tab oder ber Editor-Optionen schaltet man zwischen den 
          zwei Texthhen des Systemfonts hin und her. (auch Hilfe) 
           
          12.3. Hilfe und Remark suchen 
          Mit 'H' oder 'Return' gelangt man in den Hilfstext und kann 
          dort blttern. Mit Help sucht man aus dem Editor heraus im 
          Hilfstext nach dem Symbol, das als erstes Remark ab Seiten- 
          anfang steht. Hier erhlt man dann nhere Infos ber Trap's 
          und Systemvariablen. 
           
          12.4. Text suchen 
          Durch Drcken der Taste F erhlt man die Mglichkeit einen 
          Text (z.B. Label) zu suchen. Durch Vorseten eines '^' wird 
          eine Zeilenadresse gesucht (z.B. ^$48C). Mit 'Ctrl F' kann 
          die Suche wiederholt werden. (auch Hilfe) 
           
          12.5. Label suchen 
          Wenn sich in der obersten Zeile ein Symbol hinter dem Mne- 
          monik befindet, wird das dazugehrige Label gesucht und die 
          entsprechende Stelle angesprungen. 
           
          12.6. Aufrufe suchen 
          Im Gegensatz zu 'Label suchen' wird nach den Aufrufen des 
          Labels gesucht, das in der ersten Zeile ganz rechts vor dem 
          Mnemonik steht. Das zuerst gefundene wird angesprungen. Die 
          weiteren sind mit 'Ctrl F' zu suchen. Nach erneutem Benutzen 
          der 'Text suchen' - Dialogbox erlischt diese Option. 
           
 

 

 

 

          12.7. Symbol ersetzen 
          Ersetzt smtliche zutreffenden Symbole und hngt diese auto- 
          matisch an die neue Symboltabelle an. 
           
          12.8. dieses Symbol/Label ersetzen 
          Diese Funktionen arbeiten genauso wie Label/Aufrufe suchen, 
          nur da die entsprechenden Stellen nicht angesprungen werden, 
          sondern in der ersten Zeile der 'Symbol ersetzen' - Dialogbox 
          erscheinen. Dies erleichtert die Tipparbeit. 
           
          12.9. Remark ndern 
          Ermglicht es Kommentare zu ndern oder anzufgen. 
           
          12.10. Opcode->Data 
          Es wird in der aktuellen Zeile (ist die oberste) statt dem 
          disassemblierten Code, der Inhalt der Zeile als Data (dc.w) 
          ausgegeben. Da hier kein Assembler eingebaut ist, geht dies 
          nur, wenn die entsprechende Quelle auch eingeladen wurde. 
           
           
           
           
          13. Editor-Optionen 
          Im Gegensatz zu den Disassembler-Optionen knnen diese auch 
          spter noch gendert werden. Sie betreffen nur die Benutzer- 
          oberflche. 
           
          13.1. Turbo-Fenster 
          Da die VDI-Textausgabe (v_gtext) bei achtfachen X-Werten 
          wesentlich schneller arbeitet (welch Wunder), kann man hier 
          die Fensterpositionierung einschrnken. D.h. Fenster knnen 
          nur noch an Stellen mit X=8*DIV(X,8)-1 gesetzt werden (wie im 
          Desktop). [Intern wird natrlich wind_calc() benutzt.] 
           
          13.2. Zeilenadressen 
          Der Disassembler 'merkt' sich bei welcher Offset-Adresse der 
          Opcode jeder Zeile stand. Mit der Option 'mit Zeilenadressen' 
          oder den Cursertasten 'links' und 'rechts' werden diese 
          ein/ausgeblendet. Zustzlich kann eingestellt werden ob diese 
          in HEX- oder DEZ-Zahlenformat ausgegeben werden sollen. Das 
          geht natrlich nur, wenn eine Quelle geladen wurde! 
           
          13.3. Sprungbefehle 
          Um den Code bersichtlicher zu gestalten, werden einige 
          Sprungbefehle farbig bzw. bold, fett und kursiv gekenn- 
          zeichnet. Dieses lt sich jedoch auch abstellen (erhht die 
          Scrollgeschwindigkeit). 
           
          13.4. Move-, Grow- und Shrinkboxen 
          Wenn sie stren, dann schalten wir sie eben ab. 
           
          13.5. Dialoge zur Maus 
          Besitzer von Grobildschirmen rgern sich immer wieder 
          darber, da Dialogboxen dort stehen wo sich der Mauscurser 
          gerade nicht befindet (Murphy's Gesetze). Diese Option wird 
          euch helfen! 
           
 

 

 

 

          13.6. erweiterte Fileselectbox 
          Solltet Ihr noch eine TOS-Version kleiner 1.04 in eurem 
          Rechner haben und einen Fileselectpatch benutzen, wird Euch 
          sicher schon mal gergert haben, da die Titelzeile nie 
          dargestellt wird. Hier ist dies aktivierbar: Es wird dann 
          immer fsel_exinput() aufgerufen. 
           
           
           
           
          14. Hilfstext 
          Alle Remarks kommen aus der Hilfstext-Datei 'DS_HILFE.TXT', 
          die bei Programmstart oder mit 'Hilfe laden' aus dem Men 
          neugeladen werden kann. Ein Lschen der Hilfe erhht den 
          freien Speicher. Sie ist eine 'stinknormale' ASCII-Datei 
          deren Zeilenenden mit LF/CR begrenzt werden. Geladen wird sie 
          mit der GFA-Basic- Funktion 'recall'. Mit Texteditoren wie z. 
          B. 'TEMPUS' kann sie ohne Probleme erweitert werden. Hierbei 
          sind folgende Normen zu beachten: 
           
          - Die ersten drei Zeichen sind eine Zahl und bestimmem die 
            Zeilenlnge der Datei. Wenn diese Zahl nicht vorhanden ist, 
            wird eine ASCII-Datei mit 30 Bytes pro Zeile geladen und 
            nicht ausgewertet. 
          - Remarks mssen mit ';' anfangen. 
          - Es werden Segmente an entsprechenden Wrtern erkannt: 
             - AES:          AES ?/? 
             - VDI:          VDI ?/? 
             - GEMDOS:       GEMDOS ?/? 
             - BIOS:         BIOS ?/? 
             - XBIOS:        XBIOS ?/? 
             - Line-A:       LINEA ?/? 
             - Systemvariablen:   SYSVAR ?/- 
            Der erste Zahlenwert enthlt die Anzahl der Eintrge. Der 
            zweite den hchsten Parameterwert (entfllt bei SYSVAR). 
          - Die Parameterwerte der entsprechenden Funktionen mssen 
            nach dem folgenden Schema eingebaut werden: 
             - aes(HEX.w) 
             - vdi(HEX.w) 
             - gemdos(DEZ.w) 
             - bios(DEZ.w) 
             - xbios(DEZ.w) 
             - linea #DEZ.w 
             - $HEX.w   (nur wortlange Variablen) 
           
          Wenn Ihr dies beachtet, kann gar nichts schiefgehen. 
           
           
           
           
           
 

 

 

 

          15. Was kann Desert Drain ? 
              Wie arbeite ich mit Desert Drain ? 
           
          Dieser Disassembler kann (meiner Meinung nach) schon eine 
          ganze Menge. Trotzdem gibt es einiges, was noch verbessert 
          oder eingebaut werden mte. Leider waren in den Versionen 
          1.0 und 1.1 so viele Fehler, da kaum jemand das Programm 
          vernnftig nutzen konnte. 
           
          Doch nun zur Sache - Was kann ein Disassembler? Als erstes 
          solltet Ihr euch klar machen, da ein Disassembler in einem 
          Quellcode nur Bits und Bytes erkennt, und nicht wei, ob es 
          sich hierbei um einen Opcode oder ein Data handelt. Hier mu 
          der Mensch Ihm helfen, denn nur er kann zu 100% erkennen um 
          was es sich handelt. Also meckert nicht gleich los wenn 
          Desert Drain einige Label nicht setzt, oder nach dem 
          Optimieren im Assembler (z.B. TurboAss) das Programm nicht 
          mehr luft. 
           
          Aber wie knnt Ihr im helfen? Nach dem Disassemblieren 
          solltet Ihr euch den Code im Editor ansehen und smtliche 
          Bereiche, die nach vermeindlichen Datas aussehen, als 
          zustzliche Databereiche vermerken. Aber Vorsicht! Nicht 
          alles was Desert Drain als 'dc.w' bersetzt ist ein vermeind- 
          liches Data. Manchmal zeigt eine Adresse zum Beispiel auf 
          eine Konstante, die zu einem Opcode gehrt, oder ein Programm 
          untersttzt fortgeschrittene Mikroprozessoren deren Opcode 
          Desert Drain noch nicht entschlsseln kann. So enthlt zum 
          Beispiel AHDI einige 'move D0, CACR' (ab MC68010). 
           
          Wo liegt denn nun eigentlich das Problem? Stellt euch vor 
          der Disassembler erkennt in einem Datenbereich einen Opcode 
          mit Label und entschlsselt ihn. Hier ein real existierendes 
          Beispiel aus einem Turbo-C Compilat: 
                        Opcode:             $6566 
                        Mnemonik:    PC:    bcs.s PC+$66 
                        ASCII:              'ef' 
          Vom Inhalt her ist hier nichts einzuwenden. Bit bleibt Bit. 
          Nun stellt Euch aber vor Ihr optimiert den Assemblercode und 
          verschiebt einige Label, die gar keine waren. 
           
          Warum setzt Desert Drain einige Label nicht, die ins Text- 
          Segment zeigen? Hier gibt es mehrere Mglichkeiten. Wenn das 
          Label bzw. die angesprochene Adresse ungerade ist, kann sie 
          nur auf ein Data z.B. einen String zeigen, und den erkennt 
          der Disassembler nicht automatisch. Hier mt Ihr 'per Hand' 
          nacharbeiten. Wenn das Label gerade ist, wre es mglich, da 
          es nicht direkt auf einen Opcode sondern auf dessen Konstante 
          oder Sprunglabel zeigt. Warum? Wei ich nicht, aber so etwas 
          kommt vor. 
           
           
          So da war's dann auch schon. 
           
                                        Tsch. Euer Volker 
           
