using System; using System.Linq; using Mono.Cecil; using Mono.Cecil.Cil; void DumpNum(MethodReference mr) { Console.WriteLine($"[{mr.Name}] HasThis={mr.HasThis} -> {mr.ReturnType.FullName} | IsValueType(ret)={mr.ReturnType.IsValueType}"); foreach (var p in mr.Parameters) Console.WriteLine($" [{p.Index}] {p.ParameterType.FullName} IsValueType={p.ParameterType.IsValueType} scope=({(p.ParameterType.Scope as AssemblyNameReference)?.Name}, {(p.ParameterType.Scope as AssemblyNameReference)?.Version})"); } var asm = AssemblyDefinition.ReadAssembly(args[0], new ReaderParameters { ReadingMode = ReadingMode.Deferred }); var mod = asm.Modules[0]; var m = mod.GetType("OpenOptions.dnaFusion.Flex.ServiceManager").Methods.First(x => x.Name == "LoadLicense" && x.Parameters.Count == 0); foreach (var ins in m.Body.Instructions) if (ins.Operand is MethodReference mr && (mr.Name == "GetTypeFromHandle" || mr.Name == "GetField" || mr.Name == "SetValue")) DumpNum(mr);