static int Main(string[] args) { string outputFile = null; string inputFile = null; MetadataTableIndex?tableToDump = null; var compatLevel = CompatLevel.None; var flags = Flags.None; if (typeof(int).Assembly.GetType("Mono.Runtime") != null) { bool printUsage = false; var p = new OptionSet() { { "help", v => printUsage = true }, { "out", v => outputFile = v }, { "assembly", v => tableToDump = MetadataTableIndex.Assembly }, { "assemblyref", v => tableToDump = MetadataTableIndex.AssemblyRef }, { "moduleref", v => tableToDump = MetadataTableIndex.ModuleRef }, }; args = p.Parse(args).ToArray(); if (printUsage) { PrintUsage(); return(0); } if (args.Length < 1) { PrintUsage(); return(1); } inputFile = args [0]; } else { foreach (var arg in args) { if (arg.StartsWith("-", StringComparison.Ordinal) || arg.StartsWith("/", StringComparison.Ordinal)) { string value; if (TryMatchOption(arg, "out", out value)) { outputFile = value; } else if (TryMatchOption(arg, "compat", out value)) { switch (value) { case "2.0": compatLevel = CompatLevel.V20; break; case "4.0": compatLevel = CompatLevel.V40; break; case "4.5": compatLevel = CompatLevel.V45; break; default: PrintUsage(); return(1); } } else if (String.Compare(arg, 1, "diffmode", 0, 8, StringComparison.OrdinalIgnoreCase) == 0) { flags |= Flags.DiffMode; } else if (IsIldasmOption(arg, "caverbal")) { flags |= Flags.Caverbal; } else if (IsIldasmOption(arg, "project")) { flags |= Flags.Project; } } else { if (inputFile != null) { PrintUsage(); return(1); } else { inputFile = arg; } } } } if (inputFile == null) { PrintUsage(); return(1); } if (tableToDump.HasValue) { var tableDumper = new TableDumper(inputFile); if (outputFile != null) { using (StreamWriter sw = new StreamWriter(outputFile, false)) { tableDumper.DumpTable(sw, tableToDump.Value); } } else { tableDumper.DumpTable(Console.Out, tableToDump.Value); } return(0); } var disassembler = new Disassembler(inputFile, outputFile, compatLevel, flags); if (outputFile != null) { Encoding enc; switch (compatLevel) { case CompatLevel.None: enc = Encoding.UTF8; break; case CompatLevel.V20: case CompatLevel.V40: // instantiate new UTF8Encoding to avoid the preamble that Encoding.UTF8 has // (note that the only non-ASCII character that we're encoding is the \uFFFD placeholder for non-ASCII characters) enc = new UTF8Encoding(); break; default: enc = Console.OutputEncoding; break; } using (StreamWriter sw = new StreamWriter(outputFile, false, enc)) { disassembler.Save(sw); } } else { disassembler.Save(Console.Out); } return(0); }
static void Main(string[] args) { string outputFile = null; string inputFile = null; var compatLevel = CompatLevel.None; var flags = Flags.None; foreach (var arg in args) { if (arg.StartsWith("-", StringComparison.Ordinal) || arg.StartsWith("/", StringComparison.Ordinal)) { string value; if (TryMatchOption(arg, "out", out value)) { outputFile = value; } else if (TryMatchOption(arg, "compat", out value)) { switch (value) { case "2.0": compatLevel = CompatLevel.V20; break; case "4.0": compatLevel = CompatLevel.V40; break; case "4.5": compatLevel = CompatLevel.V45; break; default: PrintUsage(); return; } } else if (String.Compare(arg, 1, "diffmode", 0, 8, StringComparison.OrdinalIgnoreCase) == 0) { flags |= Flags.DiffMode; } else if (IsIldasmOption(arg, "caverbal")) { flags |= Flags.Caverbal; } else if (IsIldasmOption(arg, "project")) { flags |= Flags.Project; } else { PrintUsage(); return; } } else { if (inputFile != null) { PrintUsage(); return; } else { inputFile = arg; } } } if (inputFile == null) { PrintUsage(); return; } var disassembler = new Disassembler(inputFile, outputFile, compatLevel, flags); if (outputFile != null) { Encoding enc; switch (compatLevel) { case CompatLevel.None: enc = Encoding.UTF8; break; case CompatLevel.V20: case CompatLevel.V40: // instantiate new UTF8Encoding to avoid the preamble that Encoding.UTF8 has // (note that the only non-ASCII character that we're encoding is the \uFFFD placeholder for non-ASCII characters) enc = new UTF8Encoding(); break; default: enc = Console.OutputEncoding; break; } using (StreamWriter sw = new StreamWriter(outputFile, false, enc)) { disassembler.Save(sw); } } else { disassembler.Save(Console.Out); } }
static void Main(string[] args) { string outputFile = null; string inputFile = null; var compatLevel = CompatLevel.None; foreach (var arg in args) { if (arg.StartsWith("-", StringComparison.Ordinal) || arg.StartsWith("/", StringComparison.Ordinal)) { string value; if (TryMatchOption(arg, "out", out value)) { outputFile = value; } else if (TryMatchOption(arg, "compat", out value)) { switch (value) { case "2.0": compatLevel = CompatLevel.V20; break; case "4.0": compatLevel = CompatLevel.V40; break; case "4.5": compatLevel = CompatLevel.V45; break; default: PrintUsage(); return; } } else { PrintUsage(); return; } } else { if (inputFile != null) { PrintUsage(); return; } else { inputFile = arg; } } } if (inputFile == null) { PrintUsage(); return; } var disassembler = new Disassembler(inputFile, outputFile, compatLevel); if (outputFile != null) { using (StreamWriter sw = new StreamWriter(outputFile, false, Encoding.ASCII)) { disassembler.Save(sw); } } else { disassembler.Save(Console.Out); } }
static int Main(string[] args) { string outputFile = null; string inputFile = null; var compatLevel = CompatLevel.None; var flags = Flags.None; foreach (var arg in args) { if (arg.StartsWith("-", StringComparison.Ordinal) || arg.StartsWith("/", StringComparison.Ordinal)) { string value; if (TryMatchOption(arg, "out", out value)) { outputFile = value; } else if (TryMatchOption(arg, "compat", out value)) { switch (value) { case "2.0": compatLevel = CompatLevel.V20; break; case "4.0": compatLevel = CompatLevel.V40; break; case "4.5": compatLevel = CompatLevel.V45; break; default: PrintUsage(); return(1); } } else if (String.Compare(arg, 1, "diffmode", 0, 8, StringComparison.OrdinalIgnoreCase) == 0) { flags |= Flags.DiffMode; } else if (IsIldasmOption(arg, "caverbal")) { flags |= Flags.Caverbal; } else if (IsIldasmOption(arg, "project")) { flags |= Flags.Project; } } else { if (inputFile != null) { PrintUsage(); return(1); } else { inputFile = arg; } } } if (inputFile == null) { PrintUsage(); return(1); } var disassembler = new Disassembler(inputFile, outputFile, compatLevel, flags); if (outputFile != null) { Encoding enc; switch (compatLevel) { case CompatLevel.None: enc = Encoding.UTF8; break; case CompatLevel.V20: case CompatLevel.V40: // instantiate new UTF8Encoding to avoid the preamble that Encoding.UTF8 has // (note that the only non-ASCII character that we're encoding is the \uFFFD placeholder for non-ASCII characters) enc = new UTF8Encoding(); break; default: enc = Console.OutputEncoding; break; } using (StreamWriter sw = new StreamWriter(outputFile, false, enc)) { disassembler.Save(sw); } } else { disassembler.Save(Console.Out); } return(0); }