コード例 #1
0
ファイル: VBLanguage.cs プロジェクト: nakijun/dnSpy
		public override void DecompileAssembly(LoadedAssembly assembly, ITextOutput output, DecompilationOptions options, DecompileAssemblyFlags flags = DecompileAssemblyFlags.AssemblyAndModule)
		{
			if (options.FullDecompilation && options.SaveAsProjectDirectory != null) {
				HashSet<string> directories = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
				var files = WriteCodeFilesInProject(assembly.ModuleDefinition, options, directories).ToList();
				files.AddRange(WriteResourceFilesInProject(assembly, options, directories));
				WriteProjectFile(new TextOutputWriter(output), files, assembly, options);
			} else {
				bool decompileAsm = (flags & DecompileAssemblyFlags.Assembly) != 0;
				bool decompileMod = (flags & DecompileAssemblyFlags.Module) != 0;
				base.DecompileAssembly(assembly, output, options, flags);
				output.WriteLine();
				ModuleDef mainModule = assembly.ModuleDefinition;
				if (decompileMod && mainModule.Types.Count > 0) {
					output.Write("' Global type: ", TextTokenType.Comment);
					output.WriteReference(IdentifierEscaper.Escape(mainModule.GlobalType.FullName), mainModule.GlobalType, TextTokenType.Comment);
					output.WriteLine();
				}
				if (decompileMod || decompileAsm)
					PrintEntryPoint(assembly, output);
				if (decompileMod) {
					WriteCommentLine(output, "Architecture: " + CSharpLanguage.GetPlatformDisplayName(mainModule));
					if (!mainModule.IsILOnly) {
						WriteCommentLine(output, "This assembly contains unmanaged code.");
					}
					string runtimeName = ICSharpCode.ILSpy.CSharpLanguage.GetRuntimeDisplayName(mainModule);
					if (runtimeName != null) {
						WriteCommentLine(output, "Runtime: " + runtimeName);
					}
				}
				if (decompileMod || decompileAsm)
					output.WriteLine();
				
				// don't automatically load additional assemblies when an assembly node is selected in the tree view
				using (options.FullDecompilation ? null : LoadedAssembly.DisableAssemblyLoad()) {
					AstBuilder codeDomBuilder = CreateAstBuilder(options, currentModule: assembly.ModuleDefinition);
					codeDomBuilder.AddAssembly(assembly.ModuleDefinition, !options.FullDecompilation, decompileAsm, decompileMod);
					RunTransformsAndGenerateCode(codeDomBuilder, output, options, assembly.ModuleDefinition);
				}
			}
		}
コード例 #2
0
ファイル: ILLanguage.cs プロジェクト: gsong2014/dnSpy
        public override void DecompileAssembly(LoadedAssembly assembly, ITextOutput output, DecompilationOptions options, DecompileAssemblyFlags flags = DecompileAssemblyFlags.AssemblyAndModule)
        {
            bool decompileAsm = (flags & DecompileAssemblyFlags.Assembly) != 0;
            bool decompileMod = (flags & DecompileAssemblyFlags.Module) != 0;
            output.WriteLine("// " + assembly.FileName, TextTokenType.Comment);
            if (decompileMod || decompileAsm)
                PrintEntryPoint(assembly, output);
            output.WriteLine();

            ReflectionDisassembler rd = CreateReflectionDisassembler(output, options, assembly.ModuleDefinition);
            if (decompileMod && options.FullDecompilation)
                rd.WriteAssemblyReferences(assembly.ModuleDefinition as ModuleDefMD);
            if (decompileAsm && assembly.AssemblyDefinition != null)
                rd.WriteAssemblyHeader(assembly.AssemblyDefinition);
            if (decompileMod) {
                output.WriteLine();
                rd.WriteModuleHeader(assembly.ModuleDefinition);
                if (options.FullDecompilation) {
                    output.WriteLine();
                    output.WriteLine();
                    rd.WriteModuleContents(assembly.ModuleDefinition);
                }
            }
        }
コード例 #3
0
        public virtual void DecompileAssembly(LoadedAssembly assembly, ITextOutput output, DecompilationOptions options, DecompileAssemblyFlags flags = DecompileAssemblyFlags.AssemblyAndModule)
        {
            bool decompileAsm = (flags & DecompileAssemblyFlags.Assembly) != 0;
            bool decompileMod = (flags & DecompileAssemblyFlags.Module) != 0;

            WriteCommentLine(output, assembly.FileName);
            if (decompileAsm && assembly.AssemblyDefinition != null)
            {
                if (assembly.AssemblyDefinition.IsContentTypeWindowsRuntime)
                {
                    WriteCommentLine(output, assembly.AssemblyDefinition.Name + " [WinRT]");
                }
                else
                {
                    WriteCommentLine(output, assembly.AssemblyDefinition.FullName);
                }
            }
            else if (decompileMod)
            {
                WriteCommentLine(output, assembly.ModuleDefinition.Name);
            }
        }
コード例 #4
0
ファイル: VBLanguage.cs プロジェクト: danysu/dnSpy
        public override void DecompileAssembly(LoadedAssembly assembly, ITextOutput output, DecompilationOptions options, DecompileAssemblyFlags flags = DecompileAssemblyFlags.AssemblyAndModule)
        {
            if (options.FullDecompilation && options.SaveAsProjectDirectory != null)
            {
                HashSet <string> directories = new HashSet <string>(StringComparer.OrdinalIgnoreCase);
                var files = WriteCodeFilesInProject(assembly.ModuleDefinition, options, directories).ToList();
                files.AddRange(WriteResourceFilesInProject(assembly, options, directories));
                WriteProjectFile(new TextOutputWriter(output), files, assembly, options);
            }
            else
            {
                bool decompileAsm = (flags & DecompileAssemblyFlags.Assembly) != 0;
                bool decompileMod = (flags & DecompileAssemblyFlags.Module) != 0;
                base.DecompileAssembly(assembly, output, options, flags);
                output.WriteLine();
                ModuleDef mainModule = assembly.ModuleDefinition;
                if (decompileMod && mainModule.Types.Count > 0)
                {
                    output.Write("' Global type: ", TextTokenType.Comment);
                    output.WriteReference(IdentifierEscaper.Escape(mainModule.GlobalType.FullName), mainModule.GlobalType, TextTokenType.Comment);
                    output.WriteLine();
                }
                if (decompileMod || decompileAsm)
                {
                    PrintEntryPoint(assembly, output);
                }
                if (decompileMod)
                {
                    WriteCommentLine(output, "Architecture: " + CSharpLanguage.GetPlatformDisplayName(mainModule));
                    if (!mainModule.IsILOnly)
                    {
                        WriteCommentLine(output, "This assembly contains unmanaged code.");
                    }
                    string runtimeName = ICSharpCode.ILSpy.CSharpLanguage.GetRuntimeDisplayName(mainModule);
                    if (runtimeName != null)
                    {
                        WriteCommentLine(output, "Runtime: " + runtimeName);
                    }
                }
                if (decompileMod || decompileAsm)
                {
                    output.WriteLine();
                }

                // don't automatically load additional assemblies when an assembly node is selected in the tree view
                using (options.FullDecompilation ? null : LoadedAssembly.DisableAssemblyLoad()) {
                    AstBuilder codeDomBuilder = CreateAstBuilder(options, currentModule: assembly.ModuleDefinition);
                    codeDomBuilder.AddAssembly(assembly.ModuleDefinition, !options.FullDecompilation, decompileAsm, decompileMod);
                    RunTransformsAndGenerateCode(codeDomBuilder, output, options, assembly.ModuleDefinition);
                }
            }
        }
コード例 #5
0
ファイル: ILLanguage.cs プロジェクト: jorik041/dnSpy
        public override void DecompileAssembly(LoadedAssembly assembly, ITextOutput output, DecompilationOptions options, DecompileAssemblyFlags flags = DecompileAssemblyFlags.AssemblyAndModule)
        {
            bool decompileAsm = (flags & DecompileAssemblyFlags.Assembly) != 0;
            bool decompileMod = (flags & DecompileAssemblyFlags.Module) != 0;

            output.WriteLine("// " + assembly.FileName, TextTokenType.Comment);
            if (decompileMod || decompileAsm)
            {
                PrintEntryPoint(assembly, output);
            }
            output.WriteLine();

            ReflectionDisassembler rd = CreateReflectionDisassembler(output, options, assembly.ModuleDefinition);

            if (decompileMod && options.FullDecompilation)
            {
                rd.WriteAssemblyReferences(assembly.ModuleDefinition as ModuleDefMD);
            }
            if (decompileAsm && assembly.AssemblyDefinition != null)
            {
                rd.WriteAssemblyHeader(assembly.AssemblyDefinition);
            }
            if (decompileMod)
            {
                output.WriteLine();
                rd.WriteModuleHeader(assembly.ModuleDefinition);
                if (options.FullDecompilation)
                {
                    output.WriteLine();
                    output.WriteLine();
                    rd.WriteModuleContents(assembly.ModuleDefinition);
                }
            }
        }
コード例 #6
0
ファイル: Language.cs プロジェクト: nakijun/dnSpy
		public virtual void DecompileAssembly(LoadedAssembly assembly, ITextOutput output, DecompilationOptions options, DecompileAssemblyFlags flags = DecompileAssemblyFlags.AssemblyAndModule)
		{
			bool decompileAsm = (flags & DecompileAssemblyFlags.Assembly) != 0;
			bool decompileMod = (flags & DecompileAssemblyFlags.Module) != 0;
			WriteCommentLine(output, assembly.FileName);
			if (decompileAsm && assembly.AssemblyDefinition != null) {
				if (assembly.AssemblyDefinition.IsContentTypeWindowsRuntime) {
					WriteCommentLine(output, assembly.AssemblyDefinition.Name + " [WinRT]");
				} else {
					WriteCommentLine(output, assembly.AssemblyDefinition.FullName);
				}
			} else if (decompileMod) {
				WriteCommentLine(output, assembly.ModuleDefinition.Name);
			}
		}
コード例 #7
0
        public virtual void DecompileAssembly(DnSpyFileList dnSpyFileList, DnSpyFile file, ITextOutput output, DecompilationOptions options, DecompileAssemblyFlags flags = DecompileAssemblyFlags.AssemblyAndModule)
        {
            bool decompileAsm = (flags & DecompileAssemblyFlags.Assembly) != 0;
            bool decompileMod = (flags & DecompileAssemblyFlags.Module) != 0;

            WriteCommentLine(output, file.Filename);
            if (decompileAsm && file.AssemblyDef != null)
            {
                if (file.AssemblyDef.IsContentTypeWindowsRuntime)
                {
                    WriteCommentLine(output, file.AssemblyDef.Name + " [WinRT]");
                }
                else
                {
                    WriteCommentLine(output, file.AssemblyDef.FullName);
                }
            }
            else if (decompileMod)
            {
                WriteCommentLine(output, file.ModuleDef.Name);
            }
        }
コード例 #8
0
        public override void DecompileAssembly(DnSpyFileList dnSpyFileList, DnSpyFile file, ITextOutput output, DecompilationOptions options, DecompileAssemblyFlags flags = DecompileAssemblyFlags.AssemblyAndModule)
        {
            bool decompileAsm = (flags & DecompileAssemblyFlags.Assembly) != 0;
            bool decompileMod = (flags & DecompileAssemblyFlags.Module) != 0;

            output.WriteLine("// " + file.Filename, TextTokenType.Comment);
            if (decompileMod || decompileAsm)
            {
                PrintEntryPoint(file, output);
            }
            output.WriteLine();

            ReflectionDisassembler rd = CreateReflectionDisassembler(output, options, file.ModuleDef);

            if (decompileMod && options.FullDecompilation)
            {
                rd.WriteAssemblyReferences(file.ModuleDef);
            }
            if (decompileAsm && file.AssemblyDef != null)
            {
                rd.WriteAssemblyHeader(file.AssemblyDef);
            }
            if (decompileMod)
            {
                output.WriteLine();
                rd.WriteModuleHeader(file.ModuleDef);
                if (options.FullDecompilation)
                {
                    output.WriteLine();
                    output.WriteLine();
                    rd.WriteModuleContents(file.ModuleDef);
                }
            }
        }
コード例 #9
0
ファイル: ILLanguage.cs プロジェクト: arkanoid1/dnSpy
		public override void DecompileAssembly(DnSpyFileList dnSpyFileList, DnSpyFile file, ITextOutput output, DecompilationOptions options, DecompileAssemblyFlags flags = DecompileAssemblyFlags.AssemblyAndModule) {
			bool decompileAsm = (flags & DecompileAssemblyFlags.Assembly) != 0;
			bool decompileMod = (flags & DecompileAssemblyFlags.Module) != 0;
			output.WriteLine("// " + file.Filename, TextTokenType.Comment);
			if (decompileMod || decompileAsm)
				PrintEntryPoint(file, output);
			output.WriteLine();

			ReflectionDisassembler rd = CreateReflectionDisassembler(output, options, file.ModuleDef);
			if (decompileMod && options.FullDecompilation)
				rd.WriteAssemblyReferences(file.ModuleDef);
			if (decompileAsm && file.AssemblyDef != null)
				rd.WriteAssemblyHeader(file.AssemblyDef);
			if (decompileMod) {
				output.WriteLine();
				rd.WriteModuleHeader(file.ModuleDef);
				if (options.FullDecompilation) {
					output.WriteLine();
					output.WriteLine();
					rd.WriteModuleContents(file.ModuleDef);
				}
			}
		}
コード例 #10
0
ファイル: Language.cs プロジェクト: arkanoid1/dnSpy
		public virtual void DecompileAssembly(DnSpyFileList dnSpyFileList, DnSpyFile file, ITextOutput output, DecompilationOptions options, DecompileAssemblyFlags flags = DecompileAssemblyFlags.AssemblyAndModule) {
			bool decompileAsm = (flags & DecompileAssemblyFlags.Assembly) != 0;
			bool decompileMod = (flags & DecompileAssemblyFlags.Module) != 0;
			WriteCommentLine(output, file.Filename);
			if (decompileAsm && file.AssemblyDef != null) {
				if (file.AssemblyDef.IsContentTypeWindowsRuntime) {
					WriteCommentLine(output, file.AssemblyDef.Name + " [WinRT]");
				}
				else {
					WriteCommentLine(output, file.AssemblyDef.FullName);
				}
			}
			else if (decompileMod) {
				WriteCommentLine(output, file.ModuleDef.Name);
			}
		}