mirror of
https://github.com/cea-sec/miasm
synced 2026-06-21 13:48:18 +00:00
68 lines
1.7 KiB
Python
68 lines
1.7 KiB
Python
#
|
|
# Expression regression tests #
|
|
#
|
|
from pdb import pm
|
|
from miasm2.expression.expression import *
|
|
from miasm2.expression.expression_helper import *
|
|
|
|
# Expression comparison
|
|
assert(ExprInt(-1, 64) != ExprInt(-2, 64))
|
|
assert(ExprInt(1, 64) != ExprInt(1, 32))
|
|
|
|
# Expression size
|
|
big_cst = ExprInt(1, size=0x1000)
|
|
assert big_cst.size == 0x1000
|
|
|
|
# Possible values
|
|
#- Common constants
|
|
A = ExprId("A")
|
|
cond1 = ExprId("cond1", 1)
|
|
cond2 = ExprId("cond2", 16)
|
|
cst1 = ExprInt(1, 32)
|
|
cst2 = ExprInt(2, 32)
|
|
cst3 = ExprInt(3, 32)
|
|
cst4 = ExprInt(4, 32)
|
|
|
|
#- Launch tests
|
|
for expr in [
|
|
cst1,
|
|
A,
|
|
ExprMem(cst1, 32),
|
|
ExprCond(cond1, cst1, cst2),
|
|
ExprMem(ExprCond(cond1, cst1, cst2), 16),
|
|
ExprCond(cond1,
|
|
ExprCond(cond2, cst3, cst4),
|
|
cst2),
|
|
A + cst1,
|
|
A + ExprCond(cond1, cst1, cst2),
|
|
ExprCond(cond1, cst1, cst2) + ExprCond(cond2, cst3, cst4),
|
|
ExprCompose(A, cst1),
|
|
ExprCompose(ExprCond(cond1, cst1, cst2), A),
|
|
ExprCompose(ExprCond(cond1, cst1, cst2),
|
|
ExprCond(cond2, cst3, cst4)),
|
|
ExprCond(ExprCond(cond1, cst1, cst2), cst3, cst4),
|
|
]:
|
|
print "*" * 80
|
|
print expr
|
|
sol = possible_values(expr)
|
|
print sol
|
|
print "Resulting constraints:"
|
|
for consval in sol:
|
|
print "For value %s" % consval.value
|
|
for constraint in consval.constraints:
|
|
print "\t%s" % constraint.to_constraint()
|
|
|
|
# Repr
|
|
for expr in [
|
|
cst1,
|
|
A,
|
|
ExprMem(cst1, 32),
|
|
ExprCond(cond1, cst1, cst2),
|
|
A + cst1,
|
|
ExprCompose(A, cst1),
|
|
A.msb(),
|
|
ExprAff(A, cst1),
|
|
]:
|
|
print repr(expr)
|
|
assert expr == eval(repr(expr))
|