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); }
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()); }
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()); }
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()); }
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); }
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()); }
internal ILType(ILEnvironment env) { Id = IdConstant.NextTypeId(); Environment = env; }
internal ILMethod() { hashCode = IdConstant.NextMethodId(); }