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()
|