コード例 #1
0
ファイル: Decompiler.cs プロジェクト: StuartSmith/dnEditor
 private void PopulateFields(DecompilerObject decompilerObject, TypeDef type)
 {
     foreach (var fieldDef in type.Fields)
     {
         var decompilerField = new DecompilerField();
         decompilerField.Name = fieldDef.Name;
         decompilerObject.Fields.Add(decompilerField);
     }
 }
コード例 #2
0
ファイル: Decompiler.cs プロジェクト: StuartSmith/dnEditor
 private void PopulateEvents(DecompilerObject decompilerObject, TypeDef type)
 {
     foreach (var EventDef in type.Events)
     {
         var decompilerEvent = new DecompilerEvent();
         decompilerEvent.Name = EventDef.Name;
         decompilerObject.Events.Add(decompilerEvent);
     }
 }
コード例 #3
0
ファイル: Decompiler.cs プロジェクト: StuartSmith/dnEditor
        private void Decompile(string PathAndAssemblyFile)
        {
            var decompilerObjects = new List <DecompilerObject>();

            //string version  = FileVersionInfo.GetVersionInfo(PathAndAssemblyFile).FileVersion;

            _manifestModule = ModuleDefMD.Load(File.ReadAllBytes(PathAndAssemblyFile));
            AssemblyDefinition assembly = Translate_From_ModuleDefMD_To_AssemblyDefinition(_manifestModule);


            if (_manifestModule.Types.Any())
            {
                foreach (TypeDef type in _manifestModule.Types.OrderBy(t => t.Name.ToLower()))
                {
                    var decompilerObject = new DecompilerObject();
                    decompilerObject.Namespace = type.Namespace;
                    decompilerObject.Name      = type.Name;

                    PopulateEvents(decompilerObject, type);
                    PopulateFields(decompilerObject, type);
                    PopulateMethods(decompilerObject, type, assembly);

                    decompilerObjects.Add(decompilerObject);
                }
            }

            var contentsToWriteToFile = Newtonsoft.Json.JsonConvert.SerializeObject(decompilerObjects, Newtonsoft.Json.Formatting.Indented);


            var fullpath = Path.GetDirectoryName(PathAndAssemblyFile);
            var fileName = Path.GetFileNameWithoutExtension(PathAndAssemblyFile);

            string JsonOutputDir = Path.Combine(new string[] { fullpath, "JSON" });

            if (!Directory.Exists(JsonOutputDir))
            {
                Directory.CreateDirectory(JsonOutputDir);
            }

            string JsonOuputFile = Path.Combine(new string[] { fullpath, "JSON", fileName + ".JSON" });

            contentsToWriteToFile = contentsToWriteToFile.Replace("\\r\\r\\n", Environment.NewLine);
            contentsToWriteToFile = contentsToWriteToFile.Replace("\\t", "\t");

            File.WriteAllText(JsonOuputFile, contentsToWriteToFile);

            Console.WriteLine("");
            Console.WriteLine(JsonOuputFile);
        }
コード例 #4
0
ファイル: Decompiler.cs プロジェクト: StuartSmith/dnEditor
        private void PopulateMethods(DecompilerObject decompilerObject, TypeDef type, AssemblyDefinition assembly)
        {
            foreach (var methodDef in type.Methods)
            {
                Console.Write("...");
                var decompilerMethod = new DecompilerMethod();
                decompilerMethod.Name = methodDef.Name;

                object MonoMethod = Translate_From_DNLib_MethodDef_To_Mono_MethodDefinition(methodDef, assembly);

                if (MonoMethod != null)
                {
                    var mtp = (IMetadataTokenProvider)MonoMethod;
                    MonoMethod = assembly.MainModule.LookupToken(mtp.MetadataToken);
                    DefaultAssemblyResolver bar     = GlobalAssemblyResolver.Instance;
                    bool savedRaiseResolveException = true;
                    try
                    {
                        if (bar != null)
                        {
                            savedRaiseResolveException = bar.RaiseResolveException;
                            bar.RaiseResolveException  = false;
                        }
                        var il = new ILSpyTextDecompiler();

                        decompilerMethod.Sourcecode = il.Decompile(MonoMethod);
                        string srcCode = decompilerMethod.Sourcecode.Replace("\n\r", Environment.NewLine);
                        srcCode = srcCode.Replace("\n", Environment.NewLine);
                        decompilerMethod.Sourcecode = srcCode;
                    }
                    catch
                    {
                    }
                }
                decompilerObject.Methods.Add(decompilerMethod);
            }
        }