public void Setup() { assemblyList = new AssemblyList(); testAssembly = assemblyList.OpenAssembly(typeof(MethodUsesAnalyzerTests).Assembly.Location); testAssemblyTypeSystem = new DecompilerTypeSystem(testAssembly.GetPEFileOrNull(), testAssembly.GetAssemblyResolver()); language = new CSharpLanguage(); }
public IAssemblyMetadata FindAssembly(MetadataReader metadataReader, AssemblyReferenceHandle assemblyReferenceHandle, string parentFile) { LoadedAssembly loadedAssembly = this.loadedAssembly.LookupReferencedAssembly(new Decompiler.Metadata.AssemblyReference(metadataReader, assemblyReferenceHandle)); PEReader reader = loadedAssembly?.GetPEFileOrNull()?.Reader; return(reader == null ? null : new StandaloneAssemblyMetadata(reader)); }
public string WriteResourceToFile(LoadedAssembly assembly, string fileName, Stream stream, ResourceFileHandlerContext context) { BamlDecompilerTypeSystem typeSystem = new BamlDecompilerTypeSystem(assembly.GetPEFileOrNull(), assembly.GetAssemblyResolver()); var decompiler = new XamlDecompiler(typeSystem, new BamlDecompilerSettings() { ThrowOnAssemblyResolveErrors = context.DecompilationOptions.DecompilerSettings.ThrowOnAssemblyResolveErrors }); decompiler.CancellationToken = context.DecompilationOptions.CancellationToken; var result = decompiler.Decompile(stream); var typeDefinition = result.TypeName.HasValue ? typeSystem.MainModule.GetTypeDefinition(result.TypeName.Value.TopLevelTypeName) : null; if (typeDefinition != null) { fileName = WholeProjectDecompiler.CleanUpPath(typeDefinition.ReflectionName) + ".xaml"; var partialTypeInfo = new PartialTypeInfo(typeDefinition); foreach (var member in result.GeneratedMembers) { partialTypeInfo.AddDeclaredMember(member); } context.AddPartialTypeInfo(partialTypeInfo); } else { fileName = Path.ChangeExtension(fileName, ".xaml"); } string saveFileName = Path.Combine(context.DecompilationOptions.SaveAsProjectDirectory, fileName); Directory.CreateDirectory(Path.GetDirectoryName(saveFileName)); result.Xaml.Save(saveFileName); return(fileName); }
public string WriteResourceToFile(LoadedAssembly assembly, string fileName, Stream stream, DecompilationOptions options) { var document = BamlResourceEntryNode.LoadIntoDocument(assembly.GetPEFileOrNull(), assembly.GetAssemblyResolver(), stream, options.CancellationToken); fileName = Path.ChangeExtension(fileName, ".xaml"); document.Save(Path.Combine(options.SaveAsProjectDirectory, fileName)); return(fileName); }
public void Setup() { Stub.SetupApplication(); Options.DecompilerSettingsPanel.TestSetup(new Decompiler.DecompilerSettings()); assemblyList = new AssemblyList("Test"); testAssembly = assemblyList.OpenAssembly(typeof(MethodUsesAnalyzerTests).Assembly.Location); testAssemblyTypeSystem = new SimpleCompilation(testAssembly.GetPEFileOrNull(), assemblyList.OpenAssembly(typeof(void).Assembly.Location).GetPEFileOrNull()); language = new CSharpLanguage(); }
public string WriteResourceToFile(LoadedAssembly assembly, string fileName, Stream stream, DecompilationOptions options) { BamlDecompilerTypeSystem typeSystem = new BamlDecompilerTypeSystem(assembly.GetPEFileOrNull(), assembly.GetAssemblyResolver()); var decompiler = new XamlDecompiler(typeSystem, new BamlDecompilerSettings() { ThrowOnAssemblyResolveErrors = options.DecompilerSettings.ThrowOnAssemblyResolveErrors }); decompiler.CancellationToken = options.CancellationToken; fileName = Path.ChangeExtension(fileName, ".xaml"); var result = decompiler.Decompile(stream); result.Xaml.Save(Path.Combine(options.SaveAsProjectDirectory, fileName)); return(fileName); }
protected override void LoadChildren() { var module = LoadedAssembly.GetPEFileOrNull(); if (module == null) { // if we crashed on loading, then we don't have any children return; } typeSystem = LoadedAssembly.GetTypeSystemOrNull(DecompilerTypeSystem.GetOptions(new DecompilationOptions().DecompilerSettings)); var assembly = (MetadataModule)typeSystem.MainModule; var metadata = module.Metadata; this.Children.Add(new Metadata.MetadataTreeNode(module, this)); Decompiler.DebugInfo.IDebugInfoProvider debugInfo = LoadedAssembly.GetDebugInfoOrNull(); if (debugInfo is Decompiler.PdbProvider.PortableDebugInfoProvider ppdb) { this.Children.Add(new Metadata.DebugMetadataTreeNode(module, ppdb.IsEmbedded, ppdb.Provider.GetMetadataReader(), this)); } this.Children.Add(new ReferenceFolderTreeNode(module, this)); if (module.Resources.Any()) { this.Children.Add(new ResourceListTreeNode(module)); } foreach (NamespaceTreeNode ns in namespaces.Values) { ns.Children.Clear(); } foreach (var type in assembly.TopLevelTypeDefinitions.OrderBy(t => t.ReflectionName, NaturalStringComparer.Instance)) { var escapedNamespace = Language.EscapeName(type.Namespace); if (!namespaces.TryGetValue(type.Namespace, out NamespaceTreeNode ns)) { ns = new NamespaceTreeNode(escapedNamespace); namespaces.Add(type.Namespace, ns); } TypeTreeNode node = new TypeTreeNode(type, this); typeDict[(TypeDefinitionHandle)type.MetadataToken] = node; ns.Children.Add(node); } foreach (NamespaceTreeNode ns in namespaces.Values.OrderBy(n => n.Name, NaturalStringComparer.Instance)) { if (ns.Children.Count > 0) { this.Children.Add(ns); } } }
public override ProjectId DecompileAssembly(LoadedAssembly assembly, ITextOutput output, DecompilationOptions options) { PEFile module = assembly.GetPEFileOrNull(); ReadyToRunReaderCacheEntry cacheEntry = GetReader(assembly, module); if (cacheEntry.readyToRunReader == null) { WriteCommentLine(output, cacheEntry.failureReason); } else { ReadyToRunReader reader = cacheEntry.readyToRunReader; WriteCommentLine(output, reader.Machine.ToString()); WriteCommentLine(output, reader.OperatingSystem.ToString()); WriteCommentLine(output, reader.CompilerIdentifier); WriteCommentLine(output, "TODO - display more header information"); } return(base.DecompileAssembly(assembly, output, options)); }
protected override void LoadChildren() { var module = LoadedAssembly.GetPEFileOrNull(); if (module == null) { // if we crashed on loading, then we don't have any children return; } typeSystem = LoadedAssembly.GetTypeSystemOrNull(); var assembly = (MetadataModule)typeSystem.MainModule; var metadata = module.Metadata; this.Children.Add(new ReferenceFolderTreeNode(module, this)); if (module.Resources.Any()) { this.Children.Add(new ResourceListTreeNode(module)); } foreach (NamespaceTreeNode ns in namespaces.Values) { ns.Children.Clear(); } foreach (var type in assembly.TopLevelTypeDefinitions.OrderBy(t => t.ReflectionName, NaturalStringComparer.Instance)) { if (!namespaces.TryGetValue(type.Namespace, out NamespaceTreeNode ns)) { ns = new NamespaceTreeNode(type.Namespace); namespaces[type.Namespace] = ns; } TypeTreeNode node = new TypeTreeNode(type, this); typeDict[(TypeDefinitionHandle)type.MetadataToken] = node; ns.Children.Add(node); } foreach (NamespaceTreeNode ns in namespaces.Values.OrderBy(n => n.Name, NaturalStringComparer.Instance)) { if (ns.Children.Count > 0) { this.Children.Add(ns); } } }
public override ProjectId DecompileAssembly(LoadedAssembly assembly, ITextOutput output, DecompilationOptions options) { PEFile module = assembly.GetPEFileOrNull(); R2RReaderCacheEntry r2rReaderCacheEntry = GetReader(assembly, module); if (r2rReaderCacheEntry.r2rReader == null) { WriteCommentLine(output, r2rReaderCacheEntry.failureReason); } else { R2RReader reader = r2rReaderCacheEntry.r2rReader; WriteCommentLine(output, "TODO - display ready to run information"); // TODO: display other header information foreach (var method in reader.R2RMethods) { WriteCommentLine(output, method.SignatureString); } } return(base.DecompileAssembly(assembly, output, options)); }
public MetadataReader FindAssembly(MetadataReader metadataReader, AssemblyReferenceHandle assemblyReferenceHandle, string parentFile) { LoadedAssembly loadedAssembly = this.loadedAssembly.LookupReferencedAssembly(new Decompiler.Metadata.AssemblyReference(metadataReader, assemblyReferenceHandle)); return(loadedAssembly?.GetPEFileOrNull()?.Metadata); }