示例#1
0
        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);
                }
            }
        }