コード例 #1
0
        public override void DecompileProperty(PropertyDefinition property, ITextOutput output, DecompilationOptions options)
        {
            ReflectionDisassembler rd = CreateDisassembler(output, options);

            rd.DisassembleProperty(property);
            if (property.GetMethod != null)
            {
                output.WriteLine();
                rd.DisassembleMethod(property.GetMethod);
            }
            if (property.SetMethod != null)
            {
                output.WriteLine();
                rd.DisassembleMethod(property.SetMethod);
            }
            foreach (var m in property.OtherMethods)
            {
                output.WriteLine();
                rd.DisassembleMethod(m);
            }
        }
コード例 #2
0
        public override void DecompileMethod(MethodDefinition method, ITextOutput output, DecompilationOptions options)
        {
            var dis = CreateDisassembler(output, options);

            dis.DisassembleMethod(method);
        }
コード例 #3
0
        public override void DecompileField(FieldDefinition field, ITextOutput output, DecompilationOptions options)
        {
            var dis = CreateDisassembler(output, options);

            dis.DisassembleField(field);
        }
コード例 #4
0
        public override void DecompileAssembly(LoadedAssembly assembly, ITextOutput output, DecompilationOptions options)
        {
            output.WriteLine("// " + assembly.FileName);
            output.WriteLine();

            var dis    = CreateDisassembler(output, options);
            var module = assembly.GetModuleDefinitionAsync().Result;

            if (options.FullDecompilation)
            {
                dis.WriteAssemblyReferences(module);
            }
            if (module.Assembly != null)
            {
                dis.WriteAssemblyHeader(module.Assembly);
            }
            output.WriteLine();
            dis.WriteModuleHeader(module);
            if (options.FullDecompilation)
            {
                output.WriteLine();
                output.WriteLine();
                dis.WriteModuleContents(module);
            }
        }
コード例 #5
0
 protected virtual ReflectionDisassembler CreateDisassembler(ITextOutput output, DecompilationOptions options)
 {
     return(new ReflectionDisassembler(output, options.CancellationToken)
     {
         DetectControlStructure = detectControlStructure,
         ShowSequencePoints = options.DecompilerSettings.ShowDebugInfo,
         ExpandMemberDefinitions = options.DecompilerSettings.ExpandMemberDefinitions
     });
 }
コード例 #6
0
        public override void DecompileNamespace(string nameSpace, IEnumerable <TypeDefinition> types, ITextOutput output, DecompilationOptions options)
        {
            var dis = CreateDisassembler(output, options);

            dis.DisassembleNamespace(nameSpace, types);
        }
コード例 #7
0
        public override void DecompileType(TypeDefinition type, ITextOutput output, DecompilationOptions options)
        {
            var dis = CreateDisassembler(output, options);

            dis.DisassembleType(type);
        }
コード例 #8
0
            public override void DecompileMethod(MethodDefinition method, ITextOutput output, DecompilationOptions options)
            {
                base.DecompileMethod(method, output, options);
                if (!method.HasBody)
                {
                    return;
                }
                var      typeSystem = new DecompilerTypeSystem(method.Module);
                ILReader reader     = new ILReader(typeSystem);

                reader.WriteTypedIL(method.Body, typeSystem.Resolve(method), output, options.CancellationToken);
            }
コード例 #9
0
 public override void DecompileMethod(MethodDefinition method, ITextOutput output, DecompilationOptions options)
 {
     base.DecompileMethod(method, output, options);
     new ReflectionDisassembler(output, options.CancellationToken).DisassembleMethodHeader(method);
     output.WriteLine();
     output.WriteLine();
 }
コード例 #10
0
            public override void DecompileMethod(MethodDefinition method, ITextOutput output, DecompilationOptions options)
            {
                base.DecompileMethod(method, output, options);
                if (!method.HasBody)
                {
                    return;
                }
                var typeSystem             = new DecompilerTypeSystem(method.Module);
                var specializingTypeSystem = typeSystem.GetSpecializingTypeSystem(new SimpleTypeResolveContext(typeSystem.Resolve(method)));
                var reader = new ILReader(specializingTypeSystem);

                reader.UseDebugSymbols = options.DecompilerSettings.UseDebugSymbols;
                ILFunction il         = reader.ReadIL(method.Body, options.CancellationToken);
                var        namespaces = new HashSet <string>();
                var        decompiler = new CSharpDecompiler(typeSystem, options.DecompilerSettings)
                {
                    CancellationToken = options.CancellationToken
                };
                ILTransformContext context = decompiler.CreateILTransformContext(il);

                context.Stepper.StepLimit = options.StepLimit;
                context.Stepper.IsDebug   = options.IsDebug;
                try {
                    il.RunTransforms(transforms, context);
                } catch (StepLimitReachedException) {
                } catch (Exception ex) {
                    output.WriteLine(ex.ToString());
                    output.WriteLine();
                    output.WriteLine("ILAst after the crash:");
                } finally {
                    // update stepper even if a transform crashed unexpectedly
                    if (options.StepLimit == int.MaxValue)
                    {
                        Stepper = context.Stepper;
                        OnStepperUpdated(new EventArgs());
                    }
                }
                (output as ISmartTextOutput)?.AddButton(Images.ViewCode, "Show Steps", delegate {
                    DebugSteps.Show();
                });
                output.WriteLine();
                il.WriteTo(output, DebugSteps.Options);
            }