Пример #1
0
        public void Idc_FloatingPointConstants()
        {
            Identifier edx = new Identifier("edx", PrimitiveType.Real32, Registers.edx);

            var ctx = new Mock <EvaluationContext>();

            ctx.Setup(c => c.GetValue(edx)).Returns(Constant.Word32(0x3E400000));

            var ic = new IdConstant(ctx.Object, new Unifier(null, null), listener);

            Assert.IsTrue(ic.Match(edx));
            var e = ic.Transform();

            AssertTypedExpression("0.1875F<real32>", e);
        }
Пример #2
0
        public void Idc_ConstantReferencePointerToInt()
        {
            var        intptr = new TypeReference("INTPTR", new Pointer(PrimitiveType.Int32, 4));
            Identifier edx    = new Identifier("edx", intptr, Registers.edx);

            var ctx = new SymbolicEvaluationContext(null, null);

            ctx.SetValue(edx, Constant.Int32(0x567));

            IdConstant ic = new IdConstant(ctx, new Unifier(null), listener);

            Assert.IsTrue(ic.Match(edx));
            Expression e = ic.Transform();

            Assert.AreEqual("00000567", e.ToString());
            Assert.AreEqual("(ptr int32)", e.DataType.ToString());
        }
Пример #3
0
        public void Idc_ConstantReferenceInt()
        {
            var        dword = new TypeReference("DWORD", PrimitiveType.Int32);
            Identifier edx   = new Identifier("edx", dword, Registers.edx);

            var ctx = new SymbolicEvaluationContext(null, null);

            ctx.SetValue(edx, Constant.Int32(321));

            IdConstant ic = new IdConstant(ctx, new Unifier(null), listener);

            Assert.IsTrue(ic.Match(edx));
            Expression e = ic.Transform();

            Assert.AreEqual("321", e.ToString());
            Assert.AreEqual("DWORD", e.DataType.ToString());
        }
Пример #4
0
        public void Idc_ConstantAddress()
        {
            var        intptr = new TypeReference("INTPTR", new Pointer(PrimitiveType.Int32, 32));
            Identifier edx    = new Identifier("edx", intptr, Registers.edx);

            var ctx = new Mock <EvaluationContext>();

            ctx.Setup(c => c.GetValue(edx)).Returns(Address.Ptr32(0x00123400));

            IdConstant ic = new IdConstant(ctx.Object, new Unifier(null, null), listener);

            Assert.IsTrue(ic.Match(edx));
            Expression e = ic.Transform();

            Assert.AreEqual("00123400", e.ToString());
            Assert.AreEqual("(ptr32 int32)", e.DataType.ToString());
        }
Пример #5
0
        public void Idc_TypeReferenceToReal64()
        {
            var r64 = new Identifier(
                "r64",
                new TypeReference("DOUBLE", PrimitiveType.Real64),
                Registers.rdx);
            var ctx = new Mock <EvaluationContext>();
            var c   = Constant.Word64(0x4028000000000000); // 12.0

            ctx.Setup(c => c.GetValue(r64)).Returns(c);

            var ic = new IdConstant(
                ctx.Object,
                new Unifier(null, null),
                listener);

            Assert.IsTrue(ic.Match(r64));
            var e = ic.Transform();

            AssertTypedExpression("12.0<DOUBLE>", e);
        }
Пример #6
0
        public void Idc_ConstantPropagate()
        {
            Identifier ds = m.Frame.EnsureRegister(Registers.ds);
            var        c  = Constant.Word16(0x1234);

            m.Assign(ds, c);
            m.SideEffect(ds);
            var           def    = m.Block.Statements[0];
            var           use    = m.Block.Statements[1];
            SsaIdentifier sid_ds = ssa.Add(ds, def, c, false);
            var           ass    = (Assignment)def.Instruction;

            ass.Dst = sid_ds.Identifier;
            ((SideEffect)use.Instruction).Expression = sid_ds.Identifier;
            sid_ds.Uses.Add(use);

            IdConstant ic = new IdConstant(new SsaEvaluationContext(null, ssa), new Unifier(null), listener);

            Assert.IsTrue(ic.Match(sid_ds.Identifier));
            Expression e = ic.Transform();

            Assert.AreEqual("selector", e.DataType.ToString());
        }
Пример #7
0
 internal ILType(ILEnvironment env)
 {
     Id          = IdConstant.NextTypeId();
     Environment = env;
 }
Пример #8
0
 internal ILMethod()
 {
     hashCode = IdConstant.NextMethodId();
 }