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); } } }
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); } } }
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); } }
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); } } }
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); } } }
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); } }
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); } } }
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); } } }