示例#1
0
        public static void Main(string[] args)
        {
            var services = new ServiceContainer();
            var listener = new CmdLineListener
            {
                Quiet = Console.IsOutputRedirected
            };
            var config        = RekoConfigurationService.Load(services);
            var diagnosticSvc = new CmdLineDiagnosticsService(Console.Out);
            var fsSvc         = new FileSystemServiceImpl();
            var dcSvc         = new DecompilerService();

            services.AddService <IDecompilerService>(dcSvc);
            services.AddService <DecompilerEventListener>(listener);
            services.AddService <IConfigurationService>(config);
            services.AddService <ITypeLibraryLoaderService>(new TypeLibraryLoaderServiceImpl(services));
            services.AddService <IDiagnosticsService>(diagnosticSvc);
            services.AddService <IFileSystemService>(fsSvc);
            services.AddService <IDecompiledFileService>(new DecompiledFileService(fsSvc));
            services.AddService <ITestGenerationService>(new TestGenerationService(services));
            var ldr        = new Loader(services);
            var decompiler = new Decompiler(ldr, services);

            dcSvc.Decompiler = decompiler;
            var driver = new CmdLineDriver(services, ldr, decompiler, listener);

            driver.Execute(args);
        }
示例#2
0
        private void RunFileTestx86_32(string relativePath, string outputFile)
        {
            Program program;
            var     sc    = new ServiceContainer();
            var     fsSvc = new FileSystemServiceImpl();
            var     el    = new FakeDecompilerEventListener();

            sc.AddService <IFileSystemService>(fsSvc);
            sc.AddService <DecompilerEventListener>(el);
            var arch = new X86ArchitectureFlat32(sc, "x86-protected-32", new Dictionary <string, object>());
            var asm  = new X86TextAssembler(arch);

            using (var rdr = new StreamReader(FileUnitTester.MapTestPath(relativePath)))
            {
                var platform = new DefaultPlatform(sc, arch);
                program          = asm.Assemble(Address.Ptr32(0x10000000), rdr);
                program.Platform = platform;
            }
            var scanner = new Scanner(program, null, sc);

            scanner.EnqueueImageSymbol(ImageSymbol.Procedure(arch, program.ImageMap.BaseAddress), true);
            scanner.ScanImage();
            using (var fut = new FileUnitTester(outputFile))
            {
                foreach (var proc in program.Procedures.Values)
                {
                    proc.Write(false, fut.TextWriter);
                }
                fut.AssertFilesEqual();
            }
        }
示例#3
0
        public void Setup()
        {
            mr            = new MockRepository();
            this.services = mr.Stub <IServiceProvider>();
            var tlSvc     = new TypeLibraryLoaderServiceImpl(services);
            var configSvc = mr.StrictMock <IConfigurationService>();
            var fsSvc     = new FileSystemServiceImpl();
            var win32env  = new OperatingEnvironmentElement
            {
                TypeLibraries =
                {
                    new TypeLibraryElement {
                        Name = "msvcrt.xml"
                    },
                    new TypeLibraryElement {
                        Name = "windows32.xml"
                    },
                }
            };

            configSvc.Stub(c => c.GetEnvironment("win32")).Return(win32env);
            configSvc.Stub(c => c.GetInstallationRelativePath(null)).IgnoreArguments()
            .Do(new Func <string, string>(s => s));
            services.Stub(s => s.GetService(typeof(ITypeLibraryLoaderService))).Return(tlSvc);
            services.Stub(s => s.GetService(typeof(IConfigurationService))).Return(configSvc);
            services.Stub(s => s.GetService(typeof(DecompilerEventListener))).Return(new FakeDecompilerEventListener());
            services.Stub(s => s.GetService(typeof(CancellationTokenSource))).Return(null);
            services.Stub(s => s.GetService(typeof(IFileSystemService))).Return(new FileSystemServiceImpl());
            services.Stub(s => s.GetService(typeof(IDiagnosticsService))).Return(new FakeDiagnosticsService());
            services.Replay();
            configSvc.Replay();
            arch  = new X86ArchitectureFlat32();
            win32 = new Reko.Environments.Windows.Win32Platform(services, arch);
        }
示例#4
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);
        }
示例#5
0
        private void symbolSourcesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var sc     = new ServiceContainer();
            var cfgSvc = new FakeConfigurationService();
            var fsSvc  = new FileSystemServiceImpl();
            var uiSvc  = new FakeDecompilerShellUiService(this);

            sc.AddService <IConfigurationService>(cfgSvc);
            sc.AddService <IFileSystemService>(fsSvc);
            sc.AddService <IDecompilerShellUiService>(uiSvc);
            var dlg = new SymbolSourceDialog();

            dlg.Services = sc;
            dlg.ShowDialog(this);
        }
        private Reko.Decompiler CreateRekoInstance(CefV8Context context)
        {
            var fsSvc    = new FileSystemServiceImpl();
            var listener = new ListenerService(context, eventListeners);
            var dfSvc    = new DecompiledFileService(fsSvc, listener);

            services.AddService(typeof(IFileSystemService), fsSvc);
            services.AddService(typeof(DecompilerEventListener), listener);
            var configSvc = RekoConfigurationService.Load(services, "reko/reko.config");

            services.AddService(typeof(IConfigurationService), configSvc);
            services.AddService(typeof(IDecompiledFileService), dfSvc);
            services.AddService(typeof(ITypeLibraryLoaderService), new TypeLibraryLoaderServiceImpl(services));
            services.AddService(typeof(IPluginLoaderService), new PluginLoaderService());
            var loader = new Reko.Loading.Loader(services);

            return(new Reko.Decompiler(loader, services));
        }
示例#7
0
 public void FS_MakeRelative_1()
 {
     fs = new FileSystemServiceImpl('/');
     Assert.AreEqual("ax", fs.MakeRelativePath("/home/ox", "/home/ax"));
 }