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
|
import pickle
from miasm2.expression.expression import ExprInt, ExprAssign, ExprId, \
Expr, ExprCompose, ExprMem
a = ExprId("test", 8)
b = ExprInt(1338, 8)
c = a + b
d = ExprCompose(a, b)
e = ExprMem(a, 32)
f = a[:8]
aff = ExprAssign(a, b)
print 'Pickling'
out = pickle.dumps((a, b, c, d, e, f, aff))
print 'Unpickling'
new_a, new_b, new_c, new_d, new_e, new_f, new_aff = pickle.loads(out)
print 'Result'
print a, b, c, aff
print id(a), id(b), id(c), id(d), id(e), id(f), id(aff)
print new_a, new_b, new_c, new_d, new_e, new_f, new_aff
print id(new_a), id(new_b), id(new_c), id(new_d), id(new_e), id(new_f), id(new_aff)
assert a == new_a
assert b == new_b
assert c == new_c
assert d == new_d
assert e == new_e
assert f == new_f
assert aff == new_aff
assert new_a + new_b == a + b
assert a is new_a
assert b is new_b
assert c is new_c
assert d is new_d
assert e is new_e
assert f is new_f
assert aff is new_aff
assert new_a + new_b is a + b
Expr.use_singleton = False
new_a, new_b, new_c, new_d, new_e, new_f, new_aff = pickle.loads(out)
assert a is not new_a
assert b is not new_b
assert c is not new_c
assert d is not new_d
assert e is not new_e
assert f is not new_f
assert aff is not new_aff
assert new_a + new_b is not a + b
assert a == new_a
assert b == new_b
assert c == new_c
assert d == new_d
assert e == new_e
assert f == new_f
assert aff == new_aff
assert new_a + new_b == a + b
|