Exemplo n.º 1
0
 public void BwAndMask()
 {
     var eax = m.Frame.EnsureRegister(Registers.eax);
     var bw = new Backwalker(host, new RtlGoto(m.LoadDw(m.IAdd(eax, 0x10000)), RtlClass.Transfer), expSimp);
     Assert.IsFalse(bw.BackwalkInstruction(m.Assign(eax, m.And(eax, 0x7))));
     Assert.AreSame(Registers.eax, bw.Index);
     Assert.AreEqual(0x10000ul, bw.VectorAddress.ToLinear());
     Assert.AreEqual("cmp 8", bw.Operations[0].ToString());
 }
Exemplo n.º 2
0
 public void BwAdd()
 {
     var eax = m.Frame.EnsureRegister(Registers.eax);
     var bw = new Backwalker(
         host,
         new RtlGoto(m.LoadDw(m.IAdd(eax, 0x10000)), RtlClass.Transfer),
         expSimp);
     Assert.IsTrue(bw.BackwalkInstruction(m.Assign(eax, m.IAdd(eax, eax))));
     Assert.AreSame(Registers.eax, bw.Index);
     Assert.AreEqual("* 2", bw.Operations[0].ToString());
     Assert.AreEqual(2, bw.Stride);
 }
Exemplo n.º 3
0
        public void BwTempRegister()
        {
            var v1 = m.Frame.CreateTemporary(PrimitiveType.Word32);
            var edi = m.Frame.CreateTemporary(PrimitiveType.Word32);
            var esi = m.Frame.EnsureRegister(Registers.esi);
            var xfer = new RtlCall(m.LoadDw(m.IAdd(esi, 40)), 4, RtlClass.Transfer);
            m.Assign(v1, m.LoadDw(edi));
            m.Assign(esi, v1);
            var bw = new Backwalker(host, xfer, expSimp);
            bool result;
            result = bw.BackwalkInstruction(m.Block.Statements[1].Instruction);
            result = bw.BackwalkInstruction(m.Block.Statements[0].Instruction);

            Assert.IsFalse(result);
            Assert.AreEqual("None", bw.Index.ToString());
        }
Exemplo n.º 4
0
        public void BwXorHiwordOfIndex()
        {
            var bx = m.Frame.EnsureRegister(Registers.bx);
            var bl = m.Frame.EnsureRegister(Registers.bl);
            var bh = m.Frame.EnsureRegister(Registers.bh);
            var bw = new Backwalker(host, new RtlGoto(m.LoadDw(m.IAdd(bx, 0x1000)), RtlClass.Transfer), expSimp);

            Assert.IsTrue(bw.BackwalkInstruction(
                m.Assign(bh, m.Xor(bh, bh))));
            Assert.AreSame(Registers.bl, bw.Index);
            Assert.AreEqual("& 255", bw.Operations[0].ToString());
        }
Exemplo n.º 5
0
 public void BwLoadIndexed()
 {
     var eax = m.Frame.EnsureRegister(Registers.eax);
     var edx = m.Frame.EnsureRegister(Registers.edx);
     var al = m.Frame.EnsureRegister(Registers.al);
     m.Frame.EnsureFlagGroup(Registers.eflags, (uint)(FlagM.SF | FlagM.ZF | FlagM.CF | FlagM.OF), "SCZO", PrimitiveType.Byte);
     var bw = new Backwalker(host, new RtlGoto(m.LoadDw(m.IAdd(eax, 0x1000)), RtlClass.Transfer), expSimp);
     Assert.IsTrue(bw.BackwalkInstruction(
         m.Assign(al, m.LoadB(m.IAdd(edx, 0x1004)))));
     Assert.AreSame(Registers.edx, bw.Index);
 }
Exemplo n.º 6
0
 public void BwMaskWithHoles()
 {
     var eax = m.Frame.EnsureRegister(Registers.eax);
     var bw = new Backwalker(host, new RtlGoto(m.LoadDw(m.IAdd(eax, 0x10000)), RtlClass.Transfer), expSimp);
     Assert.IsFalse(bw.BackwalkInstruction(m.Assign(eax, m.And(eax, 0x0A))));
     Assert.IsNull(bw.Index);
     Assert.AreEqual(0, bw.Operations.Count);
 }
Exemplo n.º 7
0
 public void BwComparison()
 {
     var eax = m.Frame.EnsureRegister(Registers.eax);
     var SCZO = m.Frame.EnsureFlagGroup(Registers.eflags, (uint)(FlagM.SF | FlagM.ZF | FlagM.CF | FlagM.OF), "SCZO", PrimitiveType.Byte);
     var bw = new Backwalker(host, new RtlGoto(m.LoadDw(m.IAdd(eax, 0x1000)), RtlClass.Transfer), expSimp);
     bw.UsedFlagIdentifier = m.Frame.EnsureFlagGroup(Registers.eflags,(uint)FlagM.CF, "C", PrimitiveType.Byte);
     Assert.IsFalse(
         bw.BackwalkInstruction(
             m.Assign(SCZO, new ConditionOf(m.ISub(eax, 3)))),
         "Encountering this comparison should terminate the backwalk");
     Assert.AreSame(Registers.eax, bw.Index);
     Assert.AreEqual("cmp 3", bw.Operations[0].ToString());
 }
Exemplo n.º 8
0
 public void BwJmp()
 {
     var eax = m.Frame.EnsureRegister(Registers.eax);
     var SCZO = m.Frame.EnsureFlagGroup(Registers.eflags, (uint)(FlagM.SF|FlagM.ZF|FlagM.CF|FlagM.OF), "SCZO", PrimitiveType.Byte);
     var bw = new Backwalker(host, new RtlGoto(m.LoadDw(m.IAdd(eax, 0x1000)), RtlClass.Transfer), expSimp);
     Assert.IsTrue(
         bw.BackwalkInstruction(
             m.BranchIf(
             new TestCondition(ConditionCode.UGT, SCZO),
             "Nizze").Instruction));
     Assert.AreEqual("branch UGT", bw.Operations[0].ToString());
     Assert.AreEqual("SCZO", bw.UsedFlagIdentifier.ToString());
 }