public async Task Zot() { var sc = new ServiceContainer(); var plSvc = new PluginLoaderService(); sc.AddService <IPluginLoaderService>(plSvc); var fsSvc = new FileSystemServiceImpl(); sc.AddService <IFileSystemService>(fsSvc); var cfgSvc = RekoConfigurationService.Load(sc, @"D:\dev\uxmal\reko\extras\parallel\UnitTests\bin\Debug\net5.0\reko\reko.config"); sc.AddService <IConfigurationService>(cfgSvc); var listener = new NullDecompilerEventListener(); sc.AddService <DecompilerEventListener>(listener); var dechost = new Reko.DecompiledFileService(sc, fsSvc, listener); sc.AddService <IDecompiledFileService>(dechost); var tlSvc = new TypeLibraryLoaderServiceImpl(sc); sc.AddService <ITypeLibraryLoaderService>(tlSvc); var loader = new Reko.Loading.Loader(sc); var program = (Program)loader.Load(ImageLocation.FromUri(@"D:\dev\uxmal\reko\users\smx-zoo\RELEASE_MIPS\RELEASE")); var project = Project.FromSingleProgram(program); var reko = new Reko.Decompiler(project, sc); TryFindSegment(program, ".text", out var seg); var scanner = new Scanner(seg.MemoryArea); var result = await scanner.ScanAsync(program.EntryPoints.Values); Console.Write(result.B.Count); }
public void WriteGlobals(Program program, string filename, TextWriter w) { var headerfile = DecompiledFileService.GenerateDerivedFilename(program, ".h"); WriteHeaderComment(filename, program, w); w.WriteLine("#include \"{0}\"", headerfile); w.WriteLine(); var gdw = new GlobalDataWriter(program, new TextFormatter(w), true, true, services); gdw.Write(); w.WriteLine(); }
public void WriteDecompiledObjects(Program program, string filename, IEnumerable <IAddressable> objects, TextWriter w) { WriteHeaderComment(filename, program, w); //$REFACTOR: common code -- hardwired ".h" var headerfile = DecompiledFileService.GenerateDerivedFilename(program, ".h"); w.WriteLine("#include \"{0}\"", headerfile); w.WriteLine(); var fmt = new AbsynCodeFormatter(new TextFormatter(w)); var gdw = new GlobalDataWriter(program, fmt.InnerFormatter, false, true, this.services); IAddressable?prev = null; foreach (var o in objects) { if (o is Procedure proc) { try { if (prev is GlobalVariable) { w.WriteLine(); } WriteProcedureHeader(program, proc, w); fmt.Write(proc); w.WriteLine(); } catch (Exception ex) { w.WriteLine(); w.WriteLine("// Exception {0} when writing procedure.", ex.Message); } } else if (o is GlobalVariable global) { gdw.WriteGlobalVariable(global.Address, global.DataType, global.Name); } } }