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


Python TritonContext.newSymbolicExpression方法代码示例

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


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

示例1: TestAstReference

# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import newSymbolicExpression [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

示例2: TestSymbolicBuilding

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

    """Testing symbolic building."""

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

    def test_build_immediate(self):
        """Check symbolic immediate has correct size and evaluation."""
        node = self.Triton.buildSymbolicImmediate(Immediate(0x10, CPUSIZE.BYTE))
        self.assertEqual(node.evaluate(), 0x10)
        self.assertEqual(node.getBitvectorSize(), CPUSIZE.BYTE_BIT)

    def test_build_register(self):
        """Check symbolic register has correct size and location."""
        expr1 = self.Triton.newSymbolicExpression(self.astCtxt.bv(0x1122334455667788, CPUSIZE.QWORD_BIT))
        self.Triton.assignSymbolicExpressionToRegister(expr1, self.Triton.registers.rax)

        node = self.Triton.buildSymbolicRegister(self.Triton.registers.rax)
        self.assertEqual(node.evaluate(), 0x1122334455667788)
        self.assertEqual(node.getBitvectorSize(), CPUSIZE.QWORD_BIT)

        node = self.Triton.buildSymbolicRegister(self.Triton.registers.eax)
        self.assertEqual(node.evaluate(), 0x55667788)
        self.assertEqual(node.getBitvectorSize(), CPUSIZE.DWORD_BIT)

        node = self.Triton.buildSymbolicRegister(self.Triton.registers.ax)
        self.assertEqual(node.evaluate(), 0x7788)
        self.assertEqual(node.getBitvectorSize(), CPUSIZE.WORD_BIT)

        node = self.Triton.buildSymbolicRegister(self.Triton.registers.ah)
        self.assertEqual(node.evaluate(), 0x77)
        self.assertEqual(node.getBitvectorSize(), CPUSIZE.BYTE_BIT)

        node = self.Triton.buildSymbolicRegister(self.Triton.registers.al)
        self.assertEqual(node.evaluate(), 0x88)
        self.assertEqual(node.getBitvectorSize(), CPUSIZE.BYTE_BIT)
开发者ID:AmesianX,项目名称:Triton,代码行数:42,代码来源:test_symbolic.py

示例3: TestAstRepresentation

# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import newSymbolicExpression [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

示例4: TestSymbolic

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

    """Testing the symbolic engine."""

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

    def test_backup(self):
        """
        Check Symbolics value are saved when engine is disable.

        * Also check reseting a disable symbolic engines doesn't crash.
        """
        inst = Instruction()
        # update RAX
        inst.setOpcode("\x48\xFF\xC0")
        self.Triton.processing(inst)

        self.assertEqual(self.Triton.getSymbolicRegisterValue(self.Triton.registers.rax), 1)

        # This call triton::api.backupSymbolicEngine()
        self.Triton.enableSymbolicEngine(False)

        inst = Instruction()
        # update RAX again
        inst.setOpcode("\x48\xFF\xC0")
        self.Triton.processing(inst)

        self.assertEqual(self.Triton.getConcreteRegisterValue(self.Triton.registers.rax), 2, "concrete value is updated")
        self.assertEqual(self.Triton.getSymbolicRegisterValue(self.Triton.registers.rax), 1)
        self.assertEqual(self.Triton.getSymbolicRegisterValue(self.Triton.registers.rax), 1, "Symbolic value is not update")

        # Try to reset engine after a backup to test if the bug #385 is fixed.
        self.Triton.resetEngines()

    def test_bind_expr_to_memory(self):
        """Check symbolic expression binded to memory can be retrieve."""
        # Bind expr1 to 0x100
        expr1 = self.Triton.newSymbolicExpression(self.astCtxt.bv(0x11, 8))
        mem = MemoryAccess(0x100, CPUSIZE.BYTE)
        self.Triton.assignSymbolicExpressionToMemory(expr1, mem)

        # Get expr from memory
        expr2 = self.Triton.getSymbolicExpressionFromId(self.Triton.getSymbolicMemoryId(0x100))

        self.assertEqual(expr1.getAst().evaluate(), expr2.getAst().evaluate())

    def test_bind_expr_to_multi_memory(self):
        """Check symbolic expression binded to multiple memory location."""
        # Bind expr to multi memory location (0x100, 0x101, 0x102, 0x103)
        expr1 = self.Triton.newSymbolicExpression(self.astCtxt.bv(0x11223344, 32))
        mem = MemoryAccess(0x100, CPUSIZE.DWORD)
        self.Triton.assignSymbolicExpressionToMemory(expr1, mem)

        # Check we can get back the same values
        expr2 = self.Triton.getSymbolicExpressionFromId(self.Triton.getSymbolicMemoryId(0x100))
        expr3 = self.Triton.getSymbolicExpressionFromId(self.Triton.getSymbolicMemoryId(0x101))
        expr4 = self.Triton.getSymbolicExpressionFromId(self.Triton.getSymbolicMemoryId(0x102))
        expr5 = self.Triton.getSymbolicExpressionFromId(self.Triton.getSymbolicMemoryId(0x103))

        self.assertEqual(expr2.getAst().evaluate(), 0x44)
        self.assertEqual(expr3.getAst().evaluate(), 0x33)
        self.assertEqual(expr4.getAst().evaluate(), 0x22)
        self.assertEqual(expr5.getAst().evaluate(), 0x11)

        self.assertEqual(self.Triton.getSymbolicMemoryValue(mem), 0x11223344)

    def test_bind_expr_to_register(self):
        """Check symbolic expression binded to register."""
        expr1 = self.Triton.newSymbolicExpression(self.astCtxt.bv(0x11223344, 64))
        self.Triton.assignSymbolicExpressionToRegister(expr1, self.Triton.registers.rax)

        self.assertEqual(self.Triton.getSymbolicRegisterValue(self.Triton.registers.rax), 0x11223344)

        expr1 = self.Triton.newSymbolicExpression(self.astCtxt.bv(0x11223344, 32))
        with self.assertRaises(Exception):
            # Incorrect size
            self.Triton.assignSymbolicExpressionToRegister(expr1, self.Triton.registers.rax)
开发者ID:AmesianX,项目名称:Triton,代码行数:83,代码来源:test_symbolic.py

示例5: TestAstDuplication

# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import newSymbolicExpression [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.newSymbolicExpression方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。