diff options
Diffstat (limited to 'test/analysis')
| -rw-r--r-- | test/analysis/data_flow.py | 18 | ||||
| -rw-r--r-- | test/analysis/depgraph.py | 549 | ||||
| -rw-r--r-- | test/analysis/dg_check.py | 9 | ||||
| -rw-r--r-- | test/analysis/dse.py | 20 | ||||
| -rw-r--r-- | test/analysis/modularintervals.py | 17 | ||||
| -rw-r--r-- | test/analysis/range.py | 9 | ||||
| -rw-r--r-- | test/analysis/unssa.py | 16 |
7 files changed, 329 insertions, 309 deletions
diff --git a/test/analysis/data_flow.py b/test/analysis/data_flow.py index 2d4e2275..ecca3eac 100644 --- a/test/analysis/data_flow.py +++ b/test/analysis/data_flow.py @@ -1,9 +1,13 @@ """ Test cases for dead code elimination""" -from miasm2.expression.expression import ExprId, ExprInt, ExprAssign, ExprMem -from miasm2.core.locationdb import LocationDB -from miasm2.analysis.data_flow import * -from miasm2.ir.analysis import ira -from miasm2.ir.ir import IRBlock, AssignBlock +from __future__ import print_function + +from future.utils import viewitems + +from miasm.expression.expression import ExprId, ExprInt, ExprAssign, ExprMem +from miasm.core.locationdb import LocationDB +from miasm.analysis.data_flow import * +from miasm.ir.analysis import ira +from miasm.ir.ir import IRBlock, AssignBlock loc_db = LocationDB() @@ -683,7 +687,7 @@ for test_nb, test in enumerate([(G1_IRA, G1_EXP_IRA), # Extract test elements g_ira, g_exp_ira = test - print "[+] Test", test_nb+1 + print("[+] Test", test_nb+1) # Print initial graph, for debug open("graph_%02d.dot" % (test_nb+1), "w").write(g_ira.dot()) @@ -700,6 +704,6 @@ for test_nb, test in enumerate([(G1_IRA, G1_EXP_IRA), # Same number of blocks assert len(g_ira.blocks) == len(g_exp_ira.blocks) # Check that each expr in the blocks are the same - for lbl, irb in g_ira.blocks.iteritems(): + for lbl, irb in viewitems(g_ira.blocks): exp_irb = g_exp_ira.blocks[lbl] assert exp_irb.assignblks == irb.assignblks diff --git a/test/analysis/depgraph.py b/test/analysis/depgraph.py index 4d9aa322..345f979a 100644 --- a/test/analysis/depgraph.py +++ b/test/analysis/depgraph.py @@ -1,11 +1,15 @@ """Regression test module for DependencyGraph""" -from miasm2.expression.expression import ExprId, ExprInt, ExprAssign, ExprCond, \ - ExprLoc, LocKey -from miasm2.core.locationdb import LocationDB -from miasm2.ir.analysis import ira -from miasm2.ir.ir import IRBlock, AssignBlock -from miasm2.core.graph import DiGraph -from miasm2.analysis.depgraph import DependencyNode, DependencyGraph +from __future__ import print_function + +from future.utils import viewitems + +from miasm.expression.expression import ExprId, ExprInt, ExprAssign, \ + ExprCond, ExprLoc, LocKey +from miasm.core.locationdb import LocationDB +from miasm.ir.analysis import ira +from miasm.ir.ir import IRBlock, AssignBlock +from miasm.core.graph import DiGraph +from miasm.analysis.depgraph import DependencyNode, DependencyGraph from itertools import count from pdb import pm import re @@ -136,7 +140,7 @@ def bloc2graph(irgraph, label=False, lines=True): block_html_lines = [] if lines and irblock is not None: for assignblk in irblock: - for dst, src in assignblk.iteritems(): + for dst, src in viewitems(assignblk): if False: out_render = "%.8X</td><td %s> " % (0, td_attr) else: @@ -220,7 +224,7 @@ def dg2graph(graph, label=False, lines=True): return '\n'.join(out) -print " [+] Test dictionary equality" +print(" [+] Test dictionary equality") DNA = DependencyNode(LBL2, A, 0) DNB = DependencyNode(LBL1, B, 1) DNC = DependencyNode(LBL1, C, 0) @@ -747,10 +751,14 @@ def flatNode(node): element = int(node.element.arg) else: RuntimeError("Unsupported type '%s'" % type(enode.element)) - name = loc_db.pretty_str(node.loc_key) - return (name, - element, - node.line_nb) + names = loc_db.get_location_names(node.loc_key) + assert len(names) == 1 + name = next(iter(names)) + return ( + name, + element, + node.line_nb + ) else: return str(node) @@ -761,8 +769,10 @@ def flatGraph(graph): out_nodes.add(flatNode(node)) for nodeA, nodeB in graph.edges(): out_edges.add((flatNode(nodeA), flatNode(nodeB))) - out = (tuple(sorted(list(out_nodes))), - tuple(sorted(list(out_edges)))) + out = ( + tuple(sorted(list(out_nodes), key=str)), + tuple(sorted(list(out_edges), key=str)) + ) return out @@ -819,7 +829,7 @@ def test_result(graphA, graphB, leaves): if set(parentsA_noidx.keys()) != set(parentsB_noidx.keys()): return False - for node_noidx, nodeA in parentsA_noidx.iteritems(): + for node_noidx, nodeA in viewitems(parentsA_noidx): nodeB = parentsB_noidx[node_noidx] todo.add((nodeA, nodeB)) @@ -835,7 +845,8 @@ def match_results(resultsA, resultsB, nodes): if len(resultsA) != len(resultsB): return False - for resultA in resultsA: + for flatA in resultsA: + resultA = unflatGraph(flatA) nodes = resultA.leaves() for resultB in resultsB: if test_result(resultA, resultB, nodes): @@ -854,253 +865,253 @@ def get_flat_init_depnodes(depnodes): return out # TESTS -flat_test_results = [[((('lbl0', 1, 0), ('lbl0', 'c', 0), ('lbl1', 'b', 0), ('lbl2', 'a', 0)), - ((('lbl0', 1, 0), ('lbl0', 'c', 0)), - (('lbl0', 'c', 0), ('lbl1', 'b', 0)), - (('lbl1', 'b', 0), ('lbl2', 'a', 0))))], - [((('lbl0', 1, 0), - ('lbl0', 'c', 0), - ('lbl1', 2, 0), - ('lbl1', 'b', 0), - ('lbl2', 'a', 0)), - ((('lbl0', 1, 0), ('lbl0', 'c', 0)), - (('lbl0', 'c', 0), ('lbl2', 'a', 0)), - (('lbl1', 2, 0), ('lbl1', 'b', 0)), - (('lbl1', 'b', 0), ('lbl2', 'a', 0))))], - [((('lbl0', 1, 0), - ('lbl0', 'c', 0), - ('lbl1', 2, 0), - ('lbl1', 'b', 0), - ('lbl3', 'a', 0)), - ((('lbl0', 1, 0), ('lbl0', 'c', 0)), - (('lbl0', 'c', 0), ('lbl3', 'a', 0)), - (('lbl1', 2, 0), ('lbl1', 'b', 0)), - (('lbl1', 'b', 0), ('lbl3', 'a', 0)))), - ((('lbl0', 1, 0), - ('lbl0', 'c', 0), - ('lbl2', 3, 0), - ('lbl2', 'b', 0), - ('lbl3', 'a', 0)), - ((('lbl0', 1, 0), ('lbl0', 'c', 0)), - (('lbl0', 'c', 0), ('lbl3', 'a', 0)), - (('lbl2', 3, 0), ('lbl2', 'b', 0)), - (('lbl2', 'b', 0), ('lbl3', 'a', 0))))], - [(('b', ('lbl2', 'a', 0)), (('b', ('lbl2', 'a', 0)),))], - [((('lbl0', 1, 0), - ('lbl0', 'b', 0), - ('lbl1', 2, 0), - ('lbl1', 'b', 0), - ('lbl2', 'a', 0)), - ((('lbl0', 1, 0), ('lbl0', 'b', 0)), - (('lbl0', 'b', 0), ('lbl1', 'b', 0)), - (('lbl1', 2, 0), ('lbl1', 'b', 0)), - (('lbl1', 'b', 0), ('lbl1', 'b', 0)), - (('lbl1', 'b', 0), ('lbl2', 'a', 0)))), - ((('lbl0', 1, 0), - ('lbl0', 'b', 0), - ('lbl1', 2, 0), - ('lbl1', 'b', 0), - ('lbl2', 'a', 0)), - ((('lbl0', 1, 0), ('lbl0', 'b', 0)), - (('lbl0', 'b', 0), ('lbl1', 'b', 0)), - (('lbl1', 2, 0), ('lbl1', 'b', 0)), - (('lbl1', 'b', 0), ('lbl2', 'a', 0))))], - [((('lbl0', 1, 0), ('lbl0', 'b', 0), ('lbl1', 'a', 0)), - ((('lbl0', 1, 0), ('lbl0', 'b', 0)), - (('lbl0', 'b', 0), ('lbl1', 'a', 0))))], - [((('lbl0', 1, 0), - ('lbl0', 'c', 0), - ('lbl1', 'a', 1), - ('lbl1', 'b', 0), - ('lbl2', 'd', 0)), - ((('lbl0', 1, 0), ('lbl0', 'c', 0)), - (('lbl0', 'c', 0), ('lbl1', 'b', 0)), - (('lbl1', 'a', 1), ('lbl2', 'd', 0)), - (('lbl1', 'b', 0), ('lbl1', 'a', 1))))], - [(('d', ('lbl1', 'b', 0), ('lbl1', 'c', 1), ('lbl2', 'a', 0)), - (('d', ('lbl1', 'c', 1)), - (('lbl1', 'b', 0), ('lbl2', 'a', 0)), - (('lbl1', 'c', 1), ('lbl1', 'b', 0)))), - ((('lbl0', 1, 0), ('lbl0', 'c', 0), ('lbl1', 'b', 0), ('lbl2', 'a', 0)), - ((('lbl0', 1, 0), ('lbl0', 'c', 0)), - (('lbl0', 'c', 0), ('lbl1', 'b', 0)), - (('lbl1', 'b', 0), ('lbl2', 'a', 0))))], +flat_test_results = [[(((b'lbl0', 1, 0), (b'lbl0', 'c', 0), (b'lbl1', 'b', 0), (b'lbl2', 'a', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'c', 0)), + ((b'lbl0', 'c', 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 'b', 0), (b'lbl2', 'a', 0))))], + [(((b'lbl0', 1, 0), + (b'lbl0', 'c', 0), + (b'lbl1', 2, 0), + (b'lbl1', 'b', 0), + (b'lbl2', 'a', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'c', 0)), + ((b'lbl0', 'c', 0), (b'lbl2', 'a', 0)), + ((b'lbl1', 2, 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 'b', 0), (b'lbl2', 'a', 0))))], + [(((b'lbl0', 1, 0), + (b'lbl0', 'c', 0), + (b'lbl1', 2, 0), + (b'lbl1', 'b', 0), + (b'lbl3', 'a', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'c', 0)), + ((b'lbl0', 'c', 0), (b'lbl3', 'a', 0)), + ((b'lbl1', 2, 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 'b', 0), (b'lbl3', 'a', 0)))), + (((b'lbl0', 1, 0), + (b'lbl0', 'c', 0), + (b'lbl2', 3, 0), + (b'lbl2', 'b', 0), + (b'lbl3', 'a', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'c', 0)), + ((b'lbl0', 'c', 0), (b'lbl3', 'a', 0)), + ((b'lbl2', 3, 0), (b'lbl2', 'b', 0)), + ((b'lbl2', 'b', 0), (b'lbl3', 'a', 0))))], + [(('b', (b'lbl2', 'a', 0)), (('b', (b'lbl2', 'a', 0)),))], + [(((b'lbl0', 1, 0), + (b'lbl0', 'b', 0), + (b'lbl1', 2, 0), + (b'lbl1', 'b', 0), + (b'lbl2', 'a', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'b', 0)), + ((b'lbl0', 'b', 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 2, 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 'b', 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 'b', 0), (b'lbl2', 'a', 0)))), + (((b'lbl0', 1, 0), + (b'lbl0', 'b', 0), + (b'lbl1', 2, 0), + (b'lbl1', 'b', 0), + (b'lbl2', 'a', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'b', 0)), + ((b'lbl0', 'b', 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 2, 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 'b', 0), (b'lbl2', 'a', 0))))], + [(((b'lbl0', 1, 0), (b'lbl0', 'b', 0), (b'lbl1', 'a', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'b', 0)), + ((b'lbl0', 'b', 0), (b'lbl1', 'a', 0))))], + [(((b'lbl0', 1, 0), + (b'lbl0', 'c', 0), + (b'lbl1', 'a', 1), + (b'lbl1', 'b', 0), + (b'lbl2', 'd', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'c', 0)), + ((b'lbl0', 'c', 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 'a', 1), (b'lbl2', 'd', 0)), + ((b'lbl1', 'b', 0), (b'lbl1', 'a', 1))))], + [(('d', (b'lbl1', 'b', 0), (b'lbl1', 'c', 1), (b'lbl2', 'a', 0)), + (('d', (b'lbl1', 'c', 1)), + ((b'lbl1', 'b', 0), (b'lbl2', 'a', 0)), + ((b'lbl1', 'c', 1), (b'lbl1', 'b', 0)))), + (((b'lbl0', 1, 0), (b'lbl0', 'c', 0), (b'lbl1', 'b', 0), (b'lbl2', 'a', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'c', 0)), + ((b'lbl0', 'c', 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 'b', 0), (b'lbl2', 'a', 0))))], [(('d', - ('lbl0', 1, 0), - ('lbl0', 'c', 0), - ('lbl1', 'b', 0), - ('lbl1', 'c', 1), - ('lbl2', 'a', 0)), - (('d', ('lbl1', 'c', 1)), - (('lbl0', 1, 0), ('lbl0', 'c', 0)), - (('lbl0', 'c', 0), ('lbl1', 'b', 0)), - (('lbl1', 'b', 0), ('lbl2', 'a', 0)))), - (('d', ('lbl1', 'b', 0), ('lbl1', 'c', 1), ('lbl2', 'a', 0)), - (('d', ('lbl1', 'c', 1)), - (('lbl1', 'b', 0), ('lbl2', 'a', 0)), - (('lbl1', 'c', 1), ('lbl1', 'b', 0))))], - [(('b', ('lbl1', 2, 0), ('lbl1', 'b', 0), ('lbl2', 'a', 0)), - (('b', ('lbl1', 'b', 0)), - (('lbl1', 2, 0), ('lbl1', 'b', 0)), - (('lbl1', 'b', 0), ('lbl1', 'b', 0)), - (('lbl1', 'b', 0), ('lbl2', 'a', 0)))), - (('b', ('lbl1', 2, 0), ('lbl1', 'b', 0), ('lbl2', 'a', 0)), - (('b', ('lbl1', 'b', 0)), - (('lbl1', 2, 0), ('lbl1', 'b', 0)), - (('lbl1', 'b', 0), ('lbl2', 'a', 0))))], - [((('lbl0', 1, 0), - ('lbl0', 2, 0), - ('lbl0', 'a', 0), - ('lbl0', 'b', 0), - ('lbl1', 'a', 0), - ('lbl1', 'b', 0), - ('lbl2', 'a', 0)), - ((('lbl0', 1, 0), ('lbl0', 'a', 0)), - (('lbl0', 2, 0), ('lbl0', 'b', 0)), - (('lbl0', 'a', 0), ('lbl1', 'b', 0)), - (('lbl0', 'b', 0), ('lbl1', 'a', 0)), - (('lbl1', 'a', 0), ('lbl2', 'a', 0)), - (('lbl1', 'b', 0), ('lbl2', 'a', 0))))], - [((('lbl0', 1, 0), - ('lbl0', 'b', 0), - ('lbl1', 2, 1), - ('lbl1', 'a', 0), - ('lbl1', 'b', 1), - ('lbl2', 'b', 0)), - ((('lbl0', 1, 0), ('lbl0', 'b', 0)), - (('lbl0', 'b', 0), ('lbl1', 'b', 1)), - (('lbl1', 2, 1), ('lbl1', 'b', 1)), - (('lbl1', 'a', 0), ('lbl2', 'b', 0)), - (('lbl1', 'b', 1), ('lbl1', 'a', 0)))), - ((('lbl0', 1, 0), - ('lbl0', 'b', 0), - ('lbl1', 2, 1), - ('lbl1', 'a', 0), - ('lbl1', 'b', 1), - ('lbl2', 'b', 0)), - ((('lbl0', 1, 0), ('lbl0', 'b', 0)), - (('lbl0', 'b', 0), ('lbl1', 'b', 1)), - (('lbl1', 2, 1), ('lbl1', 'b', 1)), - (('lbl1', 'a', 0), ('lbl2', 'b', 0)), - (('lbl1', 'b', 1), ('lbl1', 'a', 0)), - (('lbl1', 'b', 1), ('lbl1', 'b', 1)))), - ((('lbl0', 1, 0), ('lbl0', 'b', 0), ('lbl1', 'a', 0), ('lbl2', 'b', 0)), - ((('lbl0', 1, 0), ('lbl0', 'b', 0)), - (('lbl0', 'b', 0), ('lbl1', 'a', 0)), - (('lbl1', 'a', 0), ('lbl2', 'b', 0))))], - [((('lbl0', 1, 0), - ('lbl0', 'a', 0), - ('lbl1', 'c', 0), - ('lbl2', 3, 0), - ('lbl2', 3, 1), - ('lbl2', 'a', 1), - ('lbl2', 'b', 0), - ('lbl3', 'r', 0)), - ((('lbl0', 1, 0), ('lbl0', 'a', 0)), - (('lbl0', 'a', 0), ('lbl2', 'b', 0)), - (('lbl1', 'c', 0), ('lbl3', 'r', 0)), - (('lbl2', 3, 0), ('lbl2', 'b', 0)), - (('lbl2', 3, 1), ('lbl2', 'a', 1)), - (('lbl2', 'a', 1), ('lbl1', 'c', 0)), - (('lbl2', 'a', 1), ('lbl2', 'b', 0)), - (('lbl2', 'b', 0), ('lbl2', 'a', 1)))), - ((('lbl0', 1, 0), - ('lbl0', 'a', 0), - ('lbl1', 'c', 0), - ('lbl2', 3, 0), - ('lbl2', 3, 1), - ('lbl2', 'a', 1), - ('lbl2', 'b', 0), - ('lbl3', 'r', 0)), - ((('lbl0', 1, 0), ('lbl0', 'a', 0)), - (('lbl0', 'a', 0), ('lbl2', 'b', 0)), - (('lbl1', 'c', 0), ('lbl3', 'r', 0)), - (('lbl2', 3, 0), ('lbl2', 'b', 0)), - (('lbl2', 3, 1), ('lbl2', 'a', 1)), - (('lbl2', 'a', 1), ('lbl1', 'c', 0)), - (('lbl2', 'b', 0), ('lbl2', 'a', 1)))), - ((('lbl0', 1, 0), ('lbl0', 'a', 0), ('lbl1', 'c', 0), ('lbl3', 'r', 0)), - ((('lbl0', 1, 0), ('lbl0', 'a', 0)), - (('lbl0', 'a', 0), ('lbl1', 'c', 0)), - (('lbl1', 'c', 0), ('lbl3', 'r', 0))))], + (b'lbl0', 1, 0), + (b'lbl0', 'c', 0), + (b'lbl1', 'b', 0), + (b'lbl1', 'c', 1), + (b'lbl2', 'a', 0)), + (('d', (b'lbl1', 'c', 1)), + ((b'lbl0', 1, 0), (b'lbl0', 'c', 0)), + ((b'lbl0', 'c', 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 'b', 0), (b'lbl2', 'a', 0)))), + (('d', (b'lbl1', 'b', 0), (b'lbl1', 'c', 1), (b'lbl2', 'a', 0)), + (('d', (b'lbl1', 'c', 1)), + ((b'lbl1', 'b', 0), (b'lbl2', 'a', 0)), + ((b'lbl1', 'c', 1), (b'lbl1', 'b', 0))))], + [(('b', (b'lbl1', 2, 0), (b'lbl1', 'b', 0), (b'lbl2', 'a', 0)), + (('b', (b'lbl1', 'b', 0)), + ((b'lbl1', 2, 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 'b', 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 'b', 0), (b'lbl2', 'a', 0)))), + (('b', (b'lbl1', 2, 0), (b'lbl1', 'b', 0), (b'lbl2', 'a', 0)), + (('b', (b'lbl1', 'b', 0)), + ((b'lbl1', 2, 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 'b', 0), (b'lbl2', 'a', 0))))], + [(((b'lbl0', 1, 0), + (b'lbl0', 2, 0), + (b'lbl0', 'a', 0), + (b'lbl0', 'b', 0), + (b'lbl1', 'a', 0), + (b'lbl1', 'b', 0), + (b'lbl2', 'a', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'a', 0)), + ((b'lbl0', 2, 0), (b'lbl0', 'b', 0)), + ((b'lbl0', 'a', 0), (b'lbl1', 'b', 0)), + ((b'lbl0', 'b', 0), (b'lbl1', 'a', 0)), + ((b'lbl1', 'a', 0), (b'lbl2', 'a', 0)), + ((b'lbl1', 'b', 0), (b'lbl2', 'a', 0))))], + [(((b'lbl0', 1, 0), + (b'lbl0', 'b', 0), + (b'lbl1', 2, 1), + (b'lbl1', 'a', 0), + (b'lbl1', 'b', 1), + (b'lbl2', 'b', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'b', 0)), + ((b'lbl0', 'b', 0), (b'lbl1', 'b', 1)), + ((b'lbl1', 2, 1), (b'lbl1', 'b', 1)), + ((b'lbl1', 'a', 0), (b'lbl2', 'b', 0)), + ((b'lbl1', 'b', 1), (b'lbl1', 'a', 0)))), + (((b'lbl0', 1, 0), + (b'lbl0', 'b', 0), + (b'lbl1', 2, 1), + (b'lbl1', 'a', 0), + (b'lbl1', 'b', 1), + (b'lbl2', 'b', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'b', 0)), + ((b'lbl0', 'b', 0), (b'lbl1', 'b', 1)), + ((b'lbl1', 2, 1), (b'lbl1', 'b', 1)), + ((b'lbl1', 'a', 0), (b'lbl2', 'b', 0)), + ((b'lbl1', 'b', 1), (b'lbl1', 'a', 0)), + ((b'lbl1', 'b', 1), (b'lbl1', 'b', 1)))), + (((b'lbl0', 1, 0), (b'lbl0', 'b', 0), (b'lbl1', 'a', 0), (b'lbl2', 'b', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'b', 0)), + ((b'lbl0', 'b', 0), (b'lbl1', 'a', 0)), + ((b'lbl1', 'a', 0), (b'lbl2', 'b', 0))))], + [(((b'lbl0', 1, 0), + (b'lbl0', 'a', 0), + (b'lbl1', 'c', 0), + (b'lbl2', 3, 0), + (b'lbl2', 3, 1), + (b'lbl2', 'a', 1), + (b'lbl2', 'b', 0), + (b'lbl3', 'r', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'a', 0)), + ((b'lbl0', 'a', 0), (b'lbl2', 'b', 0)), + ((b'lbl1', 'c', 0), (b'lbl3', 'r', 0)), + ((b'lbl2', 3, 0), (b'lbl2', 'b', 0)), + ((b'lbl2', 3, 1), (b'lbl2', 'a', 1)), + ((b'lbl2', 'a', 1), (b'lbl1', 'c', 0)), + ((b'lbl2', 'a', 1), (b'lbl2', 'b', 0)), + ((b'lbl2', 'b', 0), (b'lbl2', 'a', 1)))), + (((b'lbl0', 1, 0), + (b'lbl0', 'a', 0), + (b'lbl1', 'c', 0), + (b'lbl2', 3, 0), + (b'lbl2', 3, 1), + (b'lbl2', 'a', 1), + (b'lbl2', 'b', 0), + (b'lbl3', 'r', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'a', 0)), + ((b'lbl0', 'a', 0), (b'lbl2', 'b', 0)), + ((b'lbl1', 'c', 0), (b'lbl3', 'r', 0)), + ((b'lbl2', 3, 0), (b'lbl2', 'b', 0)), + ((b'lbl2', 3, 1), (b'lbl2', 'a', 1)), + ((b'lbl2', 'a', 1), (b'lbl1', 'c', 0)), + ((b'lbl2', 'b', 0), (b'lbl2', 'a', 1)))), + (((b'lbl0', 1, 0), (b'lbl0', 'a', 0), (b'lbl1', 'c', 0), (b'lbl3', 'r', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'a', 0)), + ((b'lbl0', 'a', 0), (b'lbl1', 'c', 0)), + ((b'lbl1', 'c', 0), (b'lbl3', 'r', 0))))], [(('d', - ('lbl0', 1, 0), - ('lbl0', 'a', 0), - ('lbl1', 'b', 0), - ('lbl3', 'r', 0)), - (('d', ('lbl3', 'r', 0)), - (('lbl0', 1, 0), ('lbl0', 'a', 0)), - (('lbl0', 'a', 0), ('lbl1', 'b', 0)), - (('lbl1', 'b', 0), ('lbl3', 'r', 0)))), - ((('lbl0', 1, 0), - ('lbl0', 'a', 0), - ('lbl1', 'b', 0), - ('lbl2', 1, 1), - ('lbl2', 'a', 1), - ('lbl2', 'd', 0), - ('lbl3', 'r', 0)), - ((('lbl0', 1, 0), ('lbl0', 'a', 0)), - (('lbl0', 'a', 0), ('lbl2', 'd', 0)), - (('lbl1', 'b', 0), ('lbl3', 'r', 0)), - (('lbl2', 1, 1), ('lbl2', 'a', 1)), - (('lbl2', 'a', 1), ('lbl1', 'b', 0)), - (('lbl2', 'a', 1), ('lbl2', 'd', 0)), - (('lbl2', 'd', 0), ('lbl2', 'a', 1)), - (('lbl2', 'd', 0), ('lbl3', 'r', 0)))), - ((('lbl0', 1, 0), - ('lbl0', 'a', 0), - ('lbl1', 'b', 0), - ('lbl2', 1, 1), - ('lbl2', 'a', 1), - ('lbl2', 'd', 0), - ('lbl3', 'r', 0)), - ((('lbl0', 1, 0), ('lbl0', 'a', 0)), - (('lbl0', 'a', 0), ('lbl2', 'd', 0)), - (('lbl1', 'b', 0), ('lbl3', 'r', 0)), - (('lbl2', 1, 1), ('lbl2', 'a', 1)), - (('lbl2', 'a', 1), ('lbl1', 'b', 0)), - (('lbl2', 'd', 0), ('lbl2', 'a', 1)), - (('lbl2', 'd', 0), ('lbl3', 'r', 0))))], + (b'lbl0', 1, 0), + (b'lbl0', 'a', 0), + (b'lbl1', 'b', 0), + (b'lbl3', 'r', 0)), + (('d', (b'lbl3', 'r', 0)), + ((b'lbl0', 1, 0), (b'lbl0', 'a', 0)), + ((b'lbl0', 'a', 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 'b', 0), (b'lbl3', 'r', 0)))), + (((b'lbl0', 1, 0), + (b'lbl0', 'a', 0), + (b'lbl1', 'b', 0), + (b'lbl2', 1, 1), + (b'lbl2', 'a', 1), + (b'lbl2', 'd', 0), + (b'lbl3', 'r', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'a', 0)), + ((b'lbl0', 'a', 0), (b'lbl2', 'd', 0)), + ((b'lbl1', 'b', 0), (b'lbl3', 'r', 0)), + ((b'lbl2', 1, 1), (b'lbl2', 'a', 1)), + ((b'lbl2', 'a', 1), (b'lbl1', 'b', 0)), + ((b'lbl2', 'a', 1), (b'lbl2', 'd', 0)), + ((b'lbl2', 'd', 0), (b'lbl2', 'a', 1)), + ((b'lbl2', 'd', 0), (b'lbl3', 'r', 0)))), + (((b'lbl0', 1, 0), + (b'lbl0', 'a', 0), + (b'lbl1', 'b', 0), + (b'lbl2', 1, 1), + (b'lbl2', 'a', 1), + (b'lbl2', 'd', 0), + (b'lbl3', 'r', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'a', 0)), + ((b'lbl0', 'a', 0), (b'lbl2', 'd', 0)), + ((b'lbl1', 'b', 0), (b'lbl3', 'r', 0)), + ((b'lbl2', 1, 1), (b'lbl2', 'a', 1)), + ((b'lbl2', 'a', 1), (b'lbl1', 'b', 0)), + ((b'lbl2', 'd', 0), (b'lbl2', 'a', 1)), + ((b'lbl2', 'd', 0), (b'lbl3', 'r', 0))))], [(('b', - ('lbl0', 1, 0), - ('lbl0', 'a', 0), - ('lbl1', 'b', 2), - ('lbl1', 'c', 1), - ('lbl1', 'd', 0), - ('lbl2', 'r', 0)), - (('b', ('lbl1', 'd', 0)), - (('lbl0', 1, 0), ('lbl0', 'a', 0)), - (('lbl0', 'a', 0), ('lbl1', 'd', 0)), - (('lbl1', 'b', 2), ('lbl1', 'd', 0)), - (('lbl1', 'b', 2), ('lbl2', 'r', 0)), - (('lbl1', 'c', 1), ('lbl1', 'b', 2)), - (('lbl1', 'd', 0), ('lbl1', 'c', 1)))), + (b'lbl0', 1, 0), + (b'lbl0', 'a', 0), + (b'lbl1', 'b', 2), + (b'lbl1', 'c', 1), + (b'lbl1', 'd', 0), + (b'lbl2', 'r', 0)), + (('b', (b'lbl1', 'd', 0)), + ((b'lbl0', 1, 0), (b'lbl0', 'a', 0)), + ((b'lbl0', 'a', 0), (b'lbl1', 'd', 0)), + ((b'lbl1', 'b', 2), (b'lbl1', 'd', 0)), + ((b'lbl1', 'b', 2), (b'lbl2', 'r', 0)), + ((b'lbl1', 'c', 1), (b'lbl1', 'b', 2)), + ((b'lbl1', 'd', 0), (b'lbl1', 'c', 1)))), (('b', - ('lbl0', 1, 0), - ('lbl0', 'a', 0), - ('lbl1', 'b', 2), - ('lbl1', 'c', 1), - ('lbl1', 'd', 0), - ('lbl2', 'r', 0)), - (('b', ('lbl1', 'd', 0)), - (('lbl0', 1, 0), ('lbl0', 'a', 0)), - (('lbl0', 'a', 0), ('lbl1', 'd', 0)), - (('lbl1', 'b', 2), ('lbl2', 'r', 0)), - (('lbl1', 'c', 1), ('lbl1', 'b', 2)), - (('lbl1', 'd', 0), ('lbl1', 'c', 1))))], - [((('lbl0', 1, 0), ('lbl0', 'a', 0), ('lbl5', 'r', 0)), - ((('lbl0', 1, 0), ('lbl0', 'a', 0)), - (('lbl0', 'a', 0), ('lbl5', 'r', 0))))], - [((('lbl0', 2, 0), - ('lbl0', 'd', 0), - ('lbl1', 'a', 0), - ('lbl1', 'b', 0), - ('lbl2', 'a', 0)), - ((('lbl0', 2, 0), ('lbl0', 'd', 0)), - (('lbl0', 'd', 0), ('lbl1', 'a', 0)), - (('lbl0', 'd', 0), ('lbl1', 'b', 0)), - (('lbl1', 'a', 0), ('lbl2', 'a', 0)), - (('lbl1', 'b', 0), ('lbl2', 'a', 0))))]] + (b'lbl0', 1, 0), + (b'lbl0', 'a', 0), + (b'lbl1', 'b', 2), + (b'lbl1', 'c', 1), + (b'lbl1', 'd', 0), + (b'lbl2', 'r', 0)), + (('b', (b'lbl1', 'd', 0)), + ((b'lbl0', 1, 0), (b'lbl0', 'a', 0)), + ((b'lbl0', 'a', 0), (b'lbl1', 'd', 0)), + ((b'lbl1', 'b', 2), (b'lbl2', 'r', 0)), + ((b'lbl1', 'c', 1), (b'lbl1', 'b', 2)), + ((b'lbl1', 'd', 0), (b'lbl1', 'c', 1))))], + [(((b'lbl0', 1, 0), (b'lbl0', 'a', 0), (b'lbl5', 'r', 0)), + (((b'lbl0', 1, 0), (b'lbl0', 'a', 0)), + ((b'lbl0', 'a', 0), (b'lbl5', 'r', 0))))], + [(((b'lbl0', 2, 0), + (b'lbl0', 'd', 0), + (b'lbl1', 'a', 0), + (b'lbl1', 'b', 0), + (b'lbl2', 'a', 0)), + (((b'lbl0', 2, 0), (b'lbl0', 'd', 0)), + ((b'lbl0', 'd', 0), (b'lbl1', 'a', 0)), + ((b'lbl0', 'd', 0), (b'lbl1', 'b', 0)), + ((b'lbl1', 'a', 0), (b'lbl2', 'a', 0)), + ((b'lbl1', 'b', 0), (b'lbl2', 'a', 0))))]] test_results = [[unflatGraph(flat_result) for flat_result in flat_results] for flat_results in flat_test_results] @@ -1127,7 +1138,7 @@ for test_nb, test in enumerate([(G1_IRA, G1_INPUT), ]): # Extract test elements - print "[+] Test", test_nb + 1 + print("[+] Test", test_nb + 1) ircfg, (depnodes, heads) = test open("graph_%02d.dot" % (test_nb + 1), "w").write(ircfg.dot()) @@ -1149,25 +1160,25 @@ for test_nb, test in enumerate([(G1_IRA, G1_INPUT), # if g_ind == 4: # TODO: Implicit specifications # continue - print " - Class %s - %s" % (g_dep.__class__.__name__, - suffix_key_list[g_ind]) + print(" - Class %s - %s" % (g_dep.__class__.__name__, + suffix_key_list[g_ind])) # Select the correct result key mode_suffix = suffix_key_list[g_ind] graph_test_key = "graph" + mode_suffix # Test public APIs results = g_dep.get_from_depnodes(depnodes, heads) - print "RESULTS" + print("RESULTS") all_results = set() all_flat = set() for i, result in enumerate(results): all_flat.add(flatGraph(result.graph)) - all_results.add(unflatGraph(flatGraph(result.graph))) + all_results.add(flatGraph(result.graph)) open("graph_test_%02d_%02d.dot" % (test_nb + 1, i), "w").write(dg2graph(result.graph)) if g_ind == 0: - all_flat = sorted(all_flat) + all_flat = sorted(all_flat, key=str) all_flats.append(all_flat) flat_depnodes = get_flat_init_depnodes(depnodes) if not match_results(all_results, test_results[test_nb], flat_depnodes): @@ -1175,11 +1186,11 @@ for test_nb, test in enumerate([(G1_IRA, G1_INPUT), continue if FAILED: - print "FAILED :", len(FAILED) + print("FAILED :", len(FAILED)) for test_num in sorted(FAILED): - print test_num, + print(test_num, end=' ') else: - print "SUCCESS" + print("SUCCESS") # Return an error status on error assert not FAILED diff --git a/test/analysis/dg_check.py b/test/analysis/dg_check.py index dd662079..a50855ef 100644 --- a/test/analysis/dg_check.py +++ b/test/analysis/dg_check.py @@ -1,3 +1,4 @@ +from __future__ import print_function from pdb import pm import sys import subprocess @@ -12,9 +13,7 @@ expected = json.load(open(expected_file)) result = json.loads(stdout) -expected.sort() -result.sort() +assert len(expected) == len(result) -print expected -print result -assert expected == result +assert all(r in result for r in expected) +assert all(r in expected for r in result) diff --git a/test/analysis/dse.py b/test/analysis/dse.py index 344b9108..7d5998f1 100644 --- a/test/analysis/dse.py +++ b/test/analysis/dse.py @@ -1,13 +1,15 @@ import sys from pdb import pm -from elfesteem.strpatchwork import StrPatchwork -from miasm2.core import parse_asm -from miasm2.expression.expression import ExprCompose, ExprOp, ExprInt, ExprId -from miasm2.core.asmblock import asm_resolve_final -from miasm2.analysis.machine import Machine -from miasm2.jitter.csts import PAGE_READ, PAGE_WRITE -from miasm2.analysis.dse import DSEEngine +from future.utils import viewitems + +from miasm.loader.strpatchwork import StrPatchwork +from miasm.core import parse_asm +from miasm.expression.expression import ExprCompose, ExprOp, ExprInt, ExprId +from miasm.core.asmblock import asm_resolve_final +from miasm.analysis.machine import Machine +from miasm.jitter.csts import PAGE_READ, PAGE_WRITE +from miasm.analysis.dse import DSEEngine class DSETest(object): @@ -80,10 +82,10 @@ class DSETest(object): loc_db.set_location_offset(loc_db.get_name_location("main"), 0x0) output = StrPatchwork() patches = asm_resolve_final(mn_x86, blocks, loc_db) - for offset, raw in patches.items(): + for offset, raw in viewitems(patches): output[offset] = raw - self.assembly = str(output) + self.assembly = bytes(output) def check(self): regs = self.dse.ir_arch.arch.regs diff --git a/test/analysis/modularintervals.py b/test/analysis/modularintervals.py index 45aa82bd..2d877567 100644 --- a/test/analysis/modularintervals.py +++ b/test/analysis/modularintervals.py @@ -1,9 +1,10 @@ +from builtins import range from random import shuffle, seed -from miasm2.core.interval import interval -from miasm2.analysis.modularintervals import ModularIntervals -from miasm2.expression.expression import * -from miasm2.expression.simplifications import expr_simp +from miasm.core.interval import interval +from miasm.analysis.modularintervals import ModularIntervals +from miasm.expression.expression import * +from miasm.expression.simplifications import expr_simp def gen_all_intervals(size): @@ -11,10 +12,10 @@ def gen_all_intervals(size): -> 2**(2**size) (number of partition) """ nb_elements = 1 << size - for bvec in xrange(1 << nb_elements): + for bvec in range(1 << nb_elements): # Bit vector: if bit i is on, i is in the interval to_ret = interval() - for i in xrange(nb_elements): + for i in range(nb_elements): if bvec & i == i: to_ret += [(i, i)] yield to_ret @@ -22,12 +23,12 @@ def gen_all_intervals(size): def interval_elements(interv): """Generator on element of an interval""" for sub_range in interv: - for i in xrange(sub_range[0], sub_range[1] + 1): + for i in range(sub_range[0], sub_range[1] + 1): yield i size = 4 left, right = list(gen_all_intervals(size)), list(gen_all_intervals(size)) -right_int = range(1 << size) +right_int = list(range(1 << size)) mask = (1 << size) - 1 def test(left, right): diff --git a/test/analysis/range.py b/test/analysis/range.py index 0e38ec95..6dc109ac 100644 --- a/test/analysis/range.py +++ b/test/analysis/range.py @@ -1,6 +1,7 @@ -from miasm2.expression.expression import * -from miasm2.analysis.expression_range import expr_range -from miasm2.ir.translators import Translator +from __future__ import print_function +from miasm.expression.expression import * +from miasm.analysis.expression_range import expr_range +from miasm.ir.translators import Translator import z3 trans = Translator.to_language("z3") @@ -81,7 +82,7 @@ for expr in [ ]: computed_range = expr_range(expr) - print expr, computed_range + print(expr, computed_range) # Trivia checks assert all(x[1] < (1 << expr.size) for x in computed_range) diff --git a/test/analysis/unssa.py b/test/analysis/unssa.py index a796f3b6..55ceac9e 100644 --- a/test/analysis/unssa.py +++ b/test/analysis/unssa.py @@ -1,10 +1,12 @@ """ Test cases for dead code elimination""" -from miasm2.expression.expression import ExprId, ExprInt, ExprAssign, ExprMem, \ +from future.utils import viewvalues + +from miasm.expression.expression import ExprId, ExprInt, ExprAssign, ExprMem, \ ExprCond, ExprLoc -from miasm2.core.locationdb import LocationDB -from miasm2.analysis.simplifier import IRCFGSimplifierSSA -from miasm2.ir.analysis import ira -from miasm2.ir.ir import IRCFG, IRBlock, AssignBlock +from miasm.core.locationdb import LocationDB +from miasm.analysis.simplifier import IRCFGSimplifierSSA +from miasm.ir.analysis import ira +from miasm.ir.ir import IRCFG, IRBlock, AssignBlock loc_db = LocationDB() @@ -568,7 +570,7 @@ class IRAOutRegs(IRATest): continue if reg in regs_todo: out[reg] = dst - return set(out.values()) + return set(viewvalues(out)) @@ -623,7 +625,7 @@ for test_nb, ircfg in enumerate( # Save a copy of ircfg ircfg_orig = IRCFG(IRDst, loc_db) - for irblock in ircfg.blocks.values(): + for irblock in viewvalues(ircfg.blocks): ircfg_orig.add_irblock(irblock) # SSA |