public void X86ic_CompareMemOff_Normalize_Succeed()
        {
            var a   = Create(Opcode.neg, Mem32(Registers.eax, 30));
            var b   = Create(Opcode.neg, Mem32(Registers.ecx, 30));
            var cmp = new X86InstructionComparer(Normalize.Registers);

            Assert.IsTrue(cmp.Equals(a, b));
            Assert.IsTrue(cmp.GetHashCode(a) == cmp.GetHashCode(b));
        }
        public void X86ic_CompareRegisters_NoNormalize_Fail()
        {
            var a   = Create(Opcode.neg, "eax");
            var b   = Create(Opcode.neg, "ecx");
            var cmp = new X86InstructionComparer(Normalize.Nothing);

            Assert.IsFalse(cmp.Equals(a, b));
            Assert.IsFalse(cmp.GetHashCode(a) == cmp.GetHashCode(b));
        }
        public void X86ic_CompareOpcodes()
        {
            var a   = Create(Opcode.nop);
            var b   = Create(Opcode.nop);
            var cmp = new X86InstructionComparer(Normalize.Nothing);

            Assert.IsTrue(cmp.Equals(a, b));
            Assert.IsTrue(cmp.GetHashCode(a) == cmp.GetHashCode(b));
        }
Esempio n. 4
0
        public void X86ic_CompareRegisters_Normalize_Succeed()
        {
            var a   = Create(Mnemonic.neg, "eax");
            var b   = Create(Mnemonic.neg, "ecx");
            var cmp = new X86InstructionComparer(Normalize.Registers);

            Assert.IsTrue(cmp.Equals(a, b));
            Assert.IsTrue(cmp.GetHashCode(a) == cmp.GetHashCode(b));
        }
Esempio n. 5
0
        public void Trie_ScoreInstructions()
        {
            X86InstructionComparer cmp = new X86InstructionComparer(Normalize.Nothing);
            var trie = new Trie <X86Instruction>(cmp);

            trie.Add(new [] {
                CreatePush(Registers.bp),
                CreateMov(Registers.bp, Registers.sp)
            });
            trie.Add(new [] {
                CreatePush(Registers.bp),
                CreateMov(Registers.bp, Registers.sp),
                CreatePush(Registers.si),
                CreatePush(Registers.di)
            });

            long score = trie.ScoreInstructions(new [] {
                CreatePush(Registers.bp)
            });

            Assert.AreEqual(2, score);
            score = trie.ScoreInstructions(new [] {
                CreatePush(Registers.bp),
                CreateMov(Registers.bp, Registers.sp)
            });
            Assert.AreEqual(4, score);

            // This sequqnce matches one of the trie's strings exactly.
            score = trie.ScoreInstructions(new  [] {
                CreatePush(Registers.bp),
                CreateMov(Registers.bp, Registers.sp),
                CreatePush(Registers.si),
                CreatePush(Registers.di)
            });
            Assert.AreEqual(6, score);

            // A longer sequence runs 'off' the trie, so it should have the same score
            // as the previous test
            score = trie.ScoreInstructions(new [] {
                CreatePush(Registers.bp),
                CreateMov(Registers.bp, Registers.sp),
                CreatePush(Registers.si),
                CreatePush(Registers.di),
                CreatePush(Registers.bx)
            });
            Assert.AreEqual(6, score);

            // This doesn't exist in the trie at all, so it should score 0.

            score = trie.ScoreInstructions(new [] {
                CreateMov(Registers.ax, Registers.bx)
            });
            Assert.AreEqual(0, score);
        }
Esempio n. 6
0
        public void Trie_AddInstructions()
        {
            X86InstructionComparer cmp = new X86InstructionComparer(Normalize.Nothing);
            var            trie        = new Trie <MachineInstruction>(cmp);
            X86Instruction inst        = CreatePush(Registers.bp);

            trie.Add(new [] { inst });
            Assert.AreEqual(trie.Count, 1);

            trie.Add(new [] {
                CreatePush(Registers.bp),
                CreateMov(Registers.bp, Registers.sp)
            });
            Assert.AreEqual(trie.Count, 3);
        }
Esempio n. 7
0
 public void Creation()
 {
     X86InstructionComparer cmp = new X86InstructionComparer(Normalize.Nothing);
     var trie = new Trie <MachineInstruction>(cmp);
 }