Welche CLR/.NET-Bytecode-Werkzeuge existieren?


7

Ich kenne Java-Tools zum Manipulieren, Generieren, Dekompilieren von JVM-Bytecode (ASM, cglib, jad usw.). Welche ähnlichen Werkzeuge gibt es für den CLR-Bytecode? Machen Menschen Bytecode-Manipulation für die CLR?

2

Bytecode ist ein Binärformat. .NET-Assemblys funktionieren hinsichtlich der Speicherung der Ausführungsanweisungen sehr unterschiedlich.

Anstatt auf eine bytecode-ähnliche Struktur zu kompilieren, werden .NET-Sprachen in eine Intermediate Language kompiliert (eigentlich heißt das nur - IL).

Dies ist eine von Menschen lesbare Sprache, die wie eine objektorientierte Version von Assembler aussieht.

In Bezug auf die Untersuchung oder Manipulation der IL für einzelne Baugruppen können Sie mit Werkzeugen wie Reflector und ILDASM die IL für jede Baugruppe bequem anzeigen.

Manipulation ist ein bisschen anders, ich würde vorschlagen, einige der AOP-Tools im .NET-Raum zu betrachten. Ich würde auch vorschlagen, einen Blick auf Phoenix zu werfen, welches ein Compilerprojekt ist, das MS in Arbeit hat. Es hat einige wirklich coole Manipulationsfunktionen nach der Kompilierung.

Wenn Sie mehr über die .NET AOP-Tools wissen möchten, würde ich vorschlagen, eine andere Frage zu öffnen (das ist eine ganz andere Dose Würmer).

Es gibt auch mehrere Bücher, die Ihnen die Feinheiten von IL beibringen. Es ist keine sehr komplizierte Sprache zu lernen.

+8

"NET-Assemblies arbeiten ziemlich anders in Bezug auf, wie sie die Ausführungsanweisungen speichern" Nein, sie nicht ... alles wird schließlich zu einem "Binärformat" kompiliert . Dieses binäre Format hat eine 1: 1-Übereinstimmung mit IL. 06 aug. 092009-08-06 09:53:04


4

ILDASM und Reflector in den Sinn kommen.


14

Reflektor ist immer gut, aber Mono.Cecil ist das beste Werkzeug, das Sie insgesamt benötigen können. Es ist von unschätzbarem Wert, um CIL in irgendeiner Weise zu manipulieren.


7

Mono.Cecil ist ein großartiges Werkzeug wie ASM. Es ist ein Teilprojekt von Mono und völlig Open Source. Es bietet sogar better feature als System.Reflection.


1

NDepend können Sie statische Assemblys .NET Assemblies (Code-Metriken, Abhängigkeitsanalyse, etc.) tun. NDepend ist sehr nützlich, um einen Überblick über die Struktur Ihrer .NET-Assemblys zu erhalten, indem Sie Abhängigkeitsmatrix, Abhängigkeitsgraphen und Treemap-Metriken visualizations verwenden.

Es ist auch in Reflector integriert: zum Beispiel können Sie die wichtigen Typen und Methoden in Ihren Baugruppen mit einem Typ/Methode Rank metric (ein Code-Metrik ähnlich Google Page Rank) erkennen und direkt von NDepend zu Reflector zu springen Holen Sie sich den disassemblierten Code in C#, VB.NET, etc.