mirror of
https://github.com/cea-sec/miasm
synced 2026-06-21 13:48:18 +00:00
5dec442348
exprsliceto is only used in exprcompose, so it can be removed from IL representation, and exprcompose will deal start/stop fields WARNING: as IL is modified, it may break a lot of scripts
83 lines
1.2 KiB
Python
83 lines
1.2 KiB
Python
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([(a[:8], 8, 16),
|
|
(a[8:16], 0, 8)])
|
|
print o
|
|
print o.canonize()
|
|
|
|
o2 = ExprCompose([(a[8:16], 0, 8),
|
|
(a[:8], 8, 16)])
|
|
print o2
|
|
print o2.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()
|
|
|