From e71c3152d1e57a95b5243e7d4c814eed4bad870a Mon Sep 17 00:00:00 2001 From: Ivan “CLOVIS” Canet Date: Tue, 15 Mar 2022 14:35:13 +0100 Subject: Fixed no-op in example/expression/simplification_add Previously, the test would not do anything, as the simplification added in the test is already a part of the default enabled simplifications: ``` Without adding the simplification: a + a + a = a * 0x3 After adding the simplification: a + a + a = a * 0x3 ``` This also meant that editing the added simplification would have no effect (since the expression was already modified by the default simplifier, it would never match the custom one). This commit replaces `expr_simp` by a newly-created `simp` that doesn't have any simplifications enabled, so the one added by the test has an impact. --- example/expression/simplification_add.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'example') 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)) -- cgit 1.4.1 From 64f55d0c4f8f770e5b1d41ce59228ab2cba07f9a Mon Sep 17 00:00:00 2001 From: Ivan “CLOVIS” Canet Date: Tue, 15 Mar 2022 15:00:24 +0100 Subject: Fixed usage for constant_propagation, depgraph & graph_dataflow --- example/expression/constant_propagation.py | 2 +- example/expression/graph_dataflow.py | 2 +- example/symbol_exec/depgraph.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'example') 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..0546fda3 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", 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") -- cgit 1.4.1 From 711752fc45027682e962853906a4b515e5f45849 Mon Sep 17 00:00:00 2001 From: Ivan “CLOVIS” Canet Date: Wed, 16 Mar 2022 09:28:33 +0100 Subject: Fixed output file name in graph_dataflow --- example/expression/graph_dataflow.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'example') diff --git a/example/expression/graph_dataflow.py b/example/expression/graph_dataflow.py index 0546fda3..dc09eae4 100644 --- a/example/expression/graph_dataflow.py +++ b/example/expression/graph_dataflow.py @@ -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 """) -- cgit 1.4.1 From da78d196c6dc886e88346001f0e22bf95cb9e735 Mon Sep 17 00:00:00 2001 From: Ivan “CLOVIS” Canet Date: Wed, 16 Mar 2022 10:12:51 +0100 Subject: Fixed incorrect path in solve_condition_stp --- example/expression/solve_condition_stp.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'example') 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) -- cgit 1.4.1 From aa863605984cde8ae14eb14cf62027e6af4b22ad Mon Sep 17 00:00:00 2001 From: Ivan “CLOVIS” Canet Date: Mon, 21 Mar 2022 09:20:53 +0100 Subject: Short explanation of memory interferences --- example/expression/interfer.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'example') 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) -- cgit 1.4.1