Beispiel #1
0
        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);
        }
Beispiel #2
0
        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();
        }
Beispiel #3
0
        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);
                }
            }
        }