about summary refs log tree commit diff stats
path: root/example/expression/manip_expression4.py
diff options
context:
space:
mode:
authorCamille Mougey <camille.mougey@cea.fr>2014-09-19 13:58:03 +0200
committerCamille Mougey <camille.mougey@cea.fr>2014-09-19 13:58:03 +0200
commit2bc1d7810dd07f9a0401984125fc82ac5ac7d9aa (patch)
tree40e084cd2bb9e6224c1fdbfef158f71102863897 /example/expression/manip_expression4.py
parent69c35ab316c0dae069ad7fb9d0567c6dd8746a8e (diff)
downloadmiasm-2bc1d7810dd07f9a0401984125fc82ac5ac7d9aa.tar.gz
miasm-2bc1d7810dd07f9a0401984125fc82ac5ac7d9aa.zip
Expression examples: Rename examples with meaningfull names
Diffstat (limited to 'example/expression/manip_expression4.py')
-rw-r--r--example/expression/manip_expression4.py215
1 files changed, 0 insertions, 215 deletions
diff --git a/example/expression/manip_expression4.py b/example/expression/manip_expression4.py
deleted file mode 100644
index bbf721f7..00000000
--- a/example/expression/manip_expression4.py
+++ /dev/null
@@ -1,215 +0,0 @@
-import os
-import sys
-from miasm2.expression.expression import *
-from miasm2.expression.simplifications import expr_simp
-from miasm2.arch.x86.ira import ir_a_x86_32
-from miasm2.arch.x86.arch import mn_x86
-from miasm2.core import asmbloc
-from miasm2.core.bin_stream import bin_stream_str
-from elfesteem import pe_init
-from optparse import OptionParser
-from pdb import pm
-from miasm2.ir.ir import ir
-from miasm2.arch.x86.regs import *
-from miasm2.arch.x86.disasm import dis_x86_32
-
-from miasm2.analysis.data_analysis import intra_bloc_flow_raw, inter_bloc_flow
-
-from miasm2.core.graph import DiGraph
-from miasm2.ir.symbexec import symbexec
-
-from pprint import pprint as pp
-
-filename = os.environ.get('PYTHONSTARTUP')
-if filename and os.path.isfile(filename):
-    execfile(filename)
-
-print """
-Simple expression use for generating dataflow graph
-Exemple:
-python manip_expression4.py  sc_connect_back.bin 0x2e
-"""
-
-
-parser = OptionParser(usage="usage: %prog [options] sc_connect_back.bin")
-
-(options, args) = parser.parse_args(sys.argv[1:])
-if len(args) != 2:
-    parser.print_help()
-    sys.exit(0)
-
-
-def node_x_2_id(n, x):
-    return hash(str(n) + str(x)) & 0xffffffffffffffff
-
-
-def get_node_name(label, i, n):
-    # n_name = "%s_%d_%s"%(label.name, i, n)
-    n_name = (label.name, i, n)
-    return n_name
-
-
-def get_modified_symbols(sb):
-    # get modified IDS
-    ids = sb.symbols.symbols_id.keys()
-    ids.sort()
-    out = {}
-    for i in ids:
-        if i in sb.arch.regs.regs_init and \
-                i in sb.symbols.symbols_id and \
-                sb.symbols.symbols_id[i] == sb.arch.regs.regs_init[i]:
-            continue
-        # print i, sb.symbols.symbols_id[i]
-        out[i] = sb.symbols.symbols_id[i]
-
-    # get mem IDS
-    mems = sb.symbols.symbols_mem.values()
-    for m, v in mems:
-        print m, v
-        out[m] = v
-    pp([(str(x[0]), str(x[1])) for x in out.items()])
-    return out
-
-
-def intra_bloc_flow_symb(ir_arch, flow_graph, irbloc):
-    symbols_init = {}
-    for i, r in enumerate(all_regs_ids):
-        symbols_init[r] = all_regs_ids_init[i]
-    sb = symbexec(ir_arch, symbols_init)
-    sb.emulbloc(irbloc)
-    print '*' * 40
-    print irbloc
-    # sb.dump_mem()
-    # sb.dump_id()
-    in_nodes = {}
-    out_nodes = {}
-
-    out = get_modified_symbols(sb)
-    current_nodes = {}
-    # gen mem arg to mem node links
-    for dst, src in out.items():
-        for n in [dst, src]:
-
-            all_mems = set()
-            all_mems.update(get_expr_mem(n))
-
-        for n in all_mems:
-            node_n_w = get_node_name(irbloc.label, 0, n)
-            if not n == src:
-                continue
-            o_r = n.arg.get_r(mem_read=False, cst_read=True)
-            for n_r in o_r:
-                if n_r in current_nodes:
-                    node_n_r = current_nodes[n_r]
-                else:
-                    node_n_r = get_node_name(irbloc.label, i, n_r)
-                if not n_r in in_nodes:
-                    in_nodes[n_r] = node_n_r
-                flow_graph.add_uniq_edge(node_n_r, node_n_w)
-
-    # gen data flow links
-    for dst, src in out.items():
-        nodes_r = src.get_r(mem_read=False, cst_read=True)
-        nodes_w = set([dst])
-        for n_r in nodes_r:
-            if n_r in current_nodes:
-                node_n_r = current_nodes[n_r]
-            else:
-                node_n_r = get_node_name(irbloc.label, 0, n_r)
-            if not n_r in in_nodes:
-                in_nodes[n_r] = node_n_r
-
-            flow_graph.add_node(node_n_r)
-            for n_w in nodes_w:
-                node_n_w = get_node_name(irbloc.label, 1, n_w)
-                out_nodes[n_w] = node_n_w
-
-                flow_graph.add_node(node_n_w)
-                flow_graph.add_uniq_edge(node_n_r, node_n_w)
-
-    irbloc.in_nodes = in_nodes
-    irbloc.out_nodes = out_nodes
-
-
-def node2str(self, n):
-    label, i, node = n
-    # print n
-    out = "%s,%s\\l\\\n%s" % n
-    return out
-
-
-def gen_bloc_data_flow_graph(ir_arch, in_str, ad):  # arch, attrib, pool_bin, bloc, symbol_pool):
-    out_str = ""
-
-    # ir_arch = ir_x86_32(symbol_pool)
-
-    for irbloc in ir_arch.blocs.values():
-        print irbloc
-
-    ir_arch.gen_graph()
-    ir_arch.dead_simp()
-
-    irbloc_0 = None
-    for irbloc in ir_arch.blocs.values():
-        if irbloc.label.offset == ad:
-            irbloc_0 = irbloc
-            break
-    assert(irbloc_0 is not None)
-    flow_graph = DiGraph()
-    flow_graph.node2str = lambda n: node2str(flow_graph, n)
-    done = set()
-    todo = set([irbloc_0.label])
-
-    bloc2w = {}
-
-    for irbloc in ir_arch.blocs.values():
-        intra_bloc_flow_raw(ir_arch, flow_graph, irbloc)
-        # intra_bloc_flow_symb(ir_arch, flow_graph, irbloc)
-
-    for irbloc in ir_arch.blocs.values():
-        print irbloc
-        print 'IN', [str(x) for x in irbloc.in_nodes]
-        print 'OUT', [str(x) for x in irbloc.out_nodes]
-
-    print '*' * 20, 'interbloc', '*' * 20
-    inter_bloc_flow(ir_arch, flow_graph, irbloc_0.label)
-
-    # sys.path.append('/home/serpilliere/projet/m2_devel/miasm2/core')
-    # from graph_qt import graph_qt
-    # graph_qt(flow_graph)
-    open('data.txt', 'w').write(flow_graph.dot())
-
-
-data = open(args[0]).read()
-ad = int(args[1], 16)
-
-print 'disasm...'
-mdis = dis_x86_32(data)
-mdis.follow_call = True
-ab = mdis.dis_multibloc(ad)
-print 'ok'
-
-
-print 'generating dataflow graph for:'
-ir_arch = ir_a_x86_32(mdis.symbol_pool)
-
-blocs = ab
-for bloc in blocs:
-    print bloc
-    ir_arch.add_bloc(bloc)
-for irbloc in ir_arch.blocs.values():
-    print irbloc
-    if irbloc.label.offset != 0:
-        continue
-
-
-out_str = gen_bloc_data_flow_graph(ir_arch, mdis.bs, ad)
-
-print '*' * 40
-print """
- View with:
-dotty dataflow.txt
- or
- Generate ps with pdf:
-dot -Tps dataflow_xx.txt -o graph.ps
-"""