Exemple #1
0
        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());
        }
Exemple #2
0
        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()));*/
                }
            }
        }
Exemple #3
0
 static DebugSignatureReader()
 {
     noOwnerModule = new ModuleDefUser();
     corLibTypes   = new CorLibTypes(noOwnerModule);
 }
 public Microsoft.Cci.INamedTypeReference GetCorLibType(CorLibTypes.TypeId type)
 {
     return sourceModule.ContainingAssembly.GetCorLibType(type);
 }