public void Setup() { mr = new MockRepository(); program = new Program(); proc = new Procedure(program.Architecture, "testProc", new Frame(PrimitiveType.Word32)); block = proc.AddBlock("l00100000"); trace = new RtlTrace(0x00100000); r0 = new Identifier("r0", PrimitiveType.Word32, new RegisterStorage("r0", 0, 0, PrimitiveType.Word32)); r1 = new Identifier("r1", PrimitiveType.Word32, new RegisterStorage("r1", 1, 0, PrimitiveType.Word32)); r2 = new Identifier("r2", PrimitiveType.Word32, new RegisterStorage("r2", 2, 0, PrimitiveType.Word32)); sp = new Identifier("sp", PrimitiveType.Word32, new RegisterStorage("sp", 15, 0, PrimitiveType.Word32)); grf = proc.Frame.EnsureFlagGroup(Registers.eflags, 3, "SCZ", PrimitiveType.Byte); var sc = new ServiceContainer(); var listener = mr.Stub <DecompilerEventListener>(); scanner = mr.StrictMock <IScanner>(); arch = mr.Stub <IProcessorArchitecture>(); program.Architecture = arch; program.SegmentMap = new SegmentMap( Address.Ptr32(0x00100000), new ImageSegment( ".text", new MemoryArea(Address.Ptr32(0x00100000), new byte[0x20000]), AccessMode.ReadExecute)); arch.Replay(); program.Platform = new DefaultPlatform(null, arch); arch.BackToRecord(); arch.StackRegister = (RegisterStorage)sp.Storage; arch.Stub(s => s.PointerType).Return(PrimitiveType.Ptr32); scanner.Stub(s => s.Services).Return(sc); sc.AddService <DecompilerEventListener>(listener); }
public void W32Mips_Trampoline() { var instrs = new List <RtlInstructionCluster>(); var frame = new Frame(PrimitiveType.Ptr32); var r9 = frame.EnsureRegister(new RegisterStorage("r9", 9, 0, PrimitiveType.Word32)); var rtl = new RtlTrace(0x123460) { m => m.Assign(r9, 0x00030000), m => m.Assign(r9, m.Mem32(m.IAdd(r9, 0x1234))), m => m.Goto(r9) }; var host = new Mock <IRewriterHost>(); var services = new Mock <IServiceProvider>(); var arch = new Mock <IProcessorArchitecture>(); var addr = Address.Ptr32(0x00031234); arch.Setup(a => a.MakeAddressFromConstant(It.IsNotNull <Constant>(), It.IsAny <bool>())).Returns(addr); host.Setup(h => h.GetImportedProcedure( It.IsNotNull <IProcessorArchitecture>(), addr, It.IsNotNull <Address>())).Returns(new ExternalProcedure("foo", new FunctionType())); var platform = new Win32MipsPlatform(services.Object, arch.Object); var result = platform.GetTrampolineDestination(rtl.StartAddress, rtl.SelectMany(c => c.Instructions), host.Object); Assert.IsNotNull(result); }
public void W32Mips_Trampoline() { var instrs = new List<RtlInstructionCluster>(); var frame = new Frame(PrimitiveType.Pointer32); var r9 = frame.EnsureRegister(new RegisterStorage("r9", 9, PrimitiveType.Word32)); var rtl = new RtlTrace(0x123460) { m => m.Assign(r9, 0x00030000), m => m.Assign(r9, m.LoadDw(m.IAdd(r9, 0x1234))), m => m.Goto(r9) }; var host = mr.Stub<IRewriterHost>(); var services = mr.Stub<IServiceProvider>(); var arch = mr.Stub<IProcessorArchitecture>(); var state = mr.Stub<ProcessorState>(); var addr = Address.Ptr32(0x00031234); arch.Stub(a => a.CreateFrame()).Return(frame); arch.Stub(a => a.CreateProcessorState()).Return(state); arch.Stub(a => a.CreateRewriter(null, null, null, null)).IgnoreArguments().Return(rtl); arch.Stub(a => a.MakeAddressFromConstant(Arg<Constant>.Is.NotNull)).Return(addr); host.Stub(h => h.GetImportedProcedure( Arg<Address>.Is.Equal(addr), Arg<Address>.Is.NotNull)).Return(new ExternalProcedure("foo", new ProcedureSignature())); mr.ReplayAll(); var platform = new Win32MipsPlatform(services, arch); var result = platform.GetTrampolineDestination(new LeImageReader(new byte[0]), host); Assert.IsNotNull(result); }
public void W32Mips_Trampoline() { var instrs = new List <RtlInstructionCluster>(); var frame = new Frame(PrimitiveType.Pointer32); var r9 = frame.EnsureRegister(new RegisterStorage("r9", 9, 0, PrimitiveType.Word32)); var rtl = new RtlTrace(0x123460) { m => m.Assign(r9, 0x00030000), m => m.Assign(r9, m.LoadDw(m.IAdd(r9, 0x1234))), m => m.Goto(r9) }; var host = mr.Stub <IRewriterHost>(); var services = mr.Stub <IServiceProvider>(); var arch = mr.Stub <IProcessorArchitecture>(); var state = mr.Stub <ProcessorState>(); var addr = Address.Ptr32(0x00031234); arch.Stub(a => a.CreateFrame()).Return(frame); arch.Stub(a => a.CreateProcessorState()).Return(state); arch.Stub(a => a.CreateRewriter(null, null, null, null)).IgnoreArguments().Return(rtl); arch.Stub(a => a.MakeAddressFromConstant(Arg <Constant> .Is.NotNull)).Return(addr); host.Stub(h => h.GetImportedProcedure( Arg <Address> .Is.Equal(addr), Arg <Address> .Is.NotNull)).Return(new ExternalProcedure("foo", new FunctionType())); mr.ReplayAll(); var platform = new Win32MipsPlatform(services, arch); var result = platform.GetTrampolineDestination(new LeImageReader(new byte[0]), host); Assert.IsNotNull(result); }
public void Setup() { mr = new MockRepository(); program = new Program(); proc = new Procedure("testProc", new Frame(PrimitiveType.Word32)); block = proc.AddBlock("l00100000"); trace = new RtlTrace(0x00100000); r0 = new Identifier("r0", PrimitiveType.Word32, new RegisterStorage("r0", 0, 0, PrimitiveType.Word32)); r1 = new Identifier("r1", PrimitiveType.Word32, new RegisterStorage("r1", 1, 0, PrimitiveType.Word32)); r2 = new Identifier("r2", PrimitiveType.Word32, new RegisterStorage("r2", 2, 0, PrimitiveType.Word32)); sp = new Identifier("sp", PrimitiveType.Word32, new RegisterStorage("sp", 15, 0, PrimitiveType.Word32)); grf = proc.Frame.EnsureFlagGroup(Registers.eflags, 3, "SCZ", PrimitiveType.Byte); var sc = new ServiceContainer(); var listener = mr.Stub<DecompilerEventListener>(); scanner = mr.StrictMock<IScanner>(); arch = mr.Stub<IProcessorArchitecture>(); program.Architecture = arch; program.SegmentMap = new SegmentMap( Address.Ptr32(0x00100000), new ImageSegment( ".text", new MemoryArea(Address.Ptr32(0x00100000), new byte[0x20000]), AccessMode.ReadExecute)); arch.Replay(); program.Platform = new DefaultPlatform(null, arch); arch.BackToRecord(); arch.Stub(s => s.StackRegister).Return((RegisterStorage)sp.Storage); arch.Stub(s => s.PointerType).Return(PrimitiveType.Pointer32); scanner.Stub(s => s.Services).Return(sc); sc.AddService<DecompilerEventListener>(listener); }
public void Setup() { mr = new MockRepository(); program = new Program(); proc = new Procedure("testProc", new Frame(PrimitiveType.Word32)); block = proc.AddBlock("l00100000"); trace = new RtlTrace(0x00100000); r0 = new Identifier("r0", PrimitiveType.Word32, new RegisterStorage("r0", 0, 0, PrimitiveType.Word32)); r1 = new Identifier("r1", PrimitiveType.Word32, new RegisterStorage("r1", 1, 0, PrimitiveType.Word32)); r2 = new Identifier("r2", PrimitiveType.Word32, new RegisterStorage("r2", 2, 0, PrimitiveType.Word32)); grf = proc.Frame.EnsureFlagGroup(Registers.eflags, 3, "SCZ", PrimitiveType.Byte); scanner = mr.StrictMock<IScanner>(); arch = mr.DynamicMock<IProcessorArchitecture>(); arch.Stub(s => s.PointerType).Return(PrimitiveType.Pointer32); program.Architecture = arch; arch.Replay(); program.Platform = new DefaultPlatform(null, arch); arch.BackToRecord(); }
public void Setup() { mr = new MockRepository(); program = new Program(); proc = new Procedure("testProc", new Frame(PrimitiveType.Word32)); block = proc.AddBlock("l00100000"); trace = new RtlTrace(0x00100000); r0 = new Identifier("r0", PrimitiveType.Word32, new RegisterStorage("r0", 0, 0, PrimitiveType.Word32)); r1 = new Identifier("r1", PrimitiveType.Word32, new RegisterStorage("r1", 1, 0, PrimitiveType.Word32)); r2 = new Identifier("r2", PrimitiveType.Word32, new RegisterStorage("r2", 2, 0, PrimitiveType.Word32)); grf = proc.Frame.EnsureFlagGroup(Registers.eflags, 3, "SCZ", PrimitiveType.Byte); scanner = mr.StrictMock <IScanner>(); arch = mr.DynamicMock <IProcessorArchitecture>(); arch.Stub(s => s.PointerType).Return(PrimitiveType.Pointer32); program.Architecture = arch; arch.Replay(); program.Platform = new DefaultPlatform(null, arch); arch.BackToRecord(); }
public void Setup() { program = new Program(); trace = new RtlTrace(0x00100000); r0 = new Identifier("r0", PrimitiveType.Word32, new RegisterStorage("r0", 0, 0, PrimitiveType.Word32)); r1 = new Identifier("r1", PrimitiveType.Word32, new RegisterStorage("r1", 1, 0, PrimitiveType.Word32)); r2 = new Identifier("r2", PrimitiveType.Word32, new RegisterStorage("r2", 2, 0, PrimitiveType.Word32)); sp = new Identifier("sp", PrimitiveType.Word32, new RegisterStorage("sp", 15, 0, PrimitiveType.Word32)); var sc = new ServiceContainer(); var listener = new Mock <DecompilerEventListener>(); scanner = new Mock <IScanner>(); arch = new Mock <IProcessorArchitecture>(); arch.Setup(a => a.Name).Returns("FakeArch"); proc = new Procedure(arch.Object, "testProc", Address.Ptr32(0x00100000), new Frame(PrimitiveType.Word32)); block = proc.AddBlock(proc.EntryAddress, "l00100000"); grf = proc.Frame.EnsureFlagGroup(Registers.eflags, 3, "SCZ", PrimitiveType.Byte); program.Architecture = arch.Object; program.SegmentMap = new SegmentMap( Address.Ptr32(0x00100000), new ImageSegment( ".text", new ByteMemoryArea(Address.Ptr32(0x00100000), new byte[0x20000]), AccessMode.ReadExecute)); program.Platform = new DefaultPlatform(sc, arch.Object); arch.Setup(a => a.StackRegister).Returns((RegisterStorage)sp.Storage); arch.Setup(s => s.PointerType).Returns(PrimitiveType.Ptr32); arch.Setup(s => s.CreateFrameApplicationBuilder( It.IsAny <IStorageBinder>(), It.IsAny <CallSite>(), It.IsAny <Expression>())) .Returns((IStorageBinder frame, CallSite site, Expression callee) => new FrameApplicationBuilder(arch.Object, frame, site, callee, false)); scanner.Setup(s => s.Services).Returns(sc); sc.AddService <DecompilerEventListener>(listener.Object); }
private void Given_Trace(RtlTrace trace) { fakeArch.Test_AddTrace(trace); }
private void Given_Trace( RtlTrace trace) { fakeArch.Test_AddTrace(trace); }
public void Test_AddTrace(RtlTrace trace) { rewriters.Add(trace); }