about summary refs log tree commit diff stats
path: root/example/expression/simplification_tools.py
blob: ed147c048174b134adf96c15df551e55e19c9c7e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from miasm2.expression.expression import *
from miasm2.expression.simplifications import expr_simp
from pdb import pm
import os

filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
    execfile(filename)

print """
Expression simplification demo.
(and regression test)
"""


a = ExprId('a')
b = ExprId('b')
c = ExprId('c')
d = ExprId('d')
e = ExprId('e')

m = ExprMem(a)
s = a[:8]

i1 = ExprInt(uint32(0x1))
i2 = ExprInt(uint32(0x2))
cc = ExprCond(a, b, c)

o = ExprCompose([(a[:8], 8, 16),
                 (a[8:16], 0, 8)])

o2 = ExprCompose([(a[8:16], 0, 8),
                 (a[:8], 8, 16)])

l = [a[:8], b[:8], c[:8], m[:8], s, i1[:8], i2[:8], o[:8]]
l2 = l[::-1]


x = ExprMem(a + b + ExprInt32(0x42))


def replace_expr(e):
    # print 'visit', e
    dct = {c + ExprInt32(0x42): d,
           a + b: c, }
    if e in dct:
        return dct[e]
    return e


print x
y = x.visit(replace_expr)
print y
print x.copy()
print y.copy()
print y == y.copy()
print repr(y), repr(y.copy())


z = ExprCompose([(a[5:5 + 8], 0, 8), (b[:16], 8, 24), (x[:8], 24, 32)])
print z
print z.copy()
print z[:31].copy().visit(replace_expr)

print 'replace'
print x.replace_expr({c + ExprInt32(0x42): d,
                      a + b: c, })
print z.replace_expr({c + ExprInt32(0x42): d,
                      a + b: c, })


u = z.copy()
print u