Ich verwende Mono Cecil, um Code in eine andere Methode zu injizieren. Ich möchte einen Try-Catch-Block um meinen Code einfügen.
Also habe ich eine HelloWorld.exe mit einem try catch-Block geschrieben und dekompiliert.
Im Reflector für den Try-Catch sieht das so aus:
%Vor%Wie kann ich einen solchen Versuch mit Mono Cecil injizieren?
Exception-Handler mit Mono.Cecil hinzufügen ist nicht schwierig, es erfordert nur, dass Sie wissen, wie Exception-Handler in den Metadaten angeordnet sind.
Nehmen wir an, Sie haben die C # -Methode:
%Vor%Wenn Sie es dekompilieren, sollte es ungefähr so aussehen:
%Vor%Nehmen wir nun an, Sie möchten Code in diese Methode einfügen, der dem C # -Code ähnlich ist:
%Vor%Das heißt, Sie möchten den vorhandenen Code einfach in einen try-catch-Handler einfügen. Sie können es leicht mit Cecil auf diese Weise tun:
%Vor%Dieser Code manipuliert die vorherige Methode so, dass sie so aussieht:
%Vor%Wir fügen drei neue Anweisungen hinzu: einen Aufruf von Console.WriteLine, einen Befehl, um den Catch-Handler ordnungsgemäß zu beenden, und schließlich (ein Wortspiel), ein ret. Dann erstellen wir einfach eine ExceptionHandler-Instanz, die einen try catch-Handler darstellt, dessen try den vorhandenen body umfasst und dessen catch die WriteLine-Anweisung ist.
Es ist wichtig zu beachten, dass die Endeanweisung eines Bereichs nicht innerhalb des Bereichs enthalten ist. Es ist im Grunde ein [TryStart: TryEnd [Bereich.
Tags und Links c# mono.cecil