Ejemplo n.º 1
0
 public void Setup()
 {
     assemblyList           = new AssemblyList();
     testAssembly           = assemblyList.OpenAssembly(typeof(MethodUsesAnalyzerTests).Assembly.Location);
     testAssemblyTypeSystem = new DecompilerTypeSystem(testAssembly.GetPEFileOrNull(), testAssembly.GetAssemblyResolver());
     language = new CSharpLanguage();
 }
Ejemplo n.º 2
0
            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));
            }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
 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();
 }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
                }
            }
        }
Ejemplo n.º 8
0
        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));
        }
Ejemplo n.º 9
0
        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);
                }
            }
        }
Ejemplo n.º 10
0
        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));
        }
Ejemplo n.º 11
0
            public MetadataReader FindAssembly(MetadataReader metadataReader, AssemblyReferenceHandle assemblyReferenceHandle, string parentFile)
            {
                LoadedAssembly loadedAssembly = this.loadedAssembly.LookupReferencedAssembly(new Decompiler.Metadata.AssemblyReference(metadataReader, assemblyReferenceHandle));

                return(loadedAssembly?.GetPEFileOrNull()?.Metadata);
            }