diff options
| author | serpilliere <serpilliere@users.noreply.github.com> | 2022-03-24 10:52:48 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-24 10:52:48 +0100 |
| commit | 299fa40894236163a13051fe3b52b3d2e6951e8a (patch) | |
| tree | 6d502cae4c62e48f4e254df60560c543cdc0c938 | |
| parent | 0601bbed4cb32098f216b4a2af0310e996e69a56 (diff) | |
| parent | aa863605984cde8ae14eb14cf62027e6af4b22ad (diff) | |
| download | miasm-299fa40894236163a13051fe3b52b3d2e6951e8a.tar.gz miasm-299fa40894236163a13051fe3b52b3d2e6951e8a.zip | |
Merge pull request #1420 from CLOVIS-AI/examples-update
Updates to the examples
| -rw-r--r-- | example/expression/constant_propagation.py | 2 | ||||
| -rw-r--r-- | example/expression/graph_dataflow.py | 8 | ||||
| -rw-r--r-- | example/expression/interfer.py | 2 | ||||
| -rw-r--r-- | example/expression/simplification_add.py | 21 | ||||
| -rw-r--r-- | example/expression/solve_condition_stp.py | 25 | ||||
| -rw-r--r-- | example/symbol_exec/depgraph.py | 2 |
6 files changed, 34 insertions, 26 deletions
diff --git a/example/expression/constant_propagation.py b/example/expression/constant_propagation.py index 20c2c3cc..e79adb44 100644 --- a/example/expression/constant_propagation.py +++ b/example/expression/constant_propagation.py @@ -16,7 +16,7 @@ from miasm.core.locationdb import LocationDB -parser = ArgumentParser("Constant expression propagation") +parser = ArgumentParser(description="Constant expression propagation") parser.add_argument('filename', help="File to analyze") parser.add_argument('address', help="Starting address for disassembly engine") parser.add_argument('-s', "--simplify", action="store_true", diff --git a/example/expression/graph_dataflow.py b/example/expression/graph_dataflow.py index f40646bc..dc09eae4 100644 --- a/example/expression/graph_dataflow.py +++ b/example/expression/graph_dataflow.py @@ -13,7 +13,7 @@ from miasm.analysis.data_flow import DeadRemoval from miasm.core.locationdb import LocationDB -parser = ArgumentParser("Simple expression use for generating dataflow graph") +parser = ArgumentParser(description="Simple expression use for generating dataflow graph") parser.add_argument("filename", help="File to analyse") parser.add_argument("addr", help="Function's address") parser.add_argument("-s", "--symb", help="Symbolic execution mode", @@ -158,8 +158,10 @@ gen_block_data_flow_graph(lifter, ircfg, ad, block_flow_cb) print('*' * 40) print(""" View with: -dotty dataflow.dot +dotty data.dot + or +xdot data.dot or Generate ps with pdf: -dot -Tps dataflow_xx.dot -o graph.ps +dot -Tps data.dot -o graph.ps """) diff --git a/example/expression/interfer.py b/example/expression/interfer.py index 5055e1f6..7e660b9b 100644 --- a/example/expression/interfer.py +++ b/example/expression/interfer.py @@ -3,6 +3,8 @@ from miasm.expression.expression import * """ Test memory interferences + +A memory interference may appear when two ExprMem objects relate to the same area of memory: editing one may impact the other. """ a32 = ExprId('a', 32) diff --git a/example/expression/simplification_add.py b/example/expression/simplification_add.py index ff28d56e..c24c15e3 100644 --- a/example/expression/simplification_add.py +++ b/example/expression/simplification_add.py @@ -1,7 +1,11 @@ from __future__ import print_function + import miasm.expression.expression as m2_expr -from miasm.expression.simplifications import expr_simp -from pdb import pm +from miasm.expression.simplifications import ExpressionSimplifier + +# Creates an expression simplifier that (by default) applies no simplifications. +# Other instances with simplifications enabled by default can be found in `expressions/simplifications.py`. +simp = ExpressionSimplifier() print(""" Expression simplification demo: Adding a simplification: @@ -10,6 +14,7 @@ a + a + a == a * 3 More detailed examples can be found in miasm/expression/simplification*. """) + # Define the simplification method ## @expr_simp is the current expression simplifier instance ## (for recursive simplifications) @@ -31,17 +36,17 @@ def simp_add_mul(expr_simp, expr): # Do not simplify return expr + a = m2_expr.ExprId('a', 32) base_expr = a + a + a print("Without adding the simplification:") -print("\t%s = %s" % (base_expr, expr_simp(base_expr))) +print("\t%s = %s" % (base_expr, simp(base_expr))) # Enable pass -expr_simp.enable_passes({m2_expr.ExprOp: [simp_add_mul]}) +simp.enable_passes({m2_expr.ExprOp: [simp_add_mul]}) print("After adding the simplification:") -print("\t%s = %s" % (base_expr, expr_simp(base_expr))) +print("\t%s = %s" % (base_expr, simp(base_expr))) -# Automatic fail -assert(expr_simp(base_expr) == m2_expr.ExprOp("*", a, - m2_expr.ExprInt(3, a.size))) +assert simp(base_expr) == m2_expr.ExprOp("*", a, + m2_expr.ExprInt(3, a.size)) diff --git a/example/expression/solve_condition_stp.py b/example/expression/solve_condition_stp.py index 634e2337..60ebf387 100644 --- a/example/expression/solve_condition_stp.py +++ b/example/expression/solve_condition_stp.py @@ -1,21 +1,20 @@ from __future__ import print_function -import sys + import subprocess +import sys from optparse import OptionParser -from pdb import pm from future.utils import viewitems -from miasm.analysis.machine import Machine from miasm.analysis.binary import Container +from miasm.analysis.machine import Machine +from miasm.core import parse_asm +from miasm.core.locationdb import LocationDB from miasm.expression.expression import ExprInt, ExprCond, ExprId, \ get_expr_ids, ExprAssign, ExprLoc -from miasm.core.bin_stream import bin_stream_str -from miasm.ir.symbexec import SymbolicExecutionEngine, get_block from miasm.expression.simplifications import expr_simp -from miasm.core import parse_asm -from miasm.ir.translators.translator import Translator -from miasm.core.locationdb import LocationDB +from miasm.ir.symbexec import SymbolicExecutionEngine, get_block +from miasm.ir.translators.translator import Translator machine = Machine("x86_32") @@ -181,14 +180,14 @@ if __name__ == '__main__': out.append('(check-sat)') open('out.dot', 'w').write('\n'.join(out)) try: - cases = subprocess.check_output(["/home/serpilliere/tools/stp/stp", + cases = subprocess.check_output(["stp", "-p", '--SMTLIB2', "out.dot"]) - except OSError: - print("Cannot find stp binary!") + except OSError as e: + print("Cannot execute 'stp':", e.strerror) break - for c in cases.split('\n'): - if c.startswith('ASSERT'): + for c in cases.split(b'\n'): + if c.startswith(b'ASSERT'): all_cases.add((addr, c)) print('*' * 40, 'ALL COND', '*' * 40) diff --git a/example/symbol_exec/depgraph.py b/example/symbol_exec/depgraph.py index 21c6fe45..a7df2e25 100644 --- a/example/symbol_exec/depgraph.py +++ b/example/symbol_exec/depgraph.py @@ -12,7 +12,7 @@ from miasm.analysis.depgraph import DependencyGraph from miasm.expression.expression import ExprMem, ExprId, ExprInt from miasm.core.locationdb import LocationDB -parser = ArgumentParser("Dependency grapher") +parser = ArgumentParser(description="Dependency grapher") parser.add_argument("filename", help="Binary to analyse") parser.add_argument("func_addr", help="Function address") parser.add_argument("target_addr", help="Address to start") |