diff options
| author | serpilliere <serpilliere@users.noreply.github.com> | 2020-02-14 21:40:35 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-14 21:40:35 +0100 |
| commit | 1d5de82d6265f9710a74fdcbbe62c03317d867a5 (patch) | |
| tree | 37fef0c8bf6d0daed22ad73bcf1dfa4295280ab5 /example | |
| parent | fc6bb3ce49ea44012a762b207a39301825e9648a (diff) | |
| parent | 215c5ebfe9d0beed56f9391cb517ccbb7fa4f4f8 (diff) | |
| download | miasm-1d5de82d6265f9710a74fdcbbe62c03317d867a5.tar.gz miasm-1d5de82d6265f9710a74fdcbbe62c03317d867a5.zip | |
Merge pull request #1136 from cea-sec/dead_simp_class
Analysis: dead simp to class
Diffstat (limited to 'example')
| -rw-r--r-- | example/disasm/full.py | 37 | ||||
| -rw-r--r-- | example/expression/asm_to_ir.py | 6 | ||||
| -rw-r--r-- | example/expression/constant_propagation.py | 5 | ||||
| -rw-r--r-- | example/expression/graph_dataflow.py | 6 |
4 files changed, 13 insertions, 41 deletions
diff --git a/example/disasm/full.py b/example/disasm/full.py index a28d548e..d4fae867 100644 --- a/example/disasm/full.py +++ b/example/disasm/full.py @@ -9,7 +9,7 @@ from miasm.analysis.binary import Container from miasm.core.asmblock import log_asmblock, AsmCFG from miasm.core.interval import interval from miasm.analysis.machine import Machine -from miasm.analysis.data_flow import dead_simp, \ +from miasm.analysis.data_flow import \ DiGraphDefUse, ReachingDefinitions, \ replace_stack_vars, load_from_int, del_unused_edges from miasm.expression.simplifications import expr_simp @@ -213,7 +213,6 @@ if args.propagexpr: class IRADelModCallStack(ira): - def call_effects(self, addr, instr): assignblks, extra = super(IRADelModCallStack, self).call_effects(addr, instr) if not args.calldontmodstack: @@ -283,34 +282,6 @@ if args.gen_ir: if args.propagexpr: - class IRAOutRegs(ira): - def get_out_regs(self, block): - regs_todo = super(self.__class__, self).get_out_regs(block) - out = {} - for assignblk in block: - for dst in assignblk: - reg = self.ssa_var.get(dst, None) - if reg is None: - continue - if reg in regs_todo: - out[reg] = dst - return set(viewvalues(out)) - - # Add dummy dependency to uncover out regs assignment - for loc in ircfg_a.leaves(): - irblock = ircfg_a.blocks.get(loc) - if irblock is None: - continue - regs = {} - for reg in ir_arch_a.get_out_regs(irblock): - regs[reg] = reg - assignblks = list(irblock) - new_assiblk = AssignBlock(regs, assignblks[-1].instr) - assignblks.append(new_assiblk) - new_irblock = IRBlock(irblock.loc_key, assignblks) - ircfg_a.blocks[loc] = new_irblock - - def is_addr_ro_variable(bs, addr, size): """ @@ -327,9 +298,6 @@ if args.propagexpr: return False return True - ir_arch_a = IRAOutRegs(mdis.loc_db) - - class CustomIRCFGSimplifierSSA(IRCFGSimplifierSSA): def do_simplify(self, ssa, head): modified = super(CustomIRCFGSimplifierSSA, self).do_simplify(ssa, head) @@ -345,14 +313,13 @@ if args.propagexpr: replace_stack_vars(self.ir_arch, ircfg) ircfg_simplifier = IRCFGSimplifierCommon(self.ir_arch) + ircfg_simplifier.deadremoval.add_expr_to_original_expr(ssa.ssa_variable_to_expr) ircfg_simplifier.simplify(ircfg, head) return ircfg - head = list(entry_points)[0] - ir_arch_a = IRAOutRegs(mdis.loc_db) simplifier = CustomIRCFGSimplifierSSA(ir_arch_a) ircfg = simplifier.simplify(ircfg_a, head) open('final.dot', 'w').write(ircfg.dot()) diff --git a/example/expression/asm_to_ir.py b/example/expression/asm_to_ir.py index 4bcbb05d..83eac728 100644 --- a/example/expression/asm_to_ir.py +++ b/example/expression/asm_to_ir.py @@ -8,7 +8,7 @@ from miasm.core import parse_asm from miasm.expression.expression import * from miasm.core import asmblock from miasm.arch.x86.ira import ir_a_x86_32 -from miasm.analysis.data_flow import dead_simp +from miasm.analysis.data_flow import DeadRemoval # First, asm code @@ -40,6 +40,8 @@ patches = asmblock.asm_resolve_final(mn_x86, asmcfg, loc_db) # Translate to IR ir_arch = ir_a_x86_32(loc_db) ircfg = ir_arch.new_ircfg_from_asmcfg(asmcfg) +deadrm = DeadRemoval(ir_arch) + # Display IR for lbl, irblock in viewitems(ircfg.blocks): @@ -48,7 +50,7 @@ for lbl, irblock in viewitems(ircfg.blocks): # Dead propagation open('graph.dot', 'w').write(ircfg.dot()) print('*' * 80) -dead_simp(ir_arch, ircfg) +deadrm(ircfg) open('graph2.dot', 'w').write(ircfg.dot()) # Display new IR diff --git a/example/expression/constant_propagation.py b/example/expression/constant_propagation.py index a6efbb46..36a548c5 100644 --- a/example/expression/constant_propagation.py +++ b/example/expression/constant_propagation.py @@ -9,7 +9,7 @@ from argparse import ArgumentParser from miasm.analysis.machine import Machine from miasm.analysis.binary import Container from miasm.analysis.cst_propag import propagate_cst_expr -from miasm.analysis.data_flow import dead_simp, \ +from miasm.analysis.data_flow import DeadRemoval, \ merge_blocks, remove_empty_assignblks from miasm.expression.simplifications import expr_simp @@ -29,6 +29,7 @@ cont = Container.from_stream(open(args.filename, 'rb')) mdis = machine.dis_engine(cont.bin_stream, loc_db=cont.loc_db) ir_arch = machine.ira(mdis.loc_db) addr = int(args.address, 0) +deadrm = DeadRemoval(ir_arch) asmcfg = mdis.dis_multiblock(addr) ircfg = ir_arch.new_ircfg_from_asmcfg(asmcfg) @@ -42,7 +43,7 @@ if args.simplify: modified = True while modified: modified = False - modified |= dead_simp(ir_arch, ircfg) + modified |= deadrm(ircfg) modified |= remove_empty_assignblks(ircfg) modified |= merge_blocks(ircfg, entry_points) diff --git a/example/expression/graph_dataflow.py b/example/expression/graph_dataflow.py index c320fba0..e7386e9e 100644 --- a/example/expression/graph_dataflow.py +++ b/example/expression/graph_dataflow.py @@ -9,7 +9,7 @@ from miasm.expression.expression import get_expr_mem from miasm.analysis.data_analysis import intra_block_flow_raw, inter_block_flow from miasm.core.graph import DiGraph from miasm.ir.symbexec import SymbolicExecutionEngine -from miasm.analysis.data_flow import dead_simp +from miasm.analysis.data_flow import DeadRemoval parser = ArgumentParser("Simple expression use for generating dataflow graph") @@ -88,7 +88,7 @@ def gen_block_data_flow_graph(ir_arch, ircfg, ad, block_flow_cb): for irblock in viewvalues(ircfg.blocks): print(irblock) - dead_simp(ir_arch, ircfg) + deadrm(ircfg) irblock_0 = None @@ -140,6 +140,8 @@ print('ok') print('generating dataflow graph for:') ir_arch_analysis = machine.ira(mdis.loc_db) ircfg = ir_arch_analysis.new_ircfg_from_asmcfg(asmcfg) +deadrm = DeadRemoval(ir_arch_analysis) + for irblock in viewvalues(ircfg.blocks): print(irblock) |