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); } }
public override void DecompileMethod(MethodDefinition method, ITextOutput output, DecompilationOptions options) { var dis = CreateDisassembler(output, options); dis.DisassembleMethod(method); }
public override void DecompileField(FieldDefinition field, ITextOutput output, DecompilationOptions options) { var dis = CreateDisassembler(output, options); dis.DisassembleField(field); }
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); } }
protected virtual ReflectionDisassembler CreateDisassembler(ITextOutput output, DecompilationOptions options) { return(new ReflectionDisassembler(output, options.CancellationToken) { DetectControlStructure = detectControlStructure, ShowSequencePoints = options.DecompilerSettings.ShowDebugInfo, ExpandMemberDefinitions = options.DecompilerSettings.ExpandMemberDefinitions }); }
public override void DecompileNamespace(string nameSpace, IEnumerable <TypeDefinition> types, ITextOutput output, DecompilationOptions options) { var dis = CreateDisassembler(output, options); dis.DisassembleNamespace(nameSpace, types); }
public override void DecompileType(TypeDefinition type, ITextOutput output, DecompilationOptions options) { var dis = CreateDisassembler(output, options); dis.DisassembleType(type); }
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); }
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(); }
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); }