Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #5
0
 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);
 }
Example #6
0
        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();
        }
Example #7
0
        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();
        }
Example #8
0
        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);
        }
Example #9
0
 private void Given_Trace(RtlTrace trace)
 {
     fakeArch.Test_AddTrace(trace);
 }
Example #10
0
 private void Given_Trace( RtlTrace trace)
 {
     fakeArch.Test_AddTrace(trace);
 }
Example #11
0
 public void Test_AddTrace(RtlTrace trace)
 {
     rewriters.Add(trace);
 }