本文整理汇总了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)")
示例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)
示例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])
示例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)
示例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())