Files
2024-08-19 20:55:10 +02:00

125 lines
2.7 KiB
Python

from __future__ import print_function
#
# Expression regression tests #
#
from pdb import pm
from miasm.expression.expression import *
from miasm.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", 32)
B = ExprId("B", 32)
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(),
ExprAssign(A, cst1),
]:
print(repr(expr))
assert expr == eval(repr(expr))
aff = ExprAssign(A[0:32], cst1)
assert aff.dst == A and aff.src == cst1
mem = ExprMem(A, 32)
assert mem.get_r() == set([mem])
assert mem.get_r(mem_read=True) == set([mem, A])
C = A+B
D = C + A
E = A / B
F = A // B
assert E is F
assert A in A
assert A in C
assert B in C
assert C in C
assert E in E
assert A in D
assert B in D
assert C in D
assert D in D
assert A in E
assert B in E
assert C not in A
assert C not in B
assert D not in A
assert D not in B
assert D not in C
assert cst1.get_r(cst_read=True) == set([cst1])
mem1 = ExprMem(A, 32)
mem2 = ExprMem(mem1 + B, 32)
assert mem2.get_r() == set([mem2])
assign1 = ExprAssign(A, cst1)
assert assign1.get_r() == set([])
assign2 = ExprAssign(mem1, D)
assert assign2.get_r() == set([A, B])
assert assign2.get_r(mem_read=True) == set([A, B])
assert assign2.get_w() == set([mem1])
assign3 = ExprAssign(mem1, mem2)
assert assign3.get_r() == set([mem2])
assert assign3.get_r(mem_read=True) == set([mem1, mem2, A, B])
assert assign3.get_w() == set([mem1])