Disassembler

Michael Westermann michael at dvmwest.de
Thu Oct 7 15:14:16 CEST 2004


Hallo Benedict,
On Thu, Oct 07, 2004 at 02:52:18PM +0200, Jan-Benedict Glaw wrote:
> Hallo!
> 
> Ich bin im Moment auf der Suche nach einem ordentlichen Disassembler.
> Ab und zu mal mit objdump in einzelne Programme zu gucken, das geht
> ja noch. ...aber wenn ganze ROMs disassembliert werden müssen, dann
> kommt objdump doch an seine Grenzen (Daten disassembliert, dann kommen
> lustige Dinge bei 'raus, mit dem Effekt, daß nachfolgende Funktionen
> nicht mehr korrekt disassembliert werden...).
> 
> Gibt's da eigentlich irgendwo so *richtig* brauchbare Disassembler unter
> Linux? Das zurück-übersetzen in C mach' ich ja gern' noch per Hand, aber
> so Sachen wie:
> 
> 	- Anzeige von Daten ab einer Adresse in allen möglichen Formaten
> 	  (u8/s8, u16/s16, u32/s32 ... in big und little endian,
> 	  ASCIIZ-Strings selbst suchen, Darstellung als Assembler-Opcode
> 	  inkl. Operanden, ...)
> 	- Vergabe von Labeln
> 	- Anzeigen der (vom Benutzer eingegebenen oder über
> 	  Symboltabellen eingelesenen) Funktionsnamen/Symbolen an den
> 	  entsprechenden Funktions-Aufrufen
> 	- Verwalten eines Stacks von Aufgaben (-> wenn ich einem
> 	  Funktions-Aufruf folge, um bei dieser Funktion weiterzumachen,
> 	  dann soll sich das Ding merken, wo ich vorher war)
> 
> Natürlich soll das nicht nur für i386 funktionieren, sondern möglichst
> (durch Installieren/Angeben einer anderen libbfd/libopcodes) auch alle
> anderen Prozessor-Typen können...

Also Ich habe da noch nichts brauchbares gefunden, abder Du kannst gerne
meine Perl-Scripte zum Disassembleren haben. 

Ich habe ein Prog. gebaut welches die Disassemlierfunktionen von der 
BFD-Lib nutzt. Diese wird mit Angabe des binarefiles und des
Professortypes im hintergrund gestartet.

In dem Perlscript wird das Disassemblieren dann gesteuert, parsen der
Call's weiterverfolgung von Sprüngen etc. das ist aber leider alles noch
etwas Handarbeit die Einsprünge etc müssen von Hand in das Script
eingetragen werden. Die Kommunikation mit dem Disaasembler erfolgt über
udp.

Allerdings verfolgt der Script nicht den Programmablauf, sondern
Träget alle verzweigungen erst in eine Hash-Tab ein, und arbeitet diese 
dann ab.

Ich schaffe damit locker 64-256MB/day je nach code.


Gruß Michael



More information about the Linux mailing list