dimanche 11 mars 2018

ResolveMethod() Returning Completely Different Method

I was resolving methods from .NET DLLs, and noticed that the method being returned by Module.ResolveMethod() is completely different from original method. I am specifying the method's exact MetadataToken, so it makes absolutely no sense to me why I would end up with anything else but the original method.

In the below example, I have the 'Dispose()' method. I grab its metadata token and resolve it, only to find that I now have the'OnBackColorChanged(System.EventArgs)'method

static void Main(string[] args)
    {
        Assembly assembly = Assembly.LoadFrom(@"C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Windows.Forms.dll");
        MethodInfo method = assembly.GetModules()[0].GetTypes()[300].GetMethods()[362];
        Console.WriteLine(method); //Returns 'Void Dispose()'

        MethodInfo method2 = (MethodInfo)assembly.GetModules()[0].ResolveMethod(method.MetadataToken);
        Console.WriteLine(method2); //Returns 'Void OnBackColorChanged(System.EventArgs)' ...why?
    }





Aucun commentaire:

Enregistrer un commentaire