public static void Main(string[] args) { var ctx = ModuleDef.CreateModuleContext(); //var module = ModuleDefMD.Load("/Users/mustafa/Work/digitoygames/digiplay-net/OkeyExtra/iOS/bin/iPhone/Debug/OkeyExtra.exe", ctx); //var module = ModuleDefMD.Load("/Users/mustafa/Projects/csharp/bin/Debug/csharp.exe", ctx); var module = ModuleDefMD.Load("/Users/mustafa/Work/digitoygames/digiplay-net/GinRummyExtra/Android/bin/Debug/GinRummyExtra.dll", ctx); CorLibTypes corLibTypes = new CorLibTypes(module); CPP(module); return; var buffer = new StringBuilder(); foreach (var type in module.GetTypes()) { //if (!type.FullName.StartsWith("Test")) continue; buffer.Append("Type=" + type.FullName); if (type.GenericParameters != null) { foreach (var g in type.GenericParameters) { buffer.Append(" Gen=" + g.FullName); } } buffer.Append("\n"); foreach (var f in type.Fields) { buffer.Append(" field:" + f.Name + " " + f.FieldType + "\n"); } Test(module, type, corLibTypes, buffer); if (type.NestedTypes != null) { foreach (var nt in type.NestedTypes) { buffer.Append("Type=" + nt.FullName + "\n"); foreach (var f in nt.Fields) { buffer.Append(" field:" + f.Name + " " + f.FieldType + "\n"); } Test(module, nt, corLibTypes, buffer); } } } System.IO.File.WriteAllText("il.txt", buffer.ToString()); }
static void Test(ModuleDef module, TypeDef type, CorLibTypes cl, StringBuilder buffer) { foreach (var g in type.GenericParameters) { buffer.Append("Generic: " + g + "\n"); } foreach (var m in type.Methods) { //if (!m.FullName.Contains("TestMe")) continue; buffer.Append(m.FullName + "\n"); if (m.HasBody) { foreach (var ins in m.Body.Instructions) { if (ins.OpCode.Code == dnlib.DotNet.Emit.Code.Newobj) { var member = (IMethod)ins.Operand; var method = member.MethodSig; var para = new List <(TypeSig destType, StackEntry src)>(); var parasCount = method.Params.Count; //for (int i = parasCount - 1; i >= 0; i--) // para.Add((method.Params[i], Stack.Pop())); para.Reverse(); var genSig = member.DeclaringType.TryGetGenericInstSig(); } buffer.Append(" " + ins.OpCode.Code + " : " + ins.ToString() + "\n"); } /* * var mem = new MemoryStream(); * TextWriter text = new StreamWriter(mem, Encoding.UTF8); * var importer = new ILImporter(cl, m, text, 2) { UserStrings = _userStrings, ModuleName = TypeUtils.EscapeModuleName(module.Assembly) }; * importer.ImportNormalBlocks(); * importer.ImportExceptionBlocks(); * importer.Gencode(); * Console.WriteLine(Encoding.UTF8.GetString(mem.ToArray()));*/ } } }
static DebugSignatureReader() { noOwnerModule = new ModuleDefUser(); corLibTypes = new CorLibTypes(noOwnerModule); }
public Microsoft.Cci.INamedTypeReference GetCorLibType(CorLibTypes.TypeId type) { return sourceModule.ContainingAssembly.GetCorLibType(type); }