Disassembler

    Die hier vorgestellte Library dient zum Disassemblieren von binären Programm-Code. Die Library ist frei konfigurierbar, das heißt das Programm-Code von den verschiedensten Prozessoren dargestellt werden kann. Für jeden Prozessortyp gibt es eine eigene Konfigurationsdatei (*.acf). Zum jetzigen Zeitpunkt  werden vier Typen unterstützt.

Mit der Funktion AsmInit wird eine Prozessorkonfiguration geladen. Danach muss mit AsmSetFormat das Zeilenformat eingestellt werden. Der erste Parameter gibt an wie viele Zeichen die Adresse am Zeilenanfang breit sein soll. Der zweite Parameter bestimmt wie viele Bytes des Programm-Codes als Hex-Dump maximal ausgegeben werden sollen.

Danach kann mit AsmDecode beliebiger Programm-Code disassembliert werden. Der erste Parameter ist ein Zeiger auf den Code-Bereich. Danach folgt ein Zeiger auf eine AsmEntryInfo Struktur. In ihr wird der Ausgabetext und weitere Informationen über den dekodierten Befehl gespeichert. Die beiden letzten Parameter sind die Adresse des Code-Abschnittes, geteilt in untere 32 und obere 32-Bit. 

    
    	#include "AsmDecoder.h"
    
    	...
    
    	AsmEntryInfo  info;
    	unsigned long offs;
    	unsigned long addr=0x00400000;
    	unsigned char data[]={0x12,0x34,0x12,0x67,0xAA,0x34,0x98,0x12,0xFF,0xE3,0x00};
    	AsmInit("I386.acf",0,0);	// Instruction-Set laden
    	AsmSetFormat(8,6);		// Zeilenformat einstellen
    	for(offs=0;offs<sizeof(data);)
    	    {
    	    offs+=AsmDecode(data+offs,info,addr+offs,0);
    	    printf("\n%s",info.line_text);
    	    }

    Das Demoprogramm erzeugt folgende Ausgabe:

    	00400000  12 34 12    ADC   DH,[EDX+EDX]
    	00400003  67 AA       STOSB
    	00400005  34 89       XOR   AL,98
    	00400007  12 FF       ADC   BH,BH
    	00400009  E3 00       JEXCZ 0040000B	

     

    Und hier ist die etwas verbesserte Version des Disassemblers.



    Mit dem ExeEditor können EXE, DLL, SYS und BIN Dateien disassembliert werden. Hier ist der oben beschriebene Disassembler in ein Framework gepackt. Bei binär Dateien kann der ExeEditor 16/32-Bit x86 Code anzeigen, außerdem werden 64-Bit AMD Modi und 8051 Codes unterstützt. Bei Windows EXE-Dateien werden zusätzlich die Namen aller DLL-Einsprungpunkte gespeichert.



      Download Konsolen Demo

      Download C++ Source Code Version 3.26
      Download EXE-Datei


    Installations Hinweise:


      Extrahiere alle Zip-Dateien in deinem Verzeichnis MyProjects.

      Bevor du das Programm kompilieren kannst musst du zuerst die Bibliotheken AZ_Lib, AZ_Image, AZ_Archive und AZ_Controls erstellen. Dazu lade erst einmal den Quellcode der Bibliothek herunter und dann das Projekt selber.
      Anschließend kompilierst du die Bibliotheken, das dauert einige Zeit. (mit dem Menü "Erstellen/Erstellen in Stabelverarbeitung" ) Du musst es aber nur einmal machen oder wenn du etwas an der Bibliothek verändert hast. Eine Beschreibung zu den Funktionen in der Bibliothek findest du in den Dateien:
      .\Allgemein\*.chm

      Jetzt sind noch 2 Einstellungen im Visual C++ zu machen:
      Im Menü Extras/Optionen/Verzeichnisse/Include-Dateien den Pfad: ....\MyProjects\Allgemein einfügen
      Im Menü Extras/Optionen/Verzeichnisse/Bibliotheks-Dateien den Pfad: ....\MyProjects\AZ_Lib einfügen

      Download Quellcode der Bibliothek
      Download Projektdateien der Bibliothek
      Download Hilfedateien der Bibliothek




    Anton Zechner