Frage

Ich brauche ein relativ kleines Programm zu parsen .net ausführbaren Dateien zu schreiben und die Liste der Anrufe an externen Methoden zu erzeugen. Zum Beispiel, wenn System.Console.WriteLine wird in der Datei das Tool namens sollte, dass System.Console.WriteLine drucken irgendwo genannt wird. Ich kann nicht (begrenzte Gehirn und Zeit) und brauchen nicht (alles was ich brauche ist eine Liste der Anrufe) implementieren eine echte Demontage. Ich möchte ein grep freundlich perl freundlich relativ kurze Lösung, die die Namen der Funktionen aufgerufen und den Offset schreibt, wo der Anruf passiert ist.

Dinge, die ich schon versucht:

  1. Download-Spezifikationen von MSDN. Jetzt weiß ich, dass statischer Aufruf zu 0x28 in Bytecode übersetzt wird. :) Es wird von Methodenbeschreiber gefolgt, aber das Verständnis, was Mittel Methodenbeschreiber wahrscheinlich erfordern die gesamte Spezifikation lesen.

  2. Öffnen einfache exe in Reflector. Reflector reproduziert genau den Code meiner ursprünglichen Anwendung und doch kann ich den Bytecode für die Anrufe nicht sehen.

Ist es möglich, die gewünschte begrenzte Funktionalität mit begrenzten Zeit und Wissen zu implementieren?

Wenn ja, was weiß ich es umsetzen? Gibt es eine "CIL Montage für Dummies" Leitfaden?

War es hilfreich?

Lösung

Wenn Sie etwas wollen, grep / perl-freundlich, Verwendung ildasm (in seinem Kommandozeilen-Modus das heißt mit / oder / Text), um den Byte-Code zu textuellen IL zu zerlegen. Sie können dann mit grep, perl oder der Sprache Ihrer Wahl Anruf Anweisungen ausfindig zu machen. (Grep würde wahrscheinlich nicht zu identifizieren ausreicht, welche Methoden der Aufrufbefehle in angeordnet waren, aber Perl sollte in der Lage sein.)

Andere Tipps

Das Ceci l Projekt ist eine Bibliothek, genau das zu tun, was Sie wollen.

Die Infrastruktur Gemeinsame Compiler könnte auch Ihnen helfen: http://ccimetadata.codeplex.com/ .

Ich würde itowlson Vorschlag an zweiter Stelle zerlegen nur die Montage in eine .il Datei und analysieren es grep verwenden, wenn das ist, was Sie suchen. Da ILDasm vollständigen Namensraum für alle Arten zeigen sollen Sie beable es ziemlich schnell, um herauszufinden, ob es Ihre Art oder ein referenzierte Typ ist.

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