Frage

Ich denke jetzt einen Disassembler zu entwickeln, aber ich weiß, dass es sehr schwer ist, einen Disassembler zu bauen Ich mag die beste / einfachste Sprache wissen, meinen Traum in die Realität umzusetzen, auch, ein Tutorial Vorschlag ist sehr schön auch ; -)

War es hilfreich?

Lösung

Ich empfehle einen Blick auf mit Python einen Disassembler zu schreiben. Es verfügt über Eigenschaften und Fähigkeiten, die sehr nützlich sein können, wenn ein Disassembler zu schreiben.

  • Bit-Manipulation: logisch Betreiber Operationen auf allen Bits von integer-Wert
  • funktionale Programmierung : mit 'Karte' auf den Ergebnissen von bitmask Operationen können sehr nützlich sein,
  • leistungsfähige Datei-Leseoperationen: Datei-I / O ist so einfach in Python zu tun
  • nette Funktionen für strukturierte binäre Dateien zu lesen (wie .EXE-Dateien)

Python hat andere Qualitäten, die es sehr nützlich für ein Programm jeder Größe machen. Ein x86-Assembler, dass die aktuellen Mikroprozessoren Befehlssatz im Gegensatz zu dem ursprünglichen 8086-Befehlssatz sein wird, ein großes Programm.

unterstützt

Mit einer Sprache, die es einfach zu tun macht Bit-Maskierung ist sehr nützlich beim Schreiben ein Assembler.

  • objektorientiert: macht Code-Wiederverwendung einfacher und Programme verständlicher, weniger redundante
  • modular: Baugruppen und sogar Pakete können verwendet werden, um Programm Chunks überschaubare Größe zu halten
  • prägnant und lesbar: so nicht viel Schreib- oder Kopf-Kratzen
  • interaktiv: macht es einfacher für die Entwicklung / Test inkrementell
  • Einbau in symbolischer Debugger: praktisch, wenn automatisierte Tests schneiden Sie es nicht
  • moderne QA-Unterstützung: Unittest ähnlich wie JUnit, doctest unterstützt Funktionstests mit gutem Beispiel
  • eingebaute Hilfe: so müssen Sie ein Buch oder den Start eines Browsers
  • nicht gehen Spiegeln
  • hervorragende Dokumentation: Referenz und Tutorial Material in PDF- und HTML-Dateiformaten
  • gute IDE-Unterstützung: Eclipse NetBeans, Emacs, etc. alles gibt eine hervorragende Unterstützung für Python
  • gute Support-Webseiten zum Servieren: beinhaltet die Unterstützung für HTML / HTTP und großes 3rd-Party-Web-Frameworks da draußen zu
  • große Dokumentation Generation: doc-String Konvention Module, Klassen zu dokumentieren und Methoden und ein Dienstprogramm, das mit Python kommt dynamisch verlinkte HTML-Dokumentation generiert und dienen sich für Sie von einem TCP / IP-Port
  • blättern

Python gibt Ihnen die Gelegenheit, um Spaß mit Ihrem Programm, wie Sie es zu entwickeln. Es ist eine ziemlich große Gemeinschaft von Python-Programmierer da draußen. Sie sind nicht Legion wie Java-Programmierer sind und C ++ Programmierern verwendet werden, aber es gibt Tonnen um.

Python ist eine beliebte Programmiersprache bei Google, Yahoo und anderen modernen Web-Unternehmen aufgrund seiner Leistung und Flexibilität. Die Jython Python-in-Java-Interpreter gewährt noch mehr Leistung für beide Sprachen, da es ein hohes Maß an Synergie und annehmbares Maß an Kompatibilität zwischen ihnen. Es gibt einen Jython Podcast Sie hören können, wenn Sie nicht mögen, lesen.

Python wurde Anfang der 1990er Jahre erfunden, so dass es sogar älter als Java. Nachdem diese lange existierte, mit einer starken, stetigen folgenden hat es mich zu einer sehr robust, in der Lage Sprache mit vielen Beispielen und eine anständigen Gemeinschaft von Programmierern entwickelt, die es für die Arbeit und das Vergnügen verwenden.

Wenn Sie nicht weiterkommen, die Python-Gemeinschaft ist in der Regel sehr hilfreich mit Ideen, wie Sie einen Stich an einem Problem nehmen Sie haben, werden mit einer oder zwei praktischen Python Funktionen.

Andere Tipps

Die New Jersey Maschinencode-Toolkit ist ein Toolkit und eine Sprache für Erstellen von Monteuren und Disassembler. Ich glaube, es unterstützt C, C ++ und Modula-3. Die Basis eines Toolkits ist eine Sprachbefehlssatz zur Beschreibung; ein Disassembler wird dann automatisch mit der -dis Option erzeugt. Dieses Toolkit wurde ziemlich weit verbreitet, aber die Beschreibungen der populären Befehlssätze decken nicht die letzten Revisionen.

Sie können entscheiden, es mehr Spaß oder belehrender ist Ihre eigene Rolle, aber wenn Sie mit einem komplizierten Befehlssatz zu tun haben, können Sie sich schwer tun werden, um die Effizienz des Toolkits entsprechen. Nicht, dass dies wichtig ist auf dem heutigen Hardware: -)

Jede allgemeine Zwecke Sprache mit anständigen Byte und String-Operationen tun könnte. Verwenden Sie eine Sprache, die Sie bereits gut kennen. eine neue Sprache zu lernen und zu lernen, wie ein Disassembler zugleich zu schreiben, ist wahrscheinlich gehen, um es nur schwieriger für dich selbst.

Sie könnten es in Assembly schreiben. Das wird wirklich Ihr Gehirn strecken.

Echt Raw-Code - Es gibt keinen Ersatz

spielt keine Rolle, wirklich; Ich denke, IDA Pro ein Plugin-Modell hat. Ich glaube, ein paar Leute Disassembler, die Python-Plugins unterstützen, so können Sie versuchen, dass. Aber ich glaube nicht, dass Sie eine Vorstellung davon haben, wie schwierig dies sein wird; viel Glück, obwohl

würde ich mir vorstellen, jede moderne Sprache wäre für diesen Zweck ebenso gut funktionieren. Überlegen Sie, welche Bibliotheken Sie verwenden wollen. Zum Beispiel gibt es Bibliotheken gibt, die Sie mit verschiedenen Arten von Binärdateien (eine davon ist BFD zu beschäftigen erlauben ). Denken Sie darüber nach und wählen Sie die Programmiersprache, die Ihnen am besten passt.

Disassembler, das heißt, Programme, die absoluten binär Assemblersprache zurück konvertieren, sind eigentlich ganz einfach zu bauen, wenn auch sehr langweilig.

Ich habe einen Z8002 Disassembler in Fortran 77, bereits Anfang 1983 habe ich einen kleiner Disassembler für etwas, das ich rede nicht über in C, 1991.

Du bist wahrscheinlich besser dran, dies zu tun in Vanille-C, da über alle Speicherworte gehen zu tun, liest (oder eine Binärdatei) und Druck viel, viel Dose Text-Strings.

Ich schrieb vor kurzem einen Disassembler in Python. Es war für eine eingebettete RISC-Architektur und Python hat gut funktioniert. Ich lernte Python als ich ging, so landete ich fast jede Funktion Nachbearbeitung und Klasse I mindestens einmal schrieb. Ich fand es besonders nützlich, um den long Typen Unterklasse und Elementfunktionen schreiben, das mir ein 4-Byte-Wort gab (oder Doppelwort je nachdem, wen man fragt), ausgedrückt in verschiedenen Formen, zum Beispiel eine Liste von Bits, Bytes, Knabbergebäck oder Halbworte für verschiedene Operanden Manipulationen zurück.

Es wäre recht gut in Haskell arbeiten. Sie könnten das die binär verwenden verpacken und es wäre auch effizient sein. ADTs ist ganz nett.

Ich würde empfehlen, gegen es in Python zu schreiben. Python ist ziemlich langsam, und während Haskell wahrscheinlich ein paar Mal langsamer als C ist, ich glaube, dass Python wäre viele -mal langsamer als C.

Schließlich Binärformaten sind Low-Level genug, dass ich bezweifle, dass es wichtig ist. Man konnte es in C relativ leicht schreiben. Es gibt keine Notwendigkeit für Parser Kombinatoren oder Parser-Generatoren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top