about summary refs log tree commit diff stats
path: root/example/expression/manip_expression5.py
blob: cc54515daa17894ea288c8b3a8eaeb71cf9bedbc (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
74
75
76
77
78
79
80
81
82
from miasm.expression.expression import *

print 'simple expression canonization demo'

# define 2 ID
a = ExprId('eax', 32)
b = ExprId('ebx', 32)
print a, b
# eax ebx

# add those ID
c = ExprOp('+', a, b)
print c
# (eax + ebx)

# + automaticaly generates ExprOp('+', a, b)
c = a + b
print c
# (eax + ebx)

# ax is a slice of eax
ax = a[:16]
print ax
# eax[0:16]

#memory deref
d = ExprMem(c, 32)
print d
# @32[(eax + ebx)]

print (a+b).canonize()
print (b+a).canonize()

m = ExprMem(a)

print (a+m).canonize()
print (m+a).canonize()

s = a[:8]

print (a+s).canonize()
print (s+a).canonize()

print (m+s).canonize()
print (s+m).canonize()

i1 = ExprInt(uint32(0x1))
i2 = ExprInt(uint32(0x2))

print (i1+i2).canonize()
print (i2+i1).canonize()

print (a+i2).canonize()
print (i2+a).canonize()

print (m+i2).canonize()
print (i2+m).canonize()

print (s+i2).canonize()
print (i2+s).canonize()

cc = ExprCond(a, b, c)

o = ExprCompose([ExprSliceTo(a[:8], 8, 16),
                 ExprSliceTo(a[8:16], 0, 8)])
print o
print o.canonize()

o = ExprCompose([ExprSliceTo(a[8:16], 0, 8),
                 ExprSliceTo(a[:8], 8, 16)])
print o
print o.canonize()

print ExprMem(o).canonize()

l = [a, b, c, m, s, i1, i2, o]
print l
print ExprOp('+', *l).canonize()
l.reverse()
print l
print ExprOp('+', *l).canonize()