diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2019-02-25 11:09:54 +0100 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2019-03-05 16:52:49 +0100 |
| commit | 02bbb30efea4980c9d133947cbbf69fb599071ad (patch) | |
| tree | 3fea6826fcc5354840a27cb1dc99ff31eef81896 /example/expression/solve_condition_stp.py | |
| parent | eab809932871f91d6f4aa770fc321af9e156e0f5 (diff) | |
| download | focaccia-miasm-02bbb30efea4980c9d133947cbbf69fb599071ad.tar.gz focaccia-miasm-02bbb30efea4980c9d133947cbbf69fb599071ad.zip | |
Support python2/python3
Diffstat (limited to 'example/expression/solve_condition_stp.py')
| -rw-r--r-- | example/expression/solve_condition_stp.py | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/example/expression/solve_condition_stp.py b/example/expression/solve_condition_stp.py index c79dd0b8..e0ab09da 100644 --- a/example/expression/solve_condition_stp.py +++ b/example/expression/solve_condition_stp.py @@ -1,8 +1,11 @@ +from __future__ import print_function import sys import subprocess from optparse import OptionParser from pdb import pm +from future.utils import viewitems + from miasm2.analysis.machine import Machine from miasm2.analysis.binary import Container from miasm2.expression.expression import ExprInt, ExprCond, ExprId, \ @@ -29,9 +32,9 @@ if not args: def emul_symb(ir_arch, ircfg, mdis, states_todo, states_done): while states_todo: addr, symbols, conds = states_todo.pop() - print '*' * 40, "addr", addr, '*' * 40 + print('*' * 40, "addr", addr, '*' * 40) if (addr, symbols, conds) in states_done: - print 'Known state, skipping', addr + print('Known state, skipping', addr) continue states_done.add((addr, symbols, conds)) symbexec = SymbolicExecutionEngine(ir_arch) @@ -40,10 +43,10 @@ def emul_symb(ir_arch, ircfg, mdis, states_todo, states_done): del symbexec.symbols[ir_arch.pc] irblock = get_block(ir_arch, ircfg, mdis, addr) - print 'Run block:' - print irblock + print('Run block:') + print(irblock) addr = symbexec.eval_updt_irblock(irblock) - print 'Final state:' + print('Final state:') symbexec.dump(mems=False) assert addr is not None @@ -55,16 +58,16 @@ def emul_symb(ir_arch, ircfg, mdis, states_todo, states_done): addr_b = expr_simp(symbexec.eval_expr(addr.replace_expr(cond_group_b), {})) if not (addr_a.is_int() or addr_a.is_loc() and addr_b.is_int() or addr_b.is_loc()): - print str(addr_a), str(addr_b) + print(str(addr_a), str(addr_b)) raise ValueError("Unsupported condition") if isinstance(addr_a, ExprInt): addr_a = int(addr_a.arg) if isinstance(addr_b, ExprInt): addr_b = int(addr_b.arg) - states_todo.add((addr_a, symbexec.symbols.copy(), tuple(list(conds) + cond_group_a.items()))) - states_todo.add((addr_b, symbexec.symbols.copy(), tuple(list(conds) + cond_group_b.items()))) + states_todo.add((addr_a, symbexec.symbols.copy(), tuple(list(conds) + list(viewitems(cond_group_a))))) + states_todo.add((addr_b, symbexec.symbols.copy(), tuple(list(conds) + list(viewitems(cond_group_b))))) elif addr == ret_addr: - print 'Return address reached' + print('Return address reached') continue elif addr.is_int(): addr = int(addr.arg) @@ -81,7 +84,7 @@ if __name__ == '__main__': addr = int(options.address, 16) - cont = Container.from_stream(open(args[0])) + cont = Container.from_stream(open(args[0], 'rb')) mdis = machine.dis_engine(cont.bin_stream, loc_db=cont.loc_db) ir_arch = machine.ir(mdis.loc_db) ircfg = ir_arch.new_ircfg() @@ -120,7 +123,7 @@ if __name__ == '__main__': for instr in block.lines: for i, arg in enumerate(instr.args): instr.args[i]= arg.replace_expr(fix_args) - print block + print(block) # add fake address and len to parsed instructions ir_arch.add_asmblock_to_ircfg(block, ircfg) @@ -139,12 +142,12 @@ if __name__ == '__main__': all_info = [] - print '*' * 40, 'conditions to match', '*' * 40 - for addr, symbols, conds in sorted(states_done): - print '*' * 40, addr, '*' * 40 + print('*' * 40, 'conditions to match', '*' * 40) + for addr, symbols, conds in sorted(states_done, key=str): + print('*' * 40, addr, '*' * 40) reqs = [] for k, v in conds: - print k, v + print(k, v) reqs.append((k, v)) all_info.append((addr, reqs)) @@ -179,14 +182,14 @@ if __name__ == '__main__': "-p", '--SMTLIB2', "out.dot"]) except OSError: - print "Cannot find stp binary!" + print("Cannot find stp binary!") break for c in cases.split('\n'): if c.startswith('ASSERT'): all_cases.add((addr, c)) - print '*' * 40, 'ALL COND', '*' * 40 + print('*' * 40, 'ALL COND', '*' * 40) all_cases = list(all_cases) all_cases.sort(key=lambda x: (x[0], x[1])) for addr, val in all_cases: - print 'Address:', addr, 'is reachable using argc', val + print('Address:', addr, 'is reachable using argc', val) |