diff options
| author | serpilliere <devnull@localhost> | 2012-06-13 13:04:15 +0200 |
|---|---|---|
| committer | serpilliere <devnull@localhost> | 2012-06-13 13:04:15 +0200 |
| commit | 303600c1c80022a45743ae43ca00198150176439 (patch) | |
| tree | a9c6443e4c65518fabe88594cb30edc658aa4771 | |
| parent | b4eec8cd3ca2ab6ac12d5da2fbb1804451a5ee17 (diff) | |
| download | miasm-303600c1c80022a45743ae43ca00198150176439.tar.gz miasm-303600c1c80022a45743ae43ca00198150176439.zip | |
expression: move test case in example; WARNING: - operator is now unary; +*\&... are n-aire
| -rw-r--r-- | example/expression/manip_expression6.py | 107 | ||||
| -rw-r--r-- | miasm/expression/expression_helper.py | 108 |
2 files changed, 107 insertions, 108 deletions
diff --git a/example/expression/manip_expression6.py b/example/expression/manip_expression6.py new file mode 100644 index 00000000..079faf76 --- /dev/null +++ b/example/expression/manip_expression6.py @@ -0,0 +1,107 @@ +from miasm.expression.expression import * +from miasm.expression.expression_helper import * +import os + +filename = os.environ.get('PYTHONSTARTUP') +if filename and os.path.isfile(filename): + execfile(filename) + +a = ExprId('a') +b = ExprId('b') +c = ExprId('c') +d = ExprId('d') + + +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:9], 0, 8), (b, 8, 24), (x, 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 +u.args[-1][0].arg.args[1].arg = uint32(0x45) +print u +print z +print u == z + +to_test = [(ExprInt32(5)+c+a+b-a+ExprInt32(1)-ExprInt32(5)), + a+b+c-a-b-c+a, + a+a+b+c-(a+(b+c)), + c^b^a^c^b, + a^ExprInt32(0), + (a+b)-b, + -(ExprInt32(0)-((a+b)-b)), + + ExprOp('<<<', a, ExprInt32(32)), + ExprOp('>>>', a, ExprInt32(32)), + ExprOp('>>>', a, ExprInt32(0)), + ExprOp('<<', a, ExprInt32(0)), + + ExprOp('<<<', a, ExprOp('<<<', b, c)), + ExprOp('<<<', ExprOp('<<<', a, b), c), + ExprOp('<<<', ExprOp('>>>', a, b), c), + ExprOp('>>>', ExprOp('<<<', a, b), c), + ExprOp('>>>', ExprOp('<<<', a, b), b), + + + ExprOp('>>>', ExprOp('<<<', a, ExprInt32(10)), ExprInt32(2)), + + ExprOp('>>>', ExprOp('<<<', a, ExprInt32(10)), ExprInt32(2)) ^ ExprOp('>>>', ExprOp('<<<', a, ExprInt32(10)), ExprInt32(2)), + ExprOp(">>", (a & ExprInt32(0xF)), ExprInt32(0x15)), + ExprOp("==", ExprInt32(12), ExprInt32(10)), + ExprOp("==", ExprInt32(12), ExprInt32(12)), + ExprOp("==", a|ExprInt32(12), ExprInt32(0)), + ExprOp("==", a|ExprInt32(12), ExprInt32(14)), + ExprOp("parity", ExprInt32(0xf)), + ExprOp("parity", ExprInt32(0xe)), + ExprInt32(0x4142)[:32], + ExprInt32(0x4142)[:8], + ExprInt32(0x4142)[8:16], + a[:32], + a[:8][:8], + a[:16][:8], + a[8:16][:8], + a[8:32][:8], + a[:16][8:16], + ExprCompose([(a, 0, 32)]), + ExprCompose([(a[:16], 0, 16)]), + ExprCompose([(a[:16], 0, 16), (a, 16, 32)]), + ExprCompose([(a[:16], 0, 16), (a[16:32], 16, 32)]), + + ExprMem(a)[:32], + ExprMem(a)[:16], + ] + + +for e in to_test: + print "#"*80 + print e + print e.visit(expr_simp) + diff --git a/miasm/expression/expression_helper.py b/miasm/expression/expression_helper.py index c0fb6ea9..94b6f32b 100644 --- a/miasm/expression/expression_helper.py +++ b/miasm/expression/expression_helper.py @@ -316,111 +316,3 @@ def expr_simp(e): return e -if __name__ == "__main__": - from miasm.expression.expression import * - from miasm.expression.expression_helper import * - import os - - filename = os.environ.get('PYTHONSTARTUP') - if filename and os.path.isfile(filename): - execfile(filename) - - a = ExprId('a') - b = ExprId('b') - c = ExprId('c') - d = ExprId('d') - - - 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:9], 0, 8), (b, 8, 24), (x, 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 - u.args[-1][0].arg.args[1].arg = uint32(0x45) - print u - print z - print u == z - - to_test = [(ExprInt32(5)+c+a+b-a+ExprInt32(1)-ExprInt32(5)), - a+b+c-a-b-c+a, - a+a+b+c-(a+(b+c)), - c^b^a^c^b, - a^ExprInt32(0), - (a+b)-b, - -(ExprInt32(0)-((a+b)-b)), - - ExprOp('<<<', a, ExprInt32(32)), - ExprOp('>>>', a, ExprInt32(32)), - ExprOp('>>>', a, ExprInt32(0)), - ExprOp('<<', a, ExprInt32(0)), - - ExprOp('<<<', a, ExprOp('<<<', b, c)), - ExprOp('<<<', ExprOp('<<<', a, b), c), - ExprOp('<<<', ExprOp('>>>', a, b), c), - ExprOp('>>>', ExprOp('<<<', a, b), c), - ExprOp('>>>', ExprOp('<<<', a, b), b), - - - ExprOp('>>>', ExprOp('<<<', a, ExprInt32(10)), ExprInt32(2)), - - ExprOp('>>>', ExprOp('<<<', a, ExprInt32(10)), ExprInt32(2)) ^ ExprOp('>>>', ExprOp('<<<', a, ExprInt32(10)), ExprInt32(2)), - ExprOp(">>", (a & ExprInt32(0xF)), ExprInt32(0x15)), - ExprOp("==", ExprInt32(12), ExprInt32(10)), - ExprOp("==", ExprInt32(12), ExprInt32(12)), - ExprOp("==", a|ExprInt32(12), ExprInt32(0)), - ExprOp("==", a|ExprInt32(12), ExprInt32(14)), - ExprOp("parity", ExprInt32(0xf)), - ExprOp("parity", ExprInt32(0xe)), - ExprInt32(0x4142)[:32], - ExprInt32(0x4142)[:8], - ExprInt32(0x4142)[8:16], - a[:32], - a[:8][:8], - a[:16][:8], - a[8:16][:8], - a[8:32][:8], - a[:16][8:16], - ExprCompose([(a, 0, 32)]), - ExprCompose([(a[:16], 0, 16)]), - ExprCompose([(a[:16], 0, 16), (a, 16, 32)]), - ExprCompose([(a[:16], 0, 16), (a[16:32], 16, 32)]), - - ExprMem(a)[:32], - ExprMem(a)[:16], - ] - - - for e in to_test: - print "#"*80 - print e - print e.visit(expr_simp) - |