public void DecSvc_DecompilerProjectName() { IDecompilerService svc = new DecompilerService(); var loader = mr.StrictMock <ILoader>(); var host = mr.StrictMock <DecompilerHost>(); var arch = mr.StrictMock <IProcessorArchitecture>(); var platform = mr.StrictMock <Platform>(sc, arch); var fileName = "foo\\bar\\baz.exe"; var bytes = new byte[100]; var image = new LoadedImage(Address.Ptr32(0x1000), bytes); var imageMap = image.CreateImageMap(); var prog = new Program(image, imageMap, arch, platform); loader.Stub(l => l.LoadImageBytes(fileName, 0)).Return(bytes); loader.Stub(l => l.LoadExecutable(fileName, bytes, null)).Return(prog); loader.Replay(); var dec = new DecompilerDriver(loader, host, sc); mr.ReplayAll(); svc.Decompiler = dec; svc.Decompiler.Load(fileName); Assert.IsNotNull(svc.Decompiler.Project); Assert.AreEqual("baz.exe", svc.ProjectName, "Should have project name available."); mr.VerifyAll(); }
public void Execute(string[] args) { var pArgs = ProcessArguments(Console.Out, args); if (pArgs == null) return; var ldr = new Loader(services); object defaultTo; if (pArgs.TryGetValue("--default-to", out defaultTo)) { ldr.DefaultToFormat = (string)defaultTo; } var dec = new DecompilerDriver(ldr, services); if (OverridesRequested(pArgs)) { DecompileRawImage(dec, pArgs); } else if (pArgs.ContainsKey("filename")) { dec.Decompile((string)pArgs["filename"]); } else { Usage(Console.Out); } }
public void DecSvc_DecompilerProjectName() { IDecompilerService svc = new DecompilerService(); var loader = mr.StrictMock <ILoader>(); var host = mr.StrictMock <DecompilerHost>(); var arch = mr.StrictMock <IProcessorArchitecture>(); var platform = mr.StrictMock <IPlatform>(); var fileName = "foo\\bar\\baz.exe"; var bytes = new byte[100]; var mem = new MemoryArea(Address.Ptr32(0x1000), bytes); var imageMap = new ImageMap( mem.BaseAddress, new ImageSegment("code", mem, AccessMode.ReadWriteExecute)); var prog = new Program(imageMap, arch, platform); sc.AddService <DecompilerHost>(host); platform.Stub(p => p.CreateMetadata()).Return(new TypeLibrary()); loader.Stub(l => l.LoadImageBytes(fileName, 0)).Return(bytes); loader.Stub(l => l.LoadExecutable(fileName, bytes, null)).Return(prog); loader.Replay(); var dec = new DecompilerDriver(loader, sc); mr.ReplayAll(); svc.Decompiler = dec; svc.Decompiler.Load(fileName); Assert.IsNotNull(svc.Decompiler.Project); Assert.AreEqual("baz.exe", svc.ProjectName, "Should have project name available."); mr.VerifyAll(); }
public static void Main(string [] args) { var services = new ServiceContainer(); if (args.Length == 0) { services.AddService(typeof(IServiceFactory), new ServiceFactory(services)); services.AddService(typeof(IDialogFactory), new WindowsFormsDialogFactory(services)); services.AddService(typeof(IRegistryService), new WindowsFormsRegistryService()); services.AddService(typeof(ISettingsService), new WindowsFormsSettingsService(services)); var interactor = new MainFormInteractor(services); interactor.Run(); } else { var listener = NullDecompilerEventListener.Instance; services.AddService(typeof(DecompilerEventListener), listener); services.AddService(typeof(IRegistryService), new WindowsFormsRegistryService()); services.AddService(typeof(IConfigurationService), RekoConfigurationService.Load()); var ldr = new Loader(services); var dec = new DecompilerDriver(ldr, services); dec.Decompile(args[0]); } }
public void DecSvc_DecompilerProjectName() { IDecompilerService svc = new DecompilerService(); var loader = new Mock <ILoader>(); var host = new Mock <IDecompiledFileService>(); var arch = new Mock <IProcessorArchitecture>(); arch.Setup(a => a.Name).Returns("FakeArch"); var platform = new Mock <IPlatform>(); var fileName = OsPath.Relative("foo", "bar", "baz.exe"); var bytes = new byte[100]; var mem = new MemoryArea(Address.Ptr32(0x1000), bytes); var imageMap = new SegmentMap( mem.BaseAddress, new ImageSegment("code", mem, AccessMode.ReadWriteExecute)); var program = new Program(imageMap, arch.Object, platform.Object); sc.AddService <IDecompiledFileService>(host.Object); platform.Setup(p => p.CreateMetadata()).Returns(new TypeLibrary()); loader.Setup(l => l.LoadImageBytes(fileName, 0)).Returns(bytes); loader.Setup(l => l.LoadExecutable(fileName, bytes, null, null)).Returns(program); var dec = new DecompilerDriver(loader.Object, sc); svc.Decompiler = dec; svc.Decompiler.Load(fileName); Assert.IsNotNull(svc.Decompiler.Project); Assert.AreEqual("baz.exe", svc.ProjectName, "Should have project name available."); }
private void DecompileAssembler(string asmLabel, Address loadAddress) { var cfg = RekoConfigurationService.Load(); var asm = cfg.GetAssembler(asmLabel); var prog = asm.AssembleFragment(loadAddress, txtAssembler.Text + Environment.NewLine); var sc = new ServiceContainer(); var loader = new Loader(sc); DecompilerDriver decomp = new DecompilerDriver(loader, sc); var proj = new Project { Programs = { prog } }; decomp.Project = proj; decomp.ScanPrograms(); decomp.AnalyzeDataFlow(); decomp.ReconstructTypes(); decomp.StructureProgram(); decomp.WriteDecompilerProducts(); plcOutput.Text = host.DisassemblyWriter.ToString(); plcDecompiled.Text = host.DecompiledCodeWriter.ToString(); }
public void DecSvc_DecompilerProjectName() { IDecompilerService svc = new DecompilerService(); var loader = mr.StrictMock<ILoader>(); var host = mr.StrictMock<DecompilerHost>(); var arch = mr.StrictMock<IProcessorArchitecture>(); var platform = mr.StrictMock<Platform>(sc, arch); var fileName = "foo\\bar\\baz.exe"; var bytes = new byte[100]; var image = new LoadedImage(Address.Ptr32(0x1000), bytes); var imageMap = image.CreateImageMap(); var prog = new Program(image, imageMap, arch, platform); sc.AddService<DecompilerHost>(host); loader.Stub(l => l.LoadImageBytes(fileName, 0)).Return(bytes); loader.Stub(l => l.LoadExecutable(fileName, bytes, null)).Return(prog); loader.Replay(); var dec = new DecompilerDriver(loader, sc); mr.ReplayAll(); svc.Decompiler = dec; svc.Decompiler.Load(fileName); Assert.IsNotNull(svc.Decompiler.Project); Assert.AreEqual("baz.exe", svc.ProjectName, "Should have project name available."); mr.VerifyAll(); }
public static void Main(string [] args) { var services = new ServiceContainer(); if (args.Length == 0) { services.AddService(typeof(IServiceFactory), new ServiceFactory(services)); services.AddService(typeof(IDialogFactory), new WindowsFormsDialogFactory(services)); services.AddService(typeof(IRegistryService), new WindowsFormsRegistryService()); services.AddService(typeof(ISettingsService), new WindowsFormsSettingsService(services)); var interactor = new MainFormInteractor(services); interactor.Run(); } else { var host = NullDecompilerHost.Instance; var listener = NullDecompilerEventListener.Instance; services.AddService(typeof (DecompilerEventListener), listener); services.AddService(typeof(IRegistryService), new WindowsFormsRegistryService()); services.AddService(typeof(IConfigurationService), new DecompilerConfiguration()); var ldr = new Loader(services); var dec = new DecompilerDriver(ldr, services); dec.Decompile(args[0]); } }
public void Execute(string[] args) { var pArgs = ProcessArguments(Console.Out, args); if (pArgs == null) { return; } var ldr = new Loader(services); object defaultTo; if (pArgs.TryGetValue("--default-to", out defaultTo)) { ldr.DefaultToFormat = (string)defaultTo; } var dec = new DecompilerDriver(ldr, services); if (OverridesRequested(pArgs)) { DecompileRawImage(dec, pArgs); } else if (pArgs.ContainsKey("filename")) { dec.Decompile((string)pArgs["filename"]); } else { Usage(Console.Out); } }
private void DecompileRawImage(DecompilerDriver dec, Dictionary <string, object> pArgs) { var arch = config.GetArchitecture((string)pArgs["--arch"]); if (arch == null) { throw new ApplicationException(string.Format("Unknown architecture {0}", pArgs["--arch"])); } object sEnv; Platform platform; if (pArgs.TryGetValue("--env", out sEnv)) { var opEnv = config.GetEnvironment((string)sEnv); if (opEnv == null) { throw new ApplicationException(string.Format("Unknown operating environment {0}", sEnv)); } platform = opEnv.Load(services, arch); } else { platform = new DefaultPlatform(services, arch); } Address addrBase; Address addrEntry; if (!arch.TryParseAddress((string)pArgs["--base"], out addrBase)) { throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"])); } if (pArgs.ContainsKey("--entry")) { if (!arch.TryParseAddress((string)pArgs["--base"], out addrEntry)) { throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"])); } } else { addrEntry = addrBase; } var state = CreateInitialState(arch, pArgs); dec.LoadRawImage((string)pArgs["filename"], arch, platform, addrBase); dec.Project.Programs[0].EntryPoints.Add(new EntryPoint(addrEntry, state)); dec.ScanPrograms(); dec.AnalyzeDataFlow(); dec.ReconstructTypes(); dec.StructureProgram(); dec.WriteDecompilerProducts(); }
private void DecompileRawImage(DecompilerDriver dec, Dictionary <string, object> pArgs) { var arch = config.GetArchitecture((string)pArgs["--arch"]); if (arch == null) { throw new ApplicationException(string.Format("Unknown architecture {0}", pArgs["--arch"])); } object sEnv; pArgs.TryGetValue("--env", out sEnv); Address addrBase; Address addrEntry; if (!arch.TryParseAddress((string)pArgs["--base"], out addrBase)) { throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"])); } if (pArgs.ContainsKey("--entry")) { if (!arch.TryParseAddress((string)pArgs["--base"], out addrEntry)) { throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"])); } } else { addrEntry = addrBase; } var state = CreateInitialState(arch, pArgs); dec.LoadRawImage((string)pArgs["filename"], (string)pArgs["--arch"], (string)sEnv, addrBase); dec.Project.Programs[0].EntryPoints.Add( addrEntry, new ImageSymbol(addrEntry) { ProcessorState = state }); object oHeur; if (pArgs.TryGetValue("heuristics", out oHeur)) { dec.Project.Programs[0].User.Heuristics = ((string[])oHeur).ToSortedSet(); } dec.ScanPrograms(); dec.AnalyzeDataFlow(); dec.ReconstructTypes(); dec.StructureProgram(); dec.WriteDecompilerProducts(); }
public void Setup() { fsSvc = new Mock <IFileSystemService>(); var cfgSvc = new Mock <IConfigurationService>(); var tlSvc = new Mock <ITypeLibraryLoaderService>(); var host = new FakeDecompiledFileService(); sc = new ServiceContainer(); loader = new Mock <ILoader>(); sc.AddService <DecompilerEventListener>(new FakeDecompilerEventListener()); sc.AddService <IFileSystemService>(new FileSystemServiceImpl()); sc.AddService <IDecompiledFileService>(host); sc.AddService <IConfigurationService>((IConfigurationService)cfgSvc.Object); sc.AddService <ITypeLibraryLoaderService>(tlSvc.Object); decompiler = new DecompilerDriver(loader.Object, sc); }
public void DecSvc_NotifyOnChangedDecompiler() { var loader = mr.Stub<ILoader>(); var host = mr.Stub<DecompilerHost>(); mr.ReplayAll(); DecompilerDriver d = new DecompilerDriver(loader, host, sc); bool decompilerChangedEventFired = true; svc.DecompilerChanged += delegate(object o, EventArgs e) { decompilerChangedEventFired = true; }; svc.Decompiler = d; Assert.IsTrue(decompilerChangedEventFired, "Should have fired a change event"); }
public static void Main(string[] args) { var services = new ServiceContainer(); var listener = new CmdLineListener(); var config = RekoConfigurationService.Load(); var diagnosticSvc = new CmdLineDiagnosticsService(Console.Out); services.AddService <DecompilerEventListener>(listener); services.AddService <IConfigurationService>(config); services.AddService <ITypeLibraryLoaderService>(new TypeLibraryLoaderServiceImpl(services)); services.AddService <IDiagnosticsService>(diagnosticSvc); services.AddService <IFileSystemService>(new FileSystemServiceImpl()); services.AddService <DecompilerHost>(new CmdLineHost()); var ldr = new Loader(services); var decompiler = new DecompilerDriver(ldr, services); var driver = new CmdLineDriver(services, ldr, decompiler, listener); driver.Execute(args); }
public void DecSvc_NotifyOnChangedDecompiler() { var loader = new Mock <ILoader>(); var host = new Mock <IDecompiledFileService>(); sc.AddService <IDecompiledFileService>(host.Object); DecompilerDriver d = new DecompilerDriver(loader.Object, sc); bool decompilerChangedEventFired = true; svc.DecompilerChanged += delegate(object o, EventArgs e) { decompilerChangedEventFired = true; }; svc.Decompiler = d; Assert.IsTrue(decompilerChangedEventFired, "Should have fired a change event"); }
public void DecSvc_NotifyOnChangedDecompiler() { var loader = mr.Stub <ILoader>(); var host = mr.Stub <DecompilerHost>(); mr.ReplayAll(); DecompilerDriver d = new DecompilerDriver(loader, host, sc); bool decompilerChangedEventFired = true; svc.DecompilerChanged += delegate(object o, EventArgs e) { decompilerChangedEventFired = true; }; svc.Decompiler = d; Assert.IsTrue(decompilerChangedEventFired, "Should have fired a change event"); }
private void DecompileC() { string tmpName = Guid.NewGuid().ToString(); string tmpDir = Server.MapPath("tmp"); string cFile = Path.Combine(tmpDir, tmpName + ".c"); string asmFile = Path.Combine(tmpDir, tmpName + ".asm"); try { CopyCSourceToTempFile(txtAssembler.Text, cFile); if (CompileCFile(tmpDir, cFile)) { var sc = new ServiceContainer(); var ldr = new Loader(sc); var cfg = RekoConfigurationService.Load(); var asm = cfg.GetAssembler("x86-masm"); var program = asm.AssembleFragment(Address.Ptr32(0x10000000), txtAssembler.Text + Environment.NewLine); DecompilerDriver decomp = new DecompilerDriver(ldr, sc); var project = new Project { Programs = { program } }; decomp.Project = project; decomp.ScanPrograms(); decomp.AnalyzeDataFlow(); decomp.ReconstructTypes(); decomp.StructureProgram(); decomp.WriteDecompilerProducts(); plcOutput.Text = host.DisassemblyWriter.ToString(); plcDecompiled.Text = host.DecompiledCodeWriter.ToString(); } } finally { if (File.Exists(asmFile)) { File.Delete(asmFile); } } }
private void DecompileAssembler(string asmLabel, Address loadAddress) { var cfg = new DecompilerConfiguration(); var asm = cfg.GetAssembler(asmLabel); var prog = asm.AssembleFragment(loadAddress, txtAssembler.Text + Environment.NewLine); var sc = new ServiceContainer(); var loader = new Loader(sc); DecompilerDriver decomp = new DecompilerDriver(loader, sc); var proj = new Project { Programs = { prog } }; decomp.Project = proj; decomp.ScanPrograms(); decomp.AnalyzeDataFlow(); decomp.ReconstructTypes(); decomp.StructureProgram(); decomp.WriteDecompilerProducts(); plcOutput.Text = host.DisassemblyWriter.ToString(); plcDecompiled.Text = host.DecompiledCodeWriter.ToString(); }
private void DecompileRawImage(DecompilerDriver dec, Dictionary<string, object> pArgs) { var arch = config.GetArchitecture((string)pArgs["--arch"]); if (arch == null) throw new ApplicationException(string.Format("Unknown architecture {0}", pArgs["--arch"])); object sEnv; Platform platform; if (pArgs.TryGetValue("--env", out sEnv)) { var opEnv = config.GetEnvironment((string)sEnv); if (opEnv == null) throw new ApplicationException(string.Format("Unknown operating environment {0}", sEnv)); platform = opEnv.Load(services, arch); } else { platform = new DefaultPlatform(services, arch); } Address addrBase; Address addrEntry; if (!arch.TryParseAddress((string)pArgs["--base"], out addrBase)) throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"])); if (pArgs.ContainsKey("--entry")) { if (!arch.TryParseAddress((string)pArgs["--base"], out addrEntry)) throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"])); } else addrEntry = addrBase; var state = CreateInitialState(arch, pArgs); dec.LoadRawImage((string)pArgs["filename"], arch, platform, addrBase); dec.Project.Programs[0].EntryPoints.Add(new EntryPoint(addrEntry, state)); dec.ScanPrograms(); dec.AnalyzeDataFlow(); dec.ReconstructTypes(); dec.StructureProgram(); dec.WriteDecompilerProducts(); }
public TestMainFormInteractor(DecompilerDriver decompiler, IServiceProvider sp) : base(sp) { this.decompiler = decompiler; }
public void DecSvc_DecompilerProjectName() { IDecompilerService svc = new DecompilerService(); var loader = mr.StrictMock<ILoader>(); var host = mr.StrictMock<DecompilerHost>(); var arch = mr.StrictMock<IProcessorArchitecture>(); var platform = mr.StrictMock<IPlatform>(); var fileName = OsPath.Relative("foo", "bar", "baz.exe"); var bytes = new byte[100]; var mem = new MemoryArea(Address.Ptr32(0x1000), bytes); var imageMap = new SegmentMap( mem.BaseAddress, new ImageSegment("code", mem, AccessMode.ReadWriteExecute)); var prog = new Program(imageMap, arch, platform); sc.AddService<DecompilerHost>(host); platform.Stub(p => p.CreateMetadata()).Return(new TypeLibrary()); loader.Stub(l => l.LoadImageBytes(fileName, 0)).Return(bytes); loader.Stub(l => l.LoadExecutable(fileName, bytes, null)).Return(prog); loader.Replay(); var dec = new DecompilerDriver(loader, sc); mr.ReplayAll(); svc.Decompiler = dec; svc.Decompiler.Load(fileName); Assert.IsNotNull(svc.Decompiler.Project); Assert.AreEqual("baz.exe", svc.ProjectName, "Should have project name available."); mr.VerifyAll(); }
private void DecompileRawImage(DecompilerDriver dec, Dictionary<string, object> pArgs) { var arch = config.GetArchitecture((string)pArgs["--arch"]); if (arch == null) throw new ApplicationException(string.Format("Unknown architecture {0}", pArgs["--arch"])); object sEnv; pArgs.TryGetValue("--env", out sEnv); Address addrBase; Address addrEntry; if (!arch.TryParseAddress((string)pArgs["--base"], out addrBase)) throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"])); if (pArgs.ContainsKey("--entry")) { if (!arch.TryParseAddress((string)pArgs["--base"], out addrEntry)) throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"])); } else addrEntry = addrBase; var state = CreateInitialState(arch, pArgs); dec.LoadRawImage((string)pArgs["filename"], (string)pArgs["--arch"], (string) sEnv, addrBase); dec.Project.Programs[0].EntryPoints.Add( addrEntry, new ImageSymbol(addrEntry) { ProcessorState = state }); object oHeur; if (pArgs.TryGetValue("heuristics", out oHeur)) { dec.Project.Programs[0].User.Heuristics = ((string[])oHeur).ToSortedSet(); } dec.ScanPrograms(); dec.AnalyzeDataFlow(); dec.ReconstructTypes(); dec.StructureProgram(); dec.WriteDecompilerProducts(); }
private void DecompileC() { string tmpName = Guid.NewGuid().ToString(); string tmpDir = Server.MapPath("tmp"); string cFile = Path.Combine(tmpDir, tmpName + ".c"); string asmFile = Path.Combine(tmpDir, tmpName + ".asm"); try { CopyCSourceToTempFile(txtAssembler.Text, cFile); if (CompileCFile(tmpDir, cFile)) { var sc = new ServiceContainer(); var ldr = new Loader(sc); var cfg = new DecompilerConfiguration(); var asm = cfg.GetAssembler("x86-masm"); var program = asm.AssembleFragment(Address.Ptr32(0x10000000), txtAssembler.Text + Environment.NewLine); DecompilerDriver decomp = new DecompilerDriver(ldr, sc); var project = new Project { Programs = { program } }; decomp.Project = project; decomp.ScanPrograms(); decomp.AnalyzeDataFlow(); decomp.ReconstructTypes(); decomp.StructureProgram(); decomp.WriteDecompilerProducts(); plcOutput.Text = host.DisassemblyWriter.ToString(); plcDecompiled.Text = host.DecompiledCodeWriter.ToString(); } } finally { if (File.Exists(asmFile)) File.Delete(asmFile); } }