Mit dem »Easy Rider«-Reassembler Programme unter die Lupe nehmen
Wer denkt bei »Easy Rider« nicht sofort an den Film, in mrfm dem Peter Fonda auf seiner Maschine bei fetziger Rockmusik die Staaten durchquert. Für Atari-Anwender hat dieser Begriff noch eine zweite, weniger romantische Bedeutung. Hinter dem Namen »Easy Rider« verbergen sich zwei Programme: ein Reassembler und ein Makro-Assembler. Beide Programme sind zu komplex, um sie in nur einem Test zusammen vorzustellen. Deshalb besprechen wir an dieser Stelle nur den Reassembler. Ein detaillierter Test des Assemblers folgt allerdings in einer der nächsten Ausgaben.
Die Aufgabe eines Reassemblers besteht darin, aus einem bereits übersetzten und ausführbaren Programm wieder einen Assembler-Quelltext zu erzeugen, den Sie analysieren, verändern und erneut übersetzen können.
Reassembler stehen im Ruf, ein nützliches Tool für Cracker und Raubkopierer zu sein. Doch tatsächlich helfen sie jedem Programmierer dabei, undokumentierte Programmteile näher zu analysieren und ihre Funktionsweise zu verstehen. Besonders bei der oft mangelhaften Dokumentation Ataris passiert es häufiger, daß Reassembler die letzte Rettung für den Programmierer sind.
Ein Reassembler ist zudem auch oft die letzte Rettung, um versehentlich gelöschte oder durch Diskettenfehler zerstörte Quelltexte wiederherzustellen. Und nicht zuletzt finden Sie durch eine nachträgliche Reassemblierung Schwächen und unnötige Verzögerungen in Ihren Programmen, die Sie erst bei dieser genauen Analyse optimieren können. Denn nicht alle höheren Sprachen erzeugen kompakten und schnellen Code.
Zum Lieferumfang von Easy Rider gehört die Programmdiskette und ein 50seitiges Handbuch. Es empfiehlt sich, den auf der Diskette befindlichen Text »Readmedoc« zu lesen. Das Programm enthält in der neuen Version sehr viele Neuerungen, die im Handbuch noch nicht berücksichtigt sind. Das Handbuch ist im übrigen informativ und erläutert ausreichend die wichtigsten Programmfunktionen. Easy Rider ist vollständig in Assembler geschrieben — daher auch seine geringe Programmlänge von 48 KByte. Nach dem Start von Easy Rider erscheint eine Datei-Auswahlbox, mit der Sie das Programm auffordert, das zu reassemblierende Programm anzugeben. Möchten Sie keine Datei, sondern Auszüge des RAMs, ROMs oder einzelne Sektoren von einer Diskette re-assemblieren, betätigen Sie den Abbruchknopf und wählen in der Menü-Leiste die entsprechende Option aus. Die Geschwindigkeit des Reassemblers ist sehr beeindruckend. Easy Rider benötigt beispielsweise nur wenige Sekunden, um sich selbst zu reassemblieren (ca. 48 KByte).
Alle Textausgaben gelangen in ein GEM Fenster. Die Ausgaberoutinen scheinen dabei allerdings nicht über GEM zu laufen, da sie ungewöhnlich schnell sind. Trotzdem funktioniert Easy Rider problemlos mit Großbildschirmen. Mit den Fenster-Slidern und den Cursor-Tasten scrollen Sie durch das re-assemblierte Programm.
Easy Rider besitzt zwei verschiedene Darstellungsmodi. Normalerweise listet das Programm die Daten disassembliert auf. Dabei zeigt es die Assembler-Befehle in der Mitte des Fensters an. Am linken Rand erscheinen die entsprechenden Hex-Werte, wie Sie im Hintergrund von Bild 2 sehen. Vom Reassembler erzeugte Labels stehen dazwischen. Leider zeigt Easy Rider in diesem Modus die Symbolnamen nicht an, sondern verwendet ausschließlich eigene, numerierte Labels. Im Reassembler-Modus zeigt er das Listing so, wie er es auch als Quelltext-Datei speichert (Bild 1). Dabei stellt er auch alle Symbolnamen richtig dar.
Da sich auch ein Reassembler einmal irren und Code für Daten oder umgekehrt Daten für Code halten kann, bietet Easy Rider eine Wandel-Funktion zwischen beiden Interpretationen. Wünschenswert wäre dabei allerdings, wenn man auch mit einfachen Mitteln angeben könnte, ob Byte-, Wort-, Langwort- oder gar Zeichenketten vorliegen. Denn dies ist in der derzeitigen Version nur umständlich und mit Einschränkungen durchführbar.
Easy Rider besitzt einige Funktionen, um auch kniffligere Passagen eines Programmes zu reassemblieren. Problematisch sind beispielsweise die nichtssagenden Sprungtabellen. Wenn ein Compiler auf eine Stelle im Quelltext trifft, in der viele Sprünge aufeinander folgen, z. B. durch eine SWITCH-CASE-Anweisung in C oder durch ein ON-GOTO in Basic, so legt er eine solche Sprungtabelle an. In dieser stehen dann die Adreßdistanzen (Zieladresse minus Tabellenbeginn) zu den einzelnen Zielen. In der Ausführung wird dann zu einer Basisadresse — normalerweise Beginn der Tabelle — die entsprechende Distanz addiert, um die Zieladresse zu ermitteln.
Es ist eine mühsame Angelegenheit, eine solche Tabelle von Hand in eine lesbare Form zu bringen. Mit Easy Rider markieren Sie nun lediglich die Tabelle und geben den Bezugspunkt an (Bild 2).
Um dem Ganzen die Krone aufzusetzen, erlaubt Ihnen Easy Rider, neben den Bezugspunkt auch den Locations-Zeiger » * « anzugeben und somit auch relative Distanzen vom eigenen Standpunkt (mit anderen Worten: über den Programmzähler) zu erkennen. Dies freut sicherlich all diejenigen, die sich mit dem TOS beschäftigen, da dieses eine solche Adressierung häufiger benutzt und schon so manchen ROM-Reisenden zur Verzweiflung gebracht hat.
Ebenso häufig werden relative Offsets zu Adreßregistern eingesetzt Dabei steht in einem Adreß-Register eine Basisadresse, auf die ein konstanter Wert addiert wird. Das alte Megamax-C legt beispielsweise so seine Variablen an. Leider ist es mühselig, die Konstanten mit einer Variablen in Verbindung zu bringen. Doch Easy Rider bringt auch diese Adressierung in eine lesbare Form.
Auch das einfache Zuordnen eines Labels zu einer Adresse stellt für den Reassembler kein Problem dar. Sogar ganze Labellisten lassen sich von Diskette nachladen. Dies hat den Vorteil, daß Sie so die wichtigsten Konstanten (Systemvariablen, Hardware-Adressen) in eine Textdatei schreiben und sie immer wieder verwenden können.
Um Ihnen das lästige Berechnen von Werten und das Nachprüfen von Ergebnissen zu erleichtern, stellt Ihnen Easy Rider einen Taschenrechner zur Verfügung (Bild 3). Dieser arbeitet mit den vier häufigsten Notationen: dezimal, hexadezimal, ASCII und binär. Der Rechner beherrscht die Grundrechenarten Addition, Subtraktion, Multiplikation und Division, sowie die Bitoperationen And und Or. Zudem erlaubt er das Verschachteln mittels Klammern.
Mit der eingebauten Suchfunktion lassen sich beliebige Werte, Bytefolgen und ASCII-Strings suchen. Aber auch nach Mnemonics fahndet Easy Rider. Das Besondere dabei ist, daß er die Wildcards » * « und » ? « erlaubt. Damit finden Sie z.B. unoptimierte Sprünge und optimieren nachträglich Adressierungen mit einer Distanz kleiner 32 KByte, die nicht PC-relativ sind.
Sehr gut gelungen ist auch die Sprungfunktion. Sie können als Sprungziel eine beliebige Adresse, ein Label oder einen Symbolnamen angeben. Dabei merkt sich Easy Rider die acht zuletzt eingegebenen Adressen und zeigt sie beim erneuten Aufruf der Funktion an. Ein Klick auf eine der acht Adressen bewirkt den entsprechenden Sprung. Leider zeigt Ihnen Easy Rider dabei nur die Zieladressen und nicht die entsprechenden Labels oder Symbolnamen an.
Die gesamte Arbeitsumgebung mit allen Änderungen läßt sich speichern, so daß Sie die Arbeit später fortsetzen können. Dies ist ein großer Vorteil bei großen Programmen, an denen man längere Zeit arbeitet.
Die Quelltext-Ausgabe von Easy Rider ist mit den meisten Assemblern verträglich, da unser Testkandidat nur Opcodes und Pseudo-Opcodes verwendet, die allgemein geläufig sind. Empfehlenswert ist allerdings der Easy-Rider-Assembler. Er stammt vom gleichen Programmierer und verarbeitet alle Ausgaben des Reassemblers sofort.
Der Reassembler Easy Rider bewies in der aktuellen Version 2.2 eine sehr hohe Zuverlässigkeit Der Preis von 149 Mark ist angesichts seiner Leistungsfähigkeit gerechtfertigt. Den kleinen Mängeln stehen eine Vielzahl von positiven Eigenschaften gegenüber, die das Programm zu einer unentbehrlichen Hilfe für alle Assembler-Programmierer machen, (ba)
Name: Easy Rider 2.2
Preis: 149 Mark
Hersteller: Andreas Borchard
Stärken: □ sehr schnelle Ausführungszeiten □ große Auswahl an Funktionen □ komplexe und leistungsfähige Suchfunktion
Schwächen: □ Symbolnamen nur im Reassembler-Modus
Fazit: Easy Rider ist der beste Reassembler für den ST und jedem Assembler-Programmierer zu empfehlen.
Andreas Borchard, Wiesenbachstr. 2a, 4500 Osnabrück