public void Setup() { factory = new TypeFactory(); store = new TypeStore(); eqb = new EquivalenceClassBuilder(factory, store); var platform = new DefaultPlatform(null, new FakeArchitecture()); dtb = new DataTypeBuilder(factory, store, platform); }
public void Setup() { this.m = new ExpressionEmitter(); this.store = new TypeStore(); this.factory = new TypeFactory(); var arch = new FakeArchitecture(); var platform = new DefaultPlatform(null, arch); this.exa = new ExpressionTypeAscender(platform, store, factory); }
public void Oee_LoadPlatform_NoHeuristics() { var element = new OperatingEnvironmentElement { }; var platform = new DefaultPlatform(null, null); element.LoadSettingsFromConfiguration(null, platform); Assert.IsNotNull(platform.Heuristics); Assert.IsNotNull(platform.Heuristics.ProcedurePrologs); Assert.AreEqual(0, platform.Heuristics.ProcedurePrologs.Length); }
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(); var asm = new X86TextAssembler(sc, arch); using (var rdr = new StreamReader(FileUnitTester.MapTestPath(relativePath))) { var platform = new DefaultPlatform(sc, arch); asm.Platform = platform; program = asm.Assemble(Address.Ptr32(0x10000000), rdr); } var scanner = new Scanner(program, new Dictionary<Address, ProcedureSignature>(), null, sc); scanner.EnqueueEntryPoint(new EntryPoint(program.Image.BaseAddress, arch.CreateProcessorState())); scanner.ScanImage(); using (var fut = new FileUnitTester(outputFile)) { foreach (var proc in program.Procedures.Values) { proc.Write(false, fut.TextWriter); } fut.AssertFilesEqual(); } }
public void Scanner_EvenOdd() { var scan = CreateScanner(0x1000, 0x2000); var platform = new DefaultPlatform(null, program.Architecture); program.Platform = platform; fakeArch.Test_AddTraces(RtlEvenOdd.Create(fakeArch)); var proc = scan.ScanProcedure( Address.Ptr32(0x1000), "fn1000", arch.CreateProcessorState()); var sExp = @"// fn1000 // Return size: 4 void fn1000() fn1000_entry: l00001000: r63 = fp r1 = 0x00000003 r63 = r63 - 0x00000004 Mem0[r63:word32] = r1 call fn00001200 (retsize: 4;) r63 = r63 + 0x00000008 r1 = 0x00000003 r63 = r63 - 0x00000004 Mem0[r63:word32] = r1 call fn00001100 (retsize: 4;) r63 = r63 + 0x00000008 return fn1000_exit: // fn00001100 // Return size: 0 void fn00001100() fn00001100_entry: l00001100: r63 = fp r1 = Mem0[r63 + 0x00000004:word32] branch r1 == 0x00000000 l00001120 goto l00001108 l00001100: l00001108: r1 = Mem0[r63 + 0x00000004:word32] r1 = r1 - 0x00000001 Mem0[r63 + 0x00000004:word32] = r1 l00001114_thunk_fn00001200: call fn00001200 (retsize: 0;) return l00001120: r1 = 0x00000000 return fn00001100_exit: // fn00001200 // Return size: 0 void fn00001200() fn00001200_entry: l00001200: r63 = fp r1 = Mem0[r63 + 0x00000004:word32] branch r1 == 0x00000000 l00001220 l00001208: r1 = Mem0[r63 + 0x00000004:word32] r1 = r1 - 0x00000001 Mem0[r63 + 0x00000004:word32] = r1 l00001214_thunk_fn00001100: call fn00001100 (retsize: 0;) return l00001220: r1 = 0x00000001 return fn00001200_exit: "; AssertProgram(sExp, program); }
private void Build(Procedure proc, IProcessorArchitecture arch) { var platform = new DefaultPlatform(null, arch); this.proc = proc; Aliases alias = new Aliases(proc, arch); alias.Transform(); SsaTransform sst = new SsaTransform(new ProgramDataFlow(), proc, proc.CreateBlockDominatorGraph()); ssa = sst.SsaState; ConditionCodeEliminator cce = new ConditionCodeEliminator(ssa.Identifiers, platform); cce.Transform(); ValuePropagator vp = new ValuePropagator(arch, ssa.Identifiers, proc); vp.Transform(); DeadCode.Eliminate(proc, ssa); Coalescer coa = new Coalescer(proc, ssa); coa.Transform(); DeadCode.Eliminate(proc, ssa); sla = new SsaLivenessAnalysis(proc, ssa.Identifiers); sla2 = new SsaLivenessAnalysis2(proc, ssa.Identifiers); sla2.Analyze(); }
void RunTest(string c_code, string expectedXml) { StringReader reader = null; StringWriter writer = null; try { reader = new StringReader(c_code); writer = new StringWriter(); var xWriter = new XmlnsHidingWriter(writer) { Formatting = Formatting.Indented }; var arch = new FakeArchitecture(); var platform = new DefaultPlatform(null, arch); var xc = new XmlConverter(reader, xWriter, platform); xc.Convert(); writer.Flush(); Assert.AreEqual(expectedXml, writer.ToString()); } catch { Debug.WriteLine(writer.ToString()); throw; } finally { if (writer != null) writer.Dispose(); if (reader != null) reader.Dispose(); } }
public Platform CreatePlatform(byte osAbi) { DefaultPlatform defaultPlatform; var dcSvc = Services.RequireService<IConfigurationService>(); switch (osAbi) { case ELFOSABI_NONE: // Unspecified ABI defaultPlatform = new DefaultPlatform(Services, arch); defaultPlatform.TypeLibraries.AddRange(LoadTypeLibraries()); return defaultPlatform; case ELFOSABI_CELL_LV2: // PS/3 //$TODO: I know nothing about that platform, so use // defaults. If you think you know better, and you think // the platform differs by a significant amount, // implement a PS/3 platform and use it here. var env = dcSvc.GetEnvironment("elf-cell-lv2"); var platform = env.Load(Services, arch); return platform; default: throw new NotSupportedException(string.Format("Unsupported ELF ABI 0x{0:X2}.", osAbi)); } }
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 void EIL_LoadCellLv2() { var opEl = mr.Stub<OperatingEnvironment>(); var platform = new DefaultPlatform(sc, arch); cfgSvc.Stub(d => d.GetEnvironment("elf-cell-lv2")).Return(opEl); opEl.Expect(o => o.Load(null, null)).IgnoreArguments().Return(platform); mr.ReplayAll(); var eil = new ElfImageLoader(sc, "foo", rawImg); eil.LoadElfIdentification(); var el = eil.CreateLoader(); el.LoadPlatform(0x66, arch); // ELFOSABI_CELL_LV2; mr.VerifyAll(); }
private void Given_VaScanner(IProcessorArchitecture arch) { var platform = new DefaultPlatform(null, arch); var segmentMap = CreateSegmentMap(0, 128); this.program = new Program(segmentMap, arch, platform); this.vafs = CreateVaScanner(program); }
private void Build(Procedure proc, IProcessorArchitecture arch) { var platform = new DefaultPlatform(null, arch); this.proc = proc; var importResolver = MockRepository.GenerateStub<IImportResolver>(); importResolver.Replay(); Aliases alias = new Aliases(proc, arch); alias.Transform(); var gr = proc.CreateBlockDominatorGraph(); SsaTransform sst = new SsaTransform( new ProgramDataFlow(), proc, null, gr, new HashSet<RegisterStorage>()); SsaState ssa = sst.SsaState; this.ssaIds = ssa.Identifiers; ConditionCodeEliminator cce = new ConditionCodeEliminator(ssa, platform); cce.Transform(); DeadCode.Eliminate(proc, ssa); ValuePropagator vp = new ValuePropagator(arch, ssa); vp.Transform(); Coalescer coa = new Coalescer(proc, ssa); coa.Transform(); DeadCode.Eliminate(proc, ssa); }