public static void DisassembleFile(DisassembleFileOptions options, TextWriter output) { var writer = options.IsVerbose ? MessageWriter.From(output) : MessageWriter.Empty; List <Disassembler> disassemblers; try { disassemblers = GetFileDisassemblers(options, writer); } catch { writer.WriteLine("failed!"); throw; } using (var dt = DataTarget.AttachToProcess(Process.GetCurrentProcess().Id, UInt32.MaxValue, AttachFlag.Passive)) { var clr = dt.ClrVersions.Single(); output.WriteLine( "; {0:G} CLR {1} ({2}) on {3}.", clr.Flavor, clr.Version, Path.GetFileName(clr.ModuleInfo.FileName), clr.DacInfo.TargetArchitecture.ToString("G").ToLowerInvariant() ); var runtime = clr.CreateRuntime(); foreach (var disasm in disassemblers) { output.WriteLine(); disasm.Disassemble(runtime, output); } } }