当前位置: 首页>>代码示例>>Python>>正文


Python TritonContext.newSymbolicVariable方法代码示例

本文整理汇总了Python中triton.TritonContext.newSymbolicVariable方法的典型用法代码示例。如果您正苦于以下问题:Python TritonContext.newSymbolicVariable方法的具体用法?Python TritonContext.newSymbolicVariable怎么用?Python TritonContext.newSymbolicVariable使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在triton.TritonContext的用法示例。


在下文中一共展示了TritonContext.newSymbolicVariable方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: TestSymbolicVariable

# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import newSymbolicVariable [as 别名]
class TestSymbolicVariable(unittest.TestCase):

    """Testing symbolic variable."""

    def setUp(self):
        """Define the arch."""
        self.Triton = TritonContext()
        self.Triton.setArchitecture(ARCH.X86_64)
        self.v0 = self.Triton.newSymbolicVariable(8)
        self.v1 = self.Triton.newSymbolicVariable(16)
        self.v2 = self.Triton.newSymbolicVariable(32, "test com")

    def test_id(self):
        """Test IDs"""
        self.assertEqual(self.v0.getId(), 0)
        self.assertEqual(self.v1.getId(), 1)
        self.assertEqual(self.v2.getId(), 2)

    def test_kind(self):
        """Test kind"""
        self.assertEqual(self.v0.getKind(), SYMEXPR.UNDEF)
        self.assertEqual(self.v1.getKind(), SYMEXPR.UNDEF)
        self.assertEqual(self.v2.getKind(), SYMEXPR.UNDEF)

    def test_name(self):
        """Test name"""
        self.assertEqual(self.v0.getName(), "SymVar_0")
        self.assertEqual(self.v1.getName(), "SymVar_1")
        self.assertEqual(self.v2.getName(), "SymVar_2")

    def test_bitsize(self):
        """Test name"""
        self.assertEqual(self.v0.getBitSize(), 8)
        self.assertEqual(self.v1.getBitSize(), 16)
        self.assertEqual(self.v2.getBitSize(), 32)

    def test_comment(self):
        """Test comment"""
        self.assertEqual(self.v0.getComment(), "")
        self.assertEqual(self.v1.getComment(), "")
        self.assertEqual(self.v2.getComment(), "test com")

        self.v0.setComment("test v0")
        self.v1.setComment("test v1")

        self.assertEqual(self.v0.getComment(), "test v0")
        self.assertEqual(self.v1.getComment(), "test v1")
        self.assertEqual(self.v2.getComment(), "test com")

    def test_str(self):
        """Test variable representation"""
        self.assertEqual(str(self.v0), "SymVar_0:8")
        self.assertEqual(str(self.v1), "SymVar_1:16")
        self.assertEqual(str(self.v2), "SymVar_2:32")
开发者ID:AmesianX,项目名称:Triton,代码行数:56,代码来源:test_symbolic_variable.py

示例2: test4

# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import newSymbolicVariable [as 别名]
def test4():
    Triton = TritonContext()
    Triton.setArchitecture(ARCH.X86)
    astCtxt = Triton.getAstContext()

    x = Triton.newSymbolicVariable(8)
    c = astCtxt.variable(x) * astCtxt.variable(x) - 1 == 0x20
    print 'Test 4:', Triton.getModels(c, 10)

    return
开发者ID:AmesianX,项目名称:Triton,代码行数:12,代码来源:constraints.py

示例3: test2

# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import newSymbolicVariable [as 别名]
def test2():
    Triton = TritonContext()
    Triton.setArchitecture(ARCH.X86)
    astCtxt = Triton.getAstContext()

    x = Triton.newSymbolicVariable(32)
    c = ((astCtxt.variable(x) ^ 0x40) - 1 == 0x10)
    print 'Test 2:', Triton.getModel(c)[0]

    return
开发者ID:AmesianX,项目名称:Triton,代码行数:12,代码来源:constraints.py

示例4: test3

# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import newSymbolicVariable [as 别名]
def test3():
    Triton = TritonContext()
    Triton.setArchitecture(ARCH.X86)
    astCtxt = Triton.getAstContext()

    x = Triton.newSymbolicVariable(8)
    c = astCtxt.land([
            astCtxt.variable(x) * astCtxt.variable(x) - 1 == 0x20,
            astCtxt.variable(x) != 0x11
        ])
    print 'Test 3:', Triton.getModel(c)[0]

    return
开发者ID:AmesianX,项目名称:Triton,代码行数:15,代码来源:constraints.py

示例5: TestAstReference

# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import newSymbolicVariable [as 别名]
class TestAstReference(unittest.TestCase):

    """Testing the AST reference."""

    def setUp(self):
        """Define the arch."""
        self.Triton = TritonContext()
        self.Triton.setArchitecture(ARCH.X86_64)
        self.astCtxt = self.Triton.getAstContext()

    def test_ssa_ref(self):
        v0   = self.astCtxt.variable(self.Triton.newSymbolicVariable(8))
        v1   = self.astCtxt.variable(self.Triton.newSymbolicVariable(8))
        exp0 = self.Triton.newSymbolicExpression(v0, "exp v1")
        exp1 = self.Triton.newSymbolicExpression(v1, "exp v2")
        ref0 = self.astCtxt.reference(self.Triton.getSymbolicExpressionFromId(0))
        ref1 = self.astCtxt.reference(self.Triton.getSymbolicExpressionFromId(1))
        ref2 = self.astCtxt.reference(self.Triton.getSymbolicExpressionFromId(0)) + 2
        ref3 = self.astCtxt.reference(self.Triton.getSymbolicExpressionFromId(0)) + self.astCtxt.reference(self.Triton.getSymbolicExpressionFromId(1))

        self.assertEqual(str(ref0), "ref!0")
        self.assertEqual(str(ref1), "ref!1")
        self.assertEqual(str(ref2), "(bvadd ref!0 (_ bv2 8))")
        self.assertEqual(str(ref3), "(bvadd ref!0 ref!1)")

    def test_unroll_ssa_ref(self):
        v0   = self.astCtxt.variable(self.Triton.newSymbolicVariable(8))
        v1   = self.astCtxt.variable(self.Triton.newSymbolicVariable(8))
        exp0 = self.Triton.newSymbolicExpression(v0, "exp v1")
        exp1 = self.Triton.newSymbolicExpression(v1, "exp v2")
        ref0 = self.astCtxt.reference(self.Triton.getSymbolicExpressionFromId(0))
        ref1 = self.astCtxt.reference(self.Triton.getSymbolicExpressionFromId(1))
        ref2 = self.astCtxt.reference(self.Triton.getSymbolicExpressionFromId(0)) + 2
        ref3 = self.astCtxt.reference(self.Triton.getSymbolicExpressionFromId(0)) + self.astCtxt.reference(self.Triton.getSymbolicExpressionFromId(1))

        self.assertEqual(str(self.Triton.unrollAst(ref0)), "SymVar_0")
        self.assertEqual(str(self.Triton.unrollAst(ref1)), "SymVar_1")
        self.assertEqual(str(self.Triton.unrollAst(ref2)), "(bvadd SymVar_0 (_ bv2 8))")
        self.assertEqual(str(self.Triton.unrollAst(ref3)), "(bvadd SymVar_0 SymVar_1)")
开发者ID:AmesianX,项目名称:Triton,代码行数:41,代码来源:test_ast_reference.py

示例6: test1

# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import newSymbolicVariable [as 别名]
def test1():
    Triton = TritonContext()
    Triton.setArchitecture(ARCH.X86)
    astCtxt = Triton.getAstContext()

    x = Triton.newSymbolicVariable(32)
    c = astCtxt.equal(
            astCtxt.bvsub(
                astCtxt.bvxor(
                    astCtxt.variable(x),
                    astCtxt.bv(0x40, 32)
                ),
                astCtxt.bv(1, 32)
            ),
            astCtxt.bv(0x10, 32)
        )
    print 'Test 1:', Triton.getModel(c)[0]

    return
开发者ID:AmesianX,项目名称:Triton,代码行数:21,代码来源:constraints.py

示例7: TestAstConversion

# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import newSymbolicVariable [as 别名]
class TestAstConversion(unittest.TestCase):

    """Testing the AST conversion Triton <-> z3."""

    def setUp(self):
        """Define the arch."""
        self.Triton = TritonContext()
        self.Triton.setArchitecture(ARCH.X86_64)

        self.astCtxt = self.Triton.getAstContext()

        self.sv1 = self.Triton.newSymbolicVariable(8)
        self.sv2 = self.Triton.newSymbolicVariable(8)

        self.v1 = self.astCtxt.variable(self.sv1)
        self.v2 = self.astCtxt.variable(self.sv2)

    def test_binop(self):
        """
        Check python binary operation.

        Fuzz int8/uint8 binop values and check triton/z3 and python results.
        """
        # No simplification available
        # This only going to test Triton <-> z3 AST conversions.
        binop = [
            # Overloaded operators
            operator.and_,
            operator.add,
            operator.sub,
            operator.xor,
            operator.or_,
            operator.mul,
            operator.lshift,
            operator.rshift,
            operator.eq,
            operator.ne,
            operator.le,
            operator.ge,
            operator.lt,
            operator.gt,
            operator.div,
            operator.mod,
        ]

        for _ in xrange(100):
            cv1 = random.randint(0, 255)
            cv2 = random.randint(0, 255)
            self.Triton.setConcreteVariableValue(self.sv1, cv1)
            self.Triton.setConcreteVariableValue(self.sv2, cv2)
            for op in binop:
                n = op(self.v1, self.v2)
                if op == operator.div and cv2 == 0:
                    ref = 255
                elif op == operator.mod and cv2 == 0:
                    ref = cv1
                else:
                    ref = op(cv1, cv2) % (2 ** 8)
                self.assertEqual(ref, n.evaluate(),
                                 "ref = {} and triton value = {} with operator {}"
                                 " operands were {} and {}".format(ref,
                                                                   n.evaluate(),
                                                                   op,
                                                                   cv1,
                                                                   cv2))
                self.assertEqual(ref, self.Triton.evaluateAstViaZ3(n))
                self.assertEqual(ref, self.Triton.simplify(n, True).evaluate())

    def test_unop(self):
        """
        Check python unary operation.

        Fuzz int8/uint8 binop values and check triton/z3 and python results.
        """
        # No simplification available
        # This only going to test Triton <-> z3 AST conversions.
        unop = [
            operator.invert,
            operator.neg,
        ]

        for cv1 in xrange(0, 256):
            self.Triton.setConcreteVariableValue(self.sv1, cv1)
            for op in unop:
                n = op(self.v1)
                ref = op(cv1) % (2 ** 8)
                self.assertEqual(ref, n.evaluate(),
                                 "ref = {} and triton value = {} with operator "
                                 "{} operands was {}".format(ref,
                                                             n.evaluate(),
                                                             op,
                                                             cv1))
                self.assertEqual(ref, self.Triton.evaluateAstViaZ3(n))
                self.assertEqual(ref, self.Triton.simplify(n, True).evaluate())

    def test_smtbinop(self):
        """
        Check smt binary operation.

        Fuzz int8/uint8 binop values and check triton/z3 and python results.
#.........这里部分代码省略.........
开发者ID:ispras,项目名称:Triton,代码行数:103,代码来源:test_ast_conversion.py

示例8: TestAstRepresentation

# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import newSymbolicVariable [as 别名]
class TestAstRepresentation(unittest.TestCase):

    """Testing the AST Representation."""

    def setUp(self):
        """Define the arch."""
        self.Triton = TritonContext()
        self.Triton.setArchitecture(ARCH.X86_64)
        self.astCtxt = self.Triton.getAstContext()

        self.v1  = self.astCtxt.variable(self.Triton.newSymbolicVariable(8))
        self.v2  = self.astCtxt.variable(self.Triton.newSymbolicVariable(8))
        self.ref = self.Triton.newSymbolicExpression(self.v1 + self.v2, "ref test")

        # Default
        self.assertEqual(self.Triton.getAstRepresentationMode(), AST_REPRESENTATION.SMT)

        self.node = [
            # Overloaded operators                              # SMT                                                           # Python
            ((self.v1 & self.v2),                               "(bvand SymVar_0 SymVar_1)",                                    "(SymVar_0 & SymVar_1)"),
            ((self.v1 + self.v2),                               "(bvadd SymVar_0 SymVar_1)",                                    "((SymVar_0 + SymVar_1) & 0xFF)"),
            ((self.v1 - self.v2),                               "(bvsub SymVar_0 SymVar_1)",                                    "((SymVar_0 - SymVar_1) & 0xFF)"),
            ((self.v1 ^ self.v2),                               "(bvxor SymVar_0 SymVar_1)",                                    "(SymVar_0 ^ SymVar_1)"),
            ((self.v1 | self.v2),                               "(bvor SymVar_0 SymVar_1)",                                     "(SymVar_0 | SymVar_1)"),
            ((self.v1 * self.v2),                               "(bvmul SymVar_0 SymVar_1)",                                    "((SymVar_0 * SymVar_1) & 0xFF)"),
            ((self.v1 / self.v2),                               "(bvudiv SymVar_0 SymVar_1)",                                   "(SymVar_0 / SymVar_1)"),
            ((self.v1 % self.v2),                               "(bvurem SymVar_0 SymVar_1)",                                   "(SymVar_0 % SymVar_1)"),
            ((self.v1 << self.v2),                              "(bvshl SymVar_0 SymVar_1)",                                    "((SymVar_0 << SymVar_1) & 0xFF)"),
            ((self.v1 >> self.v2),                              "(bvlshr SymVar_0 SymVar_1)",                                   "(SymVar_0 >> SymVar_1)"),
            ((~self.v1),                                        "(bvnot SymVar_0)",                                             "(~(SymVar_0) & 0xFF)"),
            ((-self.v1),                                        "(bvneg SymVar_0)",                                             "-SymVar_0"),
            ((self.v1 == self.v2),                              "(= SymVar_0 SymVar_1)",                                        "(SymVar_0 == SymVar_1)"),
            ((self.v1 != self.v2),                              "(not (= SymVar_0 SymVar_1))",                                  "not (SymVar_0 == SymVar_1)"),
            ((self.v1 <= self.v2),                              "(bvule SymVar_0 SymVar_1)",                                    "(SymVar_0 <= SymVar_1)"),
            ((self.v1 >= self.v2),                              "(bvuge SymVar_0 SymVar_1)",                                    "(SymVar_0 >= SymVar_1)"),
            ((self.v1 < self.v2),                               "(bvult SymVar_0 SymVar_1)",                                    "(SymVar_0 < SymVar_1)"),
            ((self.v1 > self.v2),                               "(bvugt SymVar_0 SymVar_1)",                                    "(SymVar_0 > SymVar_1)"),

            # AST api                                           # SMT                                                           # Python
            (self.astCtxt.assert_(self.v1 == 0),                "(assert (= SymVar_0 (_ bv0 8)))",                              "assert_((SymVar_0 == 0x0))"),
            (self.astCtxt.bv(2, 8),                             "(_ bv2 8)",                                                    "0x2"),
            (self.astCtxt.bvashr(self.v1, self.v2),             "(bvashr SymVar_0 SymVar_1)",                                   "(SymVar_0 >> SymVar_1)"),
            (self.astCtxt.bvfalse(),                            "(_ bv0 1)",                                                    "0x0"),
            (self.astCtxt.bvnand(self.v1, self.v2),             "(bvnand SymVar_0 SymVar_1)",                                   "(~(SymVar_0 & SymVar_1) & 0xFF)"),
            (self.astCtxt.bvnor(self.v1, self.v2),              "(bvnor SymVar_0 SymVar_1)",                                    "(~(SymVar_0 | SymVar_1) & 0xFF)"),
            (self.astCtxt.bvrol(3, self.v1),                    "((_ rotate_left 3) SymVar_0)",                                 "rol(0x3, SymVar_0)"),
            (self.astCtxt.bvror(2, self.v2),                    "((_ rotate_right 2) SymVar_1)",                                "ror(0x2, SymVar_1)"),
            (self.astCtxt.bvsdiv(self.v1, self.v2),             "(bvsdiv SymVar_0 SymVar_1)",                                   "(SymVar_0 / SymVar_1)"),
            (self.astCtxt.bvsge(self.v1, self.v2),              "(bvsge SymVar_0 SymVar_1)",                                    "(SymVar_0 >= SymVar_1)"),
            (self.astCtxt.bvsgt(self.v1, self.v2),              "(bvsgt SymVar_0 SymVar_1)",                                    "(SymVar_0 > SymVar_1)"),
            (self.astCtxt.bvsle(self.v1, self.v2),              "(bvsle SymVar_0 SymVar_1)",                                    "(SymVar_0 <= SymVar_1)"),
            (self.astCtxt.bvslt(self.v1, self.v2),              "(bvslt SymVar_0 SymVar_1)",                                    "(SymVar_0 < SymVar_1)"),
            (self.astCtxt.bvsmod(self.v1, self.v2),             "(bvsmod SymVar_0 SymVar_1)",                                   "(SymVar_0 % SymVar_1)"),
            (self.astCtxt.bvsrem(self.v1, self.v2),             "(bvsrem SymVar_0 SymVar_1)",                                   "(SymVar_0 % SymVar_1)"),
            (self.astCtxt.bvtrue(),                             "(_ bv1 1)",                                                    "0x1"),
            (self.astCtxt.bvurem(self.v1, self.v2),             "(bvurem SymVar_0 SymVar_1)",                                   "(SymVar_0 % SymVar_1)"),
            (self.astCtxt.bvxnor(self.v1, self.v2),             "(bvxnor SymVar_0 SymVar_1)",                                   "(~(SymVar_0 ^ SymVar_1) & 0xFF)"),
            (self.astCtxt.compound([self.v1, self.v2]),         "SymVar_0\nSymVar_1",                                           "SymVar_0\nSymVar_1"),
            (self.astCtxt.concat([self.v1, self.v2]),           "(concat SymVar_0 SymVar_1)",                                   "((SymVar_0) << 8 | SymVar_1)"),
            (self.astCtxt.declare(self.v1),                     "(declare-fun SymVar_0 () (_ BitVec 8))",                       "SymVar_0 = 0xdeadbeef"),
            (self.astCtxt.distinct(self.v1, self.v2),           "(distinct SymVar_0 SymVar_1)",                                 "(SymVar_0 != SymVar_1)"),
            (self.astCtxt.equal(self.v1, self.v2),              "(= SymVar_0 SymVar_1)",                                        "(SymVar_0 == SymVar_1)"),
            (self.astCtxt.extract(4, 2, self.v1),               "((_ extract 4 2) SymVar_0)",                                   "((SymVar_0 >> 2) & 0x7)"),
            (self.astCtxt.extract(6, 0, self.v1),               "((_ extract 6 0) SymVar_0)",                                   "(SymVar_0 & 0x7F)"),
            (self.astCtxt.extract(7, 0, self.v1),               "SymVar_0",                                                     "SymVar_0"),
            (self.astCtxt.ite(self.v1 == 1, self.v1, self.v2),  "(ite (= SymVar_0 (_ bv1 8)) SymVar_0 SymVar_1)",               "(SymVar_0 if (SymVar_0 == 0x1) else SymVar_1)"),
            (self.astCtxt.land([self.v1 == 1, self.v2 == 2]),   "(and (= SymVar_0 (_ bv1 8)) (= SymVar_1 (_ bv2 8)))",          "((SymVar_0 == 0x1) and (SymVar_1 == 0x2))"),
            (self.astCtxt.let("alias", self.v1, self.v2),       "(let ((alias SymVar_0)) SymVar_1)",                            "SymVar_1"),
            (self.astCtxt.lnot(self.v1 == 0),                   "(not (= SymVar_0 (_ bv0 8)))",                                 "not (SymVar_0 == 0x0)"),
            (self.astCtxt.lor([self.v1 >= 0, self.v2 <= 10]),   "(or (bvuge SymVar_0 (_ bv0 8)) (bvule SymVar_1 (_ bv10 8)))",  "((SymVar_0 >= 0x0) or (SymVar_1 <= 0xA))"),
            (self.astCtxt.reference(self.ref),                  "ref!0",                                                        "ref_0"),
            (self.astCtxt.string("test"),                       "test",                                                         "test"),
            (self.astCtxt.sx(8, self.v1),                       "((_ sign_extend 8) SymVar_0)",                                 "sx(0x8, SymVar_0)"),
            (self.astCtxt.zx(8, self.v1),                       "((_ zero_extend 8) SymVar_0)",                                 "SymVar_0"),
        ]

    def test_smt_representation(self):
        self.Triton.setAstRepresentationMode(AST_REPRESENTATION.SMT)
        self.assertEqual(self.Triton.getAstRepresentationMode(), AST_REPRESENTATION.SMT)
        for n in self.node:
            self.assertEqual(str(n[0]), n[1])

    def test_python_representation(self):
        self.Triton.setAstRepresentationMode(AST_REPRESENTATION.PYTHON)
        self.assertEqual(self.Triton.getAstRepresentationMode(), AST_REPRESENTATION.PYTHON)
        for n in self.node:
            self.assertEqual(str(n[0]), n[2])
开发者ID:ispras,项目名称:Triton,代码行数:89,代码来源:test_ast_representation.py

示例9: TestAstConversion

# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import newSymbolicVariable [as 别名]
class TestAstConversion(unittest.TestCase):

    """Testing the AST conversion Triton <-> z3."""

    def setUp(self):
        """Define the arch."""
        self.Triton = TritonContext()
        self.Triton.setArchitecture(ARCH.X86_64)

        self.astCtxt = self.Triton.getAstContext()

        self.sv1   = self.Triton.newSymbolicVariable(8)
        self.sv2   = self.Triton.newSymbolicVariable(8)

        self.v1   = self.astCtxt.variable(self.sv1)
        self.v2   = self.astCtxt.variable(self.sv2)

        self.Triton.setConcreteSymbolicVariableValue(self.sv1, 0xaa)
        self.Triton.setConcreteSymbolicVariableValue(self.sv2, 0x55)

        self.node = [
            # Overloaded operators
            (self.v1 & self.v2),
            (self.v1 + self.v2),
            (self.v1 - self.v2),
            (self.v1 ^ self.v2),
            (self.v1 | self.v2),
            (self.v1 * self.v2),
            (self.v1 << self.v2),
            (self.v1 >> self.v2),
            (~self.v1),
            (-self.v1),
            (self.v1 == self.v2),
            (self.v1 != self.v2),
            (self.v1 <= self.v2),
            (self.v1 >= self.v2),
            (self.v1 < self.v2),
            (self.v1 > self.v2),
            # AST API
            self.astCtxt.bvashr(self.v1, self.v2),
            self.astCtxt.bvnand(self.v1, self.v2),
            self.astCtxt.bvnor(self.v1, self.v2),
            self.astCtxt.bvrol(3, self.v1),
            self.astCtxt.bvror(2, self.v2),
            self.astCtxt.distinct(self.v1, self.v2),
            self.astCtxt.equal(self.v1, self.v2),
            self.astCtxt.sx(8, self.v1),
            self.astCtxt.zx(8, self.v1),
            # recent z3 version
            #bvsdiv(self.v1, self.v2),
            #bvsmod(self.v1, self.v2),
            #bvsrem(self.v1, self.v2),
            #bvudiv(self.v1, self.v2),
            #bvurem(self.v1, self.v2),
        ]

    def test_conversion(self):
        # No simplification available
        # This only going to test Triton <-> z3 AST conversions.
        for n in self.node:
            self.assertEqual(n.evaluate(), self.Triton.simplify(n, True).evaluate())
开发者ID:AmesianX,项目名称:Triton,代码行数:63,代码来源:test_ast_conversion.py

示例10: TestAstDuplication

# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import newSymbolicVariable [as 别名]
class TestAstDuplication(unittest.TestCase):

    """Testing the AST duplication."""

    def setUp(self):
        """Define the arch."""
        self.Triton = TritonContext()
        self.Triton.setArchitecture(ARCH.X86_64)
        self.astCtxt = self.Triton.getAstContext()

        self.v1  = self.astCtxt.variable(self.Triton.newSymbolicVariable(8))
        self.v2  = self.astCtxt.variable(self.Triton.newSymbolicVariable(8))
        self.ref = self.Triton.newSymbolicExpression(self.v1 + self.v2, "ref test")

        self.node = [
            # Overloaded operators
            (self.v1 & self.v2),
            (self.v1 + self.v2),
            (self.v1 - self.v2),
            (self.v1 ^ self.v2),
            (self.v1 | self.v2),
            (self.v1 * self.v2),
            (self.v1 / self.v2),
            (self.v1 % self.v2),
            (self.v1 << self.v2),
            (self.v1 >> self.v2),
            (~self.v1),
            (-self.v1),
            (self.v1 == self.v2),
            (self.v1 != self.v2),
            (self.v1 <= self.v2),
            (self.v1 >= self.v2),
            (self.v1 < self.v2),
            (self.v1 > self.v2),
            # AST api
            self.astCtxt.bv(2, 8),
            self.astCtxt.bvashr(self.v1, self.v2),
            self.astCtxt.bvfalse(),
            self.astCtxt.bvnand(self.v1, self.v2),
            self.astCtxt.bvnor(self.v1, self.v2),
            self.astCtxt.bvrol(3, self.v1),
            self.astCtxt.bvror(2, self.v2),
            self.astCtxt.bvsdiv(self.v1, self.v2),
            self.astCtxt.bvsge(self.v1, self.v2),
            self.astCtxt.bvsgt(self.v1, self.v2),
            self.astCtxt.bvsle(self.v1, self.v2),
            self.astCtxt.bvslt(self.v1, self.v2),
            self.astCtxt.bvsmod(self.v1, self.v2),
            self.astCtxt.bvtrue(),
            self.astCtxt.bvurem(self.v1, self.v2),
            self.astCtxt.bvxnor(self.v1, self.v2),
            self.astCtxt.concat([self.v1, self.v2]),
            self.astCtxt.distinct(self.v1, self.v2),
            self.astCtxt.equal(self.v1, self.v2),
            self.astCtxt.extract(4, 2, self.v1),
            self.astCtxt.extract(7, 0, self.v1),
            self.astCtxt.ite(self.v1 == 2, self.v1, self.v2),
            self.astCtxt.land([self.v1 == 1, self.v2 == 2]),
            self.astCtxt.let("alias", self.v1, self.v2),
            self.astCtxt.lnot(self.v1 == 0),
            self.astCtxt.lor([self.v1 >= 0, self.v2 <= 10]),
            self.astCtxt.reference(self.ref),
            self.astCtxt.string("test"),
            self.astCtxt.sx(8, self.v1),
            self.astCtxt.zx(8, self.v1),
        ]

    def test_duplication(self):
        for n in self.node:
            self.assertEqual(n.getHash(), self.astCtxt.duplicate(n).getHash())
开发者ID:AmesianX,项目名称:Triton,代码行数:72,代码来源:test_ast_duplication.py


注:本文中的triton.TritonContext.newSymbolicVariable方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。