本文整理汇总了Python中triton.TritonContext.simplify方法的典型用法代码示例。如果您正苦于以下问题:Python TritonContext.simplify方法的具体用法?Python TritonContext.simplify怎么用?Python TritonContext.simplify使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类triton.TritonContext
的用法示例。
在下文中一共展示了TritonContext.simplify方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: TestAstConversion
# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import simplify [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.
#.........这里部分代码省略.........
示例2:
# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import simplify [as 别名]
# Set arch to init engines
Triton.setArchitecture(ARCH.X86_64)
# Record simplifications
Triton.addCallback(xor_1, CALLBACK.SYMBOLIC_SIMPLIFICATION)
Triton.addCallback(xor_2, CALLBACK.SYMBOLIC_SIMPLIFICATION)
astCtxt = Triton.getAstContext()
a = astCtxt.bv(1, 8)
b = astCtxt.bv(2, 8)
# Example 1
c = a ^ a
print 'Expr: ', c
c = Triton.simplify(c)
print 'Simp: ', c
print
# Example 2 - forme A
c = (a & ~b) | (~a & b)
print 'Expr: ', c
c = Triton.simplify(c)
print 'Simp: ', c
print
# Example 2 - forme B
c = (~b & a) | (~a & b)
print 'Expr: ', c
示例3: TestAstSimplification
# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import simplify [as 别名]
class TestAstSimplification(unittest.TestCase):
"""Testing AST simplification."""
def setUp(self):
self.Triton = TritonContext()
self.Triton.setArchitecture(ARCH.X86_64)
self.Triton.addCallback(self.xor_1, CALLBACK.SYMBOLIC_SIMPLIFICATION)
self.Triton.addCallback(self.xor_2, CALLBACK.SYMBOLIC_SIMPLIFICATION)
self.astCtxt = self.Triton.getAstContext()
def test_simplification(self):
a = self.astCtxt.bv(1, 8)
b = self.astCtxt.bv(2, 8)
# Example 1
c = a ^ a
c = self.Triton.simplify(c)
self.assertEqual(str(c), "(_ bv0 8)")
c = a ^ b
c = self.Triton.simplify(c)
self.assertEqual(str(c), "(bvxor (_ bv1 8) (_ bv2 8))")
c = (a & ~b) | (~a & b)
c = self.Triton.simplify(c)
self.assertEqual(str(c), "(bvxor (_ bv1 8) (_ bv2 8))")
# Example 2 - forme B
c = (~b & a) | (~a & b)
c = self.Triton.simplify(c)
self.assertEqual(str(c), "(bvxor (_ bv1 8) (_ bv2 8))")
# Example 2 - forme C
c = (~b & a) | (b & ~a)
c = self.Triton.simplify(c)
self.assertEqual(str(c), "(bvxor (_ bv1 8) (_ bv2 8))")
# Example 2 - forme D
c = (b & ~a) | (~b & a)
c = self.Triton.simplify(c)
self.assertEqual(str(c), "(bvxor (_ bv2 8) (_ bv1 8))")
return
# a ^ a -> a = 0
@staticmethod
def xor_1(api, node):
if node.getKind() == AST_NODE.BVXOR:
if node.getChildren()[0].equalTo(node.getChildren()[1]):
return api.getAstContext().bv(0, node.getBitvectorSize())
return node
# ((a & ~b) | (~a & b)) -> (a ^ b)
@staticmethod
def xor_2(api, node):
def getNot(node):
a = node.getChildren()[0]
b = node.getChildren()[1]
if a.getKind() == AST_NODE.BVNOT and b.getKind() != AST_NODE.BVNOT:
return a
if b.getKind() == AST_NODE.BVNOT and a.getKind() != AST_NODE.BVNOT:
return b
return None
def getNonNot(node):
a = node.getChildren()[0]
b = node.getChildren()[1]
if a.getKind() != AST_NODE.BVNOT and b.getKind() == AST_NODE.BVNOT:
return a
if b.getKind() != AST_NODE.BVNOT and a.getKind() == AST_NODE.BVNOT:
return b
return None
if node.getKind() == AST_NODE.BVOR:
c1 = node.getChildren()[0]
c2 = node.getChildren()[1]
if c1.getKind() == AST_NODE.BVAND and c2.getKind() == AST_NODE.BVAND:
c1_not = getNot(c1)
c2_not = getNot(c2)
c1_nonNot = getNonNot(c1)
c2_nonNot = getNonNot(c2)
if c1_not.equalTo(~c2_nonNot) and c2_not.equalTo(~c1_nonNot):
return c1_nonNot ^ c2_nonNot
return node
示例4: TestAstConversion
# 需要导入模块: from triton import TritonContext [as 别名]
# 或者: from triton.TritonContext import simplify [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())