public void VpCastCast() { var m = new ProcedureBuilder(); m.Store( m.Word32(0x1234000), m.Cast( PrimitiveType.Real32, m.Cast( PrimitiveType.Real64, m.Load(PrimitiveType.Real32, m.Word32(0x123400))))); m.Return(); mr.ReplayAll(); RunFileTest(m, "Analysis/VpCastCast.txt"); }
public void VpAddress32Const() { var m = new ProcedureBuilder("VpAddress32Const"); var r1 = m.Reg32("r1", 1); m.Assign(r1, Address.Ptr32(0x00123400)); m.Assign(r1, m.Load(r1.DataType, m.IAdd(r1, 0x56))); m.Return(); mr.ReplayAll(); RunFileTest(m, "Analysis/VpAddress32Const.txt"); }
public void VpIndirectCall() { var callee = CreateExternalProcedure("foo", RegArg(1, "r1"), StackArg(4), StackArg(8)); var pc = new ProcedureConstant(PrimitiveType.Pointer32, callee); var m = new ProcedureBuilder(); var r1 = m.Reg32("r1", 1); var sp = m.Frame.EnsureRegister(m.Architecture.StackRegister); m.Assign(r1, pc); m.Assign(sp, m.ISub(sp, 4)); m.Store(sp, 3); m.Assign(sp, m.ISub(sp, 4)); m.Store(sp, m.LoadW(m.Word32(0x1231230))); m.Call(r1, 4); m.Return(); arch.Stub(a => a.CreateStackAccess(null, 0, null)) .IgnoreArguments() .Do(new Func<Frame, int, DataType, Expression>((f, off, dt) => m.Load(dt, m.IAdd(sp, off)))); mr.ReplayAll(); var ssa = RunTest(m); var sExp = #region Expected @"r1_0: orig: r1 def: r1_0 = foo r63:r63 def: def r63 uses: r63_2 = r63 - 0x00000004 Mem3[r63 - 0x00000004:word32] = 0x00000003 r63_4 = r63 - 0x00000008 Mem5[r63 - 0x00000008:word16] = Mem3[0x01231230:word16] r1_6 = foo(Mem8[r63 - 0x00000008:word32], Mem9[r63 - 0x00000004:word32]) r1_6 = foo(Mem8[r63 - 0x00000008:word32], Mem9[r63 - 0x00000004:word32]) r63_2: orig: r63 def: r63_2 = r63 - 0x00000004 Mem3: orig: Mem0 def: Mem3[r63 - 0x00000004:word32] = 0x00000003 uses: Mem5[r63 - 0x00000008:word16] = Mem3[0x01231230:word16] r63_4: orig: r63 def: r63_4 = r63 - 0x00000008 Mem5: orig: Mem0 def: Mem5[r63 - 0x00000008:word16] = Mem3[0x01231230:word16] r1_6: orig: r1 def: r1_6 = foo(Mem8[r63 - 0x00000008:word32], Mem9[r63 - 0x00000004:word32]) r63_7: orig: r63 Mem8: orig: Mem0 uses: r1_6 = foo(Mem8[r63 - 0x00000008:word32], Mem9[r63 - 0x00000004:word32]) Mem9: orig: Mem0 uses: r1_6 = foo(Mem8[r63 - 0x00000008:word32], Mem9[r63 - 0x00000004:word32]) // ProcedureBuilder // Return size: 0 void ProcedureBuilder() ProcedureBuilder_entry: def r63 // succ: l1 l1: r1_0 = foo r63_2 = r63 - 0x00000004 Mem3[r63 - 0x00000004:word32] = 0x00000003 r63_4 = r63 - 0x00000008 Mem5[r63 - 0x00000008:word16] = Mem3[0x01231230:word16] r1_6 = foo(Mem8[r63 - 0x00000008:word32], Mem9[r63 - 0x00000004:word32]) return // succ: ProcedureBuilder_exit ProcedureBuilder_exit: "; #endregion AssertStringsEqual(sExp, ssa); }
public void TrcoIcall() { ProcedureBuilder m = new ProcedureBuilder(); Identifier pfn = m.Local32("pfn"); Expression l = m.Load(PrimitiveType.Word32, pfn); CallInstruction icall = new CallInstruction(l, new CallSite(0, 0)); coll = CreateCollector(); icall.Accept(eqb); icall.Accept(coll); StringWriter sw = new StringWriter(); handler.Traits.Write(sw); string exp = "T_1 (in pfn : word32)" + nl + "\ttrait_primitive(word32)" + nl + "\ttrait_mem(T_2, 0)" + nl + "T_2 (in Mem0[pfn:word32] : word32)" + nl + "\ttrait_primitive((ptr code))" + nl + "\ttrait_primitive(word32)" + nl; Console.WriteLine(sw.ToString()); Assert.AreEqual(exp, sw.ToString()); }
public void TrcoMemberPointer() { ProcedureBuilder m = new ProcedureBuilder(); Identifier ds = m.Local16("ds"); Identifier bx = m.Local16("bx"); Identifier ax = m.Local16("ax"); MemberPointerSelector mps = m.MembPtrW(ds, m.IAdd(bx, 4)); Expression e = m.Load(PrimitiveType.Byte, mps); coll = CreateCollector(); e = e.Accept(en); e.Accept(eqb); e.Accept(coll); Assert.IsNotNull(mps.BasePointer.TypeVariable, "Base pointer should have type variable"); Verify(null, "Typing/TrcoMemberPointer.txt"); }
public void TrcoGlobalArray() { Program prog = CreateProgram(); ProcedureBuilder m = new ProcedureBuilder(); Identifier i = m.Local32("i"); Expression ea = m.IAdd(prog.Globals, m.IAdd(m.Shl(i, 2), 0x3000)); Expression e = m.Load(PrimitiveType.Int32, ea); coll = CreateCollector(prog); e = e.Accept(en); e.Accept(eqb); e.Accept(coll); Verify(null, "Typing/TrcoGlobalArray.txt"); }
public void TrcoArrayExpression() { var b = new Identifier("base", PrimitiveType.Word32, null); var i = new Identifier("idx", PrimitiveType.Word32, null); var s = Constant.Word32(4); ProcedureBuilder m = new ProcedureBuilder(); // e ::= Mem[(b+0x1003000)+(i*s):word16] Expression e = m.Load( PrimitiveType.Word16, m.IAdd(m.IAdd(b, Constant.Word32(0x10030000)), m.SMul(i, s))); coll = CreateCollector(); e = e.Accept(en); e.Accept(eqb); e.Accept(coll); Verify(null, "Typing/TrcoArrayExpression.txt"); }