Próbuję napisać IL, który wywołuje metody w mscorlib, ale nie mogę wymyślić, jak uzyskać ModuleDefinition
do mscorlib, aby rzeczywiście odwoływać się do metod typu &, a dokumentacja & google brakuje.Mono-Cecil: Jak mogę uzyskać ModuleDefinition dla mscorlib?
8
A
Odpowiedz
8
Uzyskanie definicji modułu dla mscorlib jest dość łatwe. Oto prosty sposób:
ModuleDefinition corlib = ModuleDefinition.ReadModule (typeof (object).Module.FullyQualifiedName);
Ale jeśli wstrzyknąć kod, który jest wywołanie metody w mscorlib, nie koniecznie trzeba załadować moduł siebie. Na przykład:
MethodDefinition method = ...;
ILProcessor il = method.Body.GetILProcessor();
Instruction call_writeline = il.Create (
OpCodes.Call,
method.Module.Import (typeof (Console).GetMethod ("WriteLine", Type.EmptyTypes)));
Tworzy instrukcję wywołania Console.WriteLine();
Jeśli chodzi o dokumentację, przeczytaj stronę importing na wiki.
Ekscelencjo, dzięki! Nie zdawałem sobie sprawy, że możesz również używać obiektów odbicia .NET. Dokumentacja Cecila jest dość trudna do zdobycia:/ – thecoop
Należy pamiętać, że ten kod zaimportuje metodę z pliku mscorlib dla wersji .NET zespołu wykonującego. Jeśli więc otworzysz zestaw .NET 2.0 i zmodyfikujesz go, uruchamiając powyższy kod w .NET 4.0, zmodyfikowany zestaw będzie zawierał odniesienia do 2.0 i 4.0 mscorlib, co prawdopodobnie nie jest zamierzone. –