2009-03-15 17 views
15

Ich muss die IL in C# -Code konvertieren. Ich habe eine Baugruppe und lese diese Baugruppe. Ich bekomme MethodBody von MethodInfo und der methodbody hat eine Methode GetILAsByteArraY() , die ein Byte-Array zurückgibt, jetzt möchte ich diese IL in C# -Code konvertieren. Bitte helfen Sie mir bei der Lösung dieses Problems.Konvertieren von IL in C# -Code

+0

Einstimmige Entscheidung! –

+1

Wozu brauchst du das? Wenn Sie Ihre Situation etwas detaillierter beschreiben, können wir Ihnen vielleicht mehr als .NET Reflector vorschlagen. –

+1

@Anton Wir wären wahrscheinlich besser dran, diesen Hacker nicht zu verstehen. –

Antwort

20

Das Rad nicht neu erfinden; Verwenden Sie Lutz Roeder .NET Reflector.

+3

Es ist nicht mehr Lutz '. – Will

+21

Ich denke, es ist offensichtlich, dass er versucht, ein anderes Rad wie das von .NET Reflector zu erstellen, und er möchte wissen, wie es gemacht wird. Lutz sollte nicht unbedingt der einzige Mann auf der Welt sein, der weiß, wie man es macht. –

+0

@HasanKhan gegeben OP Wahl der Antwort ist er ziemlich glücklich mit Lutz, der einzige Mann :) – nawfal

1

Mal sehen, ob ich es zuerst geschafft habe: .NET Reflector! Dies sollte wirklich ein FAQ sein ...

1

Kannst du das nicht mit Reflector?

Sie können eine Assembly laden und betrachten es als VB.net/C#/IL ...

0

Es gibt kein Werkzeug in der BCL, die dies tun; Es gibt jedoch ein großartiges Tool namens Reflector, in das Sie Ihre eigenen Add-Ins schreiben können. Sie könnten das also verwenden, um die gewünschten Daten zu erhalten.

0

Reflector tut dies. Vielleicht könnten Sie Reflektor gegen Reflektor verwenden und erfahren, wie das Problem gelöst wird.

Sie könnten auch sagen, warum Sie dies tun möchten - es könnte eine bessere Lösung für Ihr Gesamtproblem geben.

+3

Reflektoren Interna wurden mit nicht druckbaren Daten verschleiert (zumindest Lutz tat das). Während ja könntest du über sich nachdenken eine bessere Frage wäre es das wirklich wert ... – JoshBerke

+0

Ja, das habe ich vermutet. Deshalb habe ich ihn gefragt, warum er das machen will. –

0

Lassen Sie mich der Erste sein, der Ihnen vorschlägt, sich eine Kopie von Red Gate's Reflector zu schnappen.

+0

Das ist wie schreien * FIRST! * Und es falsch zu bekommen .... – cjk

+1

@ck Nun, Sie beantworten eine Frage und nach dem Einreichen Submit fünfzig anderen Menschen haben bereits geantwortet. O gut ... – Will

0

Vielleicht sollten Sie Dis # versuchen, wenn Sie nicht wollen, tun Sie das Rad neu erfinden ... Es ist fast das beste Werkzeug, um den Code bei der Umwandlung von NetDASM ein Werkzeug hat, die Sie konvertieren C# IL lässt. vielleicht solltest du dir das mal ansehen.

9

Re-Erfinden des Rades sicherlich eine bessere Möglichkeit zu lernen! müssen Sie Ihre eigene Klasse erstellen, die iL in C# konvertiert. Dies erfordert das Wissen der Intermediate Sprache.

Ich nehme an, Sie haben bereits die Byte-Array zu IL Befehle umgewandelt, so wie wir in ildasm.exe sehen, Am Reflection.Emit.OpCodes, OpCode.OperandType, BitConvertor.ReadByte(), BitConvertor.ReadInt32 usw.

3

Wenn Sie es selbst machen möchten, könnten Sie vom alten Cecil.Decompiler starten und es verbessern, siehe the source code und an old post of Jb. Evain announcing the project (Link unten).

+0

Beide Links sind kaputt. –

+0

Das erste Problem behoben, kann nichts mehr mit dem zweiten tun, da ich nicht weiß, warum er seinen Blog offline gestellt hat, auch wenn er immer noch auf Twitter referenziert. –

1

Für die Suchmaschine Menschen, Reflektor ist nicht mehr kostenlos. Aber ein neuerer und besser und nicht zu erwähnen FREE Werkzeug wird von Telerik genannt JustDecompile angeboten. Ich habe es gerade heruntergeladen und es ist so toll und es ist nur Beta. Offenbar verspricht Telerik für immer frei zu sein.

15

Der Lutz Roeder Reflektor wurde gekauft und steht nicht mehr zum kostenlosen Download zur Verfügung.

Es gibt jetzt ein kostenloses (noch einmal) Tool namens ILSpy10. Ich habe festgestellt, dass es sehr gut ist, und es wird nicht nur C# -Code aus IL generieren, sondern auch ein .csproj Projekt erstellen, wenn eine gesamte DLL-Assembly dekompiliert wird.