Esempio n. 1
0
 protected void Given_NoImportedProcedures()
 {
     host.Stub(h => h.GetImportedProcedure(null, null))
     .IgnoreArguments()
     .Return(null);
     host.Stub(h => h.GetImport(null, null))
     .IgnoreArguments()
     .Return(null);
 }
Esempio n. 2
0
        public void SparcRw_mulscc()
        {
            host.Stub(h => h.EnsurePseudoProcedure("__mulscc", PrimitiveType.Int32, 2))
            .Return(new PseudoProcedure("__mulscc", PrimitiveType.Int32, 2));

            BuildTest(0x8B204009);  // mulscc  %g1,%o1,%g5
            AssertCode(
                "0|00100000(4): 2 instructions",
                "1|L--|g5 = __mulscc(g1, o1)",
                "2|L--|NZVC = cond(g5)");
        }
Esempio n. 3
0
        public void Siq_Terminate()
        {
            Given_x86_Image(m =>
            {
                m.Hlt();
                m.Mov(m.eax, 0);
                m.Ret();
            });
            CreateScanner();
            host.Stub(h => h.PseudoProcedure(
                          Arg <string> .Is.Equal("__hlt"),
                          Arg <ProcedureCharacteristics> .Is.NotNull,
                          Arg <DataType> .Is.NotNull,
                          Arg <Expression> .Is.Anything)).
            Return(new Application(
                       new ProcedureConstant(
                           new UnknownType(),
                           new PseudoProcedure("__hlt", VoidType.Instance, 0)),
                       VoidType.Instance));
            mr.ReplayAll();

            siq.ScanInstructions(sr);
            var blocks = siq.BuildBasicBlocks(sr);

            blocks = siq.RemoveInvalidBlocks(sr, blocks);

            var from = blocks.Values.Single(n => n.id == Address.Ptr32(0x00100000));
            var to   = blocks.Values.Single(n => n.id == Address.Ptr32(0x00100001));

            Assert.IsFalse(sr.FlatEdges.Any(e => e.first == from.id && e.second == to.id));
        }
Esempio n. 4
0
 protected void Given_RewriterHost()
 {
     host = mr.Stub<IRewriterHost>();
     host.Stub(h => h.EnsurePseudoProcedure(null, null, 0))
         .IgnoreArguments()
         .Do(new Func<string, DataType, int, PseudoProcedure>((n, dt, a) =>
         {
             return new PseudoProcedure(n, dt, a);
         }));
 }
Esempio n. 5
0
 protected void Given_RewriterHost()
 {
     host = mr.Stub <IRewriterHost>();
     host.Stub(h => h.EnsurePseudoProcedure(null, null, 0))
     .IgnoreArguments()
     .Do(new Func <string, DataType, int, PseudoProcedure>((n, dt, a) =>
     {
         return(new PseudoProcedure(n, dt, a));
     }));
 }
Esempio n. 6
0
        public void SparcRw_mulscc()
        {
            host.Stub(h => h.PseudoProcedure(
                          Arg <string> .Is.Equal("__mulscc"),
                          Arg <DataType> .Is.Equal(VoidType.Instance),
                          Arg <Expression[]> .Is.NotNull))
            .Return(new Application(
                        new ProcedureConstant(
                            PrimitiveType.Ptr32,
                            new PseudoProcedure("__mulscc", PrimitiveType.Int32, 2)),
                        VoidType.Instance,
                        Constant.Word32(0x19)));

            BuildTest(0x8B204009);  // mulscc  %g1,%o1,%g5
            AssertCode(
                "0|L--|00100000(4): 2 instructions",
                "1|L--|g5 = __mulscc(g1, o1)",
                "2|L--|NZVC = cond(g5)");
        }
Esempio n. 7
0
 protected void Given_RewriterHost()
 {
     host = mr.Stub <IRewriterHost>();
     host.Stub(h => h.EnsurePseudoProcedure(null, null, 0))
     .IgnoreArguments()
     .Do(new Func <string, DataType, int, PseudoProcedure>((n, dt, a) =>
     {
         return(new PseudoProcedure(n, dt, a));
     }));
     host.Stub(h => h.PseudoProcedure(
                   Arg <string> .Is.Anything,
                   Arg <DataType> .Is.Anything,
                   Arg <Expression[]> .Is.Anything))
     .Do(new Func <string, DataType, Expression[], Expression>((n, dt, a) =>
     {
         var fn  = new FunctionType();
         var ppp = new PseudoProcedure(n, fn);
         return(new Application(new ProcedureConstant(fn, ppp),
                                dt,
                                a));
     }));
 }
Esempio n. 8
0
        private void Given_Scanner()
        {
            this.host = mr.Stub <IRewriterHost>();
            var dev = mr.Stub <DecompilerEventListener>();

            //host.Stub(h => h.EnsurePseudoProcedure(null, null, 0))
            //    .IgnoreArguments()
            //    .Return(new PseudoProcedure("<>", PrimitiveType.Word32, 2));
            host.Stub(h => h.PseudoProcedure("", VoidType.Instance, null)).IgnoreArguments().Return(null);
            host.Stub(h => h.GetImport(null, null)).IgnoreArguments().Return(null);
            host.Stub(h => h.GetImportedProcedure(null, null, null)).IgnoreArguments().Return(null);
            host.Replay();
            dev.Replay();
            var frame = program.Architecture.CreateFrame();

            this.sr = new ScanResults
            {
                Instructions    = new SortedList <Address, RtlInstructionCluster>(),
                KnownProcedures = new HashSet <Address>(),
            };
            this.sh = new ShingledScanner(program, host, frame, sr, dev);
        }