Computer können nur Befehle ausführen, die in binär kodierter Form vorliegen. Wenn ein Programm nur in dieser Form vorliegt, ist es für Menschen kaum nachvollziehbar. Ein Disassembler ist ein Werkzeug, mit dem Sie ein solches Programm leichter lesbar machen und verstehen können.

Das Schichtenmodell eines Computers

In einem Programmierkurs lernen Sie in den meisten Fällen eine höhere Programmiersprache. In dieser stehen Ihnen Befehle zur Verfügung, die allein oder mit nur wenigen anderen solchen Befehlen zusammen interessante und nützliche Verarbeitungsschritte in der Datenverarbeitung festlegen.

Solche Befehle einer höheren Programmiersprache kann ein Computer aber nicht direkt ausführen. Dafür stehen nur wesentlich einfachere Befehle zur Verfügung, die die sogenannte Maschinensprache ausmachen.

Assembler ist eine Formulierung für Programme in Maschinensprache, die zwischen einer höheren Programmiersprache und der binär kodierten Maschinensprache liegt. Im Speicher des Computers können nur binär kodierte Befehle abgelegt werden. Diese Darstellung ist für den Menschen sehr mühsam und für nichttriviale Programme kaum zu bewältigen.

In Assembler besitzt deswegen jeder Befehl eine viel leichter merkbare Bezeichnung aus einigen Buchstaben. Auch für Variablen und Speicheradressen werden einfachere Kürzel verwendet und nicht etwa Binärzahlen.

Der Compiler als erster Verarbeitungsschritt

Ein Compiler ist ein Programm, das seinerseits andere Programme als Text verarbeitet. Mit einem Compiler übersetzen Sie ein Programm in einer höheren Programmiersprache in Assemblersprache. Diese Übersetzung ist verhältnismäßig aufwendig, denn es geht nicht nur darum, jeden höheren Befehl in eine Reihe von Befehlen in Assembler zu übersetzen. Es kommt auch darauf an, ein möglichst effizientes Assemblerprogramm zu erzeugen. Compilerbau ist ein anspruchsvolles Teilgebiet der Informatik.

Der Assembler als zweiter Schritt

Auch bei ihm handelt es sich um ein Programm, das Programmtexte verarbeitet. Der Input besteht aus einem Programm in der Assemblersprache, die auch einfach Assembler genannt wird. Erzeugt wird durch den Assembler ein Programm in binär kodierter Maschinensprache, das von einem Computer direkt ausführbar ist.

Nachdem es eine einfache Zuordnung von Assemblerbefehlen und Maschinensprachenbefehlen gibt, ist ein Assembler ein viel einfacheres Programm als ein Compiler.

Welche Funktion hat ein Disassembler?

Nachdem es diese Zuordnung zwischen den binär kodierten Befehlen in Maschinensprache und in Assembler gibt, können Sie die Funktion des Assemblers auch rückgängig machen. Ein Disassembler führt genau diese inverse Funktion aus.

Mehr zum Thema:
10 Gründe warum Sie ein CRM-System brauchen

Das Ergebnis eines Disassemblers wird als Disassemblat bezeichnet. Es ist allerdings nicht genau gleich dem Assemblerprogramm, das als Ausgang für den Assembler gedient hat. In Assembler werden sinnvolle Abkürzungen für die Adressen von Sprungbefehlen, Registern und Speicherplätzen verwendet. Alle diese Bezeichnungen werden vom Assembler ignoriert, da sie für seine Funktion unerheblich sind.

Der Disassembler erzeugt also ein Assemblerprogramm, das schwerer lesbar sein wird als das ursprüngliche Programm in Assembler. Dieses Disassemblat lässt sich allerdings verfeinern. Mehrere Durchgänge und ein ordnendes Eingreifen des menschlichen Programmierers können das Disassemblat verbessern und leichter lesbar machen.

Wozu wird ein Disassembler eingesetzt?

Ist ein Programm in Assemblersprache oder natürlich auch einer höheren Programmiersprache verfügbar, erübrigt sich die Anwendung eines Disassemblers.

Oft genug wird ein Programm aber vom Hersteller nur in binär kodierter Maschinensprache ausgeliefert. Handelt es sich um nicht quelloffene Programme, ist das der Standard in der Computerindustrie. Ein Disassembler ist dann die einzige Möglichkeit, das Funktionieren des Programms nachzuvollziehen.

Eine Anwendung besteht aus einer Fehlersuche. Diese Diagnose kann nicht vernünftigerweise in der Maschinensprache selbst vorgenommen werden. Ein Disassemblat ist wesentlich leichter verständlich und gibt dem Programmierer eine Chance, die Logik eines Programms zuerst zu analysieren und dann zu adaptieren.

Die allgemeine Anwendung für einen Disassembler ist das sogenannte Reverse Engineering. Es stellt generell das Nachbauen von Produkten dar, bei dem es sich hier um Software handelt. Manche Hersteller können oder wollen nach einer gewissen Zeit keine Unterstützung für ihre Programme mehr anbieten. Eine weitere Verwendung, gerade bei technischen Problemen, kann dann ein Reverse Engineering als einzigen Ausweg nahelegen.

Ist ein Disassembler legal?

In manchen vom Nutzer zu bestätigenden Vereinbarungen wird der Einsatz eines Disassemblers verboten. Das ist allerdings in den meisten Ländern von der Rechtslage nicht gedeckt. Die Hersteller nehmen solche Passagen in die Vereinbarungen auf, um Nutzer von der Verwendung eines Disassemblers abzuschrecken.

Heute gehen viele Softwarehäuser noch weiter und setzen auf eine Verschleierung ihres Codes. Dabei wird vom Compiler absichtlich unnötig komplexer Assemblercode erzeugt. Der entsprechende Programmtext in binärer Maschinensprache ist dann wesentlich schwerer mit einem Disassembler zu analysieren.

Probleme können nicht so sehr durch die Verwendung des Disassemblers entstehen, sondern durch die Veröffentlichung des Ergebnisses. Ein solches Vorgehen kann in der Tat Lizenzvereinbarungen verletzen und zu Abmahnungen oder Klagen führen.

Mehr zum Thema:
Was ist OpenSSL?
Letzte Artikel von Daniel Faust (Alle anzeigen)