diff options
Diffstat (limited to 'miasm2')
| -rw-r--r-- | miasm2/analysis/data_analysis.py | 2 | ||||
| -rw-r--r-- | miasm2/analysis/disasm_cb.py | 4 | ||||
| -rw-r--r-- | miasm2/analysis/dse.py | 4 | ||||
| -rw-r--r-- | miasm2/arch/mips32/ira.py | 4 | ||||
| -rw-r--r-- | miasm2/core/asmblock.py | 47 | ||||
| -rw-r--r-- | miasm2/ir/ir.py | 34 | ||||
| -rw-r--r-- | miasm2/ir/symbexec.py | 4 | ||||
| -rw-r--r-- | miasm2/jitter/jitcore.py | 4 |
8 files changed, 72 insertions, 31 deletions
diff --git a/miasm2/analysis/data_analysis.py b/miasm2/analysis/data_analysis.py index c745b6c7..b3e15ca6 100644 --- a/miasm2/analysis/data_analysis.py +++ b/miasm2/analysis/data_analysis.py @@ -221,7 +221,7 @@ class symb_exec_func: variables = dict(state.symbols.items()) # get bloc dead, and remove from state - b = self.ir_arch.get_bloc(ad) + b = self.ir_arch.get_block(ad) if b is None: raise ValueError("unknown bloc! %s" % ad) """ diff --git a/miasm2/analysis/disasm_cb.py b/miasm2/analysis/disasm_cb.py index f6385c9c..9a75603f 100644 --- a/miasm2/analysis/disasm_cb.py +++ b/miasm2/analysis/disasm_cb.py @@ -29,7 +29,7 @@ def arm_guess_subcall( ir_arch = ira(sp) print '###' print cur_bloc - ir_arch.add_bloc(cur_bloc) + ir_arch.add_block(cur_bloc) ir_blocks = ir_arch.blocks.values() # flow_graph = DiGraph() @@ -76,7 +76,7 @@ def arm_guess_jump_table( sp = AsmSymbolPool() ir_arch = ira(sp) - ir_arch.add_bloc(cur_bloc) + ir_arch.add_block(cur_bloc) ir_blocks = ir_arch.blocks.values() for irblock in ir_blocks: diff --git a/miasm2/analysis/dse.py b/miasm2/analysis/dse.py index 56ed3292..329323e2 100644 --- a/miasm2/analysis/dse.py +++ b/miasm2/analysis/dse.py @@ -301,8 +301,8 @@ class DSEEngine(object): self.ir_arch.blocks.clear()# = {} ## Update current state - asm_block = self.mdis.dis_bloc(cur_addr) - self.ir_arch.add_bloc(asm_block) + asm_block = self.mdis.dis_block(cur_addr) + self.ir_arch.add_block(asm_block) self.addr_to_cacheblocks[cur_addr] = dict(self.ir_arch.blocks) # Emulate the current instruction diff --git a/miasm2/arch/mips32/ira.py b/miasm2/arch/mips32/ira.py index e342a6fd..f1e21a41 100644 --- a/miasm2/arch/mips32/ira.py +++ b/miasm2/arch/mips32/ira.py @@ -15,8 +15,8 @@ class ir_a_mips32l(ir_mips32l, ira): # Avoid adding side effects, already done in post_add_bloc return False - def post_add_bloc(self, block, ir_blocks): - IntermediateRepresentation.post_add_bloc(self, block, ir_blocks) + def post_add_block(self, block, ir_blocks): + IntermediateRepresentation.post_add_block(self, block, ir_blocks) new_irblocks = [] for irb in ir_blocks: pc_val = None diff --git a/miasm2/core/asmblock.py b/miasm2/core/asmblock.py index 965b22c4..6cbe37a4 100644 --- a/miasm2/core/asmblock.py +++ b/miasm2/core/asmblock.py @@ -1386,7 +1386,7 @@ class disasmEngine(object): # Override options if needed self.__dict__.update(kwargs) - def _dis_bloc(self, offset): + def _dis_block(self, offset): """Disassemble the block at offset @offset Return the created AsmBlock and future offsets to disassemble """ @@ -1519,44 +1519,61 @@ class disasmEngine(object): symbol_pool=self.symbol_pool) return cur_block, offsets_to_dis - def dis_bloc(self, offset): + def dis_block(self, offset): """Disassemble the block at offset @offset and return the created AsmBlock @offset: targeted offset to disassemble """ - current_block, _ = self._dis_bloc(offset) + current_block, _ = self._dis_block(offset) return current_block - def dis_multibloc(self, offset, blocs=None): + def dis_bloc(self, offset): + """ + DEPRECATED function + Use dis_block instead of dis_bloc + """ + warnings.warn('DEPRECATION WARNING: use "dis_block" instead of "dis_bloc"') + return self.dis_block(offset) + + def dis_multiblock(self, offset, blocks=None): """Disassemble every block reachable from @offset regarding specific disasmEngine conditions Return an AsmCFG instance containing disassembled blocks @offset: starting offset - @blocs: (optional) AsmCFG instance of already disassembled blocks to + @blocks: (optional) AsmCFG instance of already disassembled blocks to merge with """ log_asmblock.info("dis bloc all") - if blocs is None: - blocs = AsmCFG() + if blocks is None: + blocks = AsmCFG() todo = [offset] bloc_cpt = 0 while len(todo): bloc_cpt += 1 if self.blocs_wd is not None and bloc_cpt > self.blocs_wd: - log_asmblock.debug("blocs watchdog reached at %X", int(offset)) + log_asmblock.debug("blocks watchdog reached at %X", int(offset)) break target_offset = int(todo.pop(0)) if (target_offset is None or target_offset in self.job_done): continue - cur_block, nexts = self._dis_bloc(target_offset) + cur_block, nexts = self._dis_block(target_offset) todo += nexts - blocs.add_node(cur_block) + blocks.add_node(cur_block) + + blocks.apply_splitting(self.symbol_pool, + dis_block_callback=self.dis_bloc_callback, + mn=self.arch, attrib=self.attrib, + pool_bin=self.bin_stream) + return blocks + + def dis_multibloc(self, offset, blocs=None): + """ + DEPRECATED function + Use dis_multiblock instead of dis_multibloc + """ + warnings.warn('DEPRECATION WARNING: use "dis_multiblock" instead of "dis_multibloc"') + return self.dis_multiblock(offset, blocs) - blocs.apply_splitting(self.symbol_pool, - dis_block_callback=self.dis_bloc_callback, - mn=self.arch, attrib=self.attrib, - pool_bin=self.bin_stream) - return blocs diff --git a/miasm2/ir/ir.py b/miasm2/ir/ir.py index 7c39cf04..603d3fd0 100644 --- a/miasm2/ir/ir.py +++ b/miasm2/ir/ir.py @@ -477,17 +477,25 @@ class IntermediateRepresentation(object): addr = self.symbol_pool.getby_name_create(addr.name) return addr - def get_bloc(self, addr): + def get_block(self, addr): """Returns the irbloc associated to an ExprId/ExprInt/label/int @addr: an ExprId/ExprInt/label/int""" label = self.get_label(addr) return self.blocks.get(label, None) + def get_bloc(self, addr): + """ + DEPRECATED function + Use get_block instead of get_block + """ + warnings.warn('DEPRECATION WARNING: use "get_block" instead of "get_bloc"') + return self.get_block(addr) + def add_instr(self, line, addr=0, gen_pc_updt=False): block = AsmBlock(self.gen_label()) block.lines = [line] - self.add_bloc(block, gen_pc_updt) + self.add_block(block, gen_pc_updt) def getby_offset(self, offset): out = set() @@ -552,7 +560,7 @@ class IntermediateRepresentation(object): return True return False - def add_bloc(self, block, gen_pc_updt=False): + def add_block(self, block, gen_pc_updt=False): """ Add a native block to the current IR @block: native assembly block @@ -574,11 +582,19 @@ class IntermediateRepresentation(object): if label is not None: ir_blocks_all.append(IRBlock(label, assignments)) - new_ir_blocks_all = self.post_add_bloc(block, ir_blocks_all) + new_ir_blocks_all = self.post_add_block(block, ir_blocks_all) for irblock in new_ir_blocks_all: self.blocks[irblock.label] = irblock return new_ir_blocks_all + def add_bloc(self, block, gen_pc_updt=False): + """ + DEPRECATED function + Use add_block instead of add_block + """ + warnings.warn('DEPRECATION WARNING: use "add_block" instead of "add_bloc"') + return self.add_block(block, gen_pc_updt) + def expr_fix_regs_for_mode(self, expr, *args, **kwargs): return expr @@ -610,7 +626,7 @@ class IntermediateRepresentation(object): assignblk = AssignBlock({self.IRDst: dst}, irblock.irs[-1].instr) ir_blocks[index] = IRBlock(irblock.label, list(irblock.irs) + [assignblk]) - def post_add_bloc(self, block, ir_blocks): + def post_add_block(self, block, ir_blocks): self.set_empty_dst_to_next(block, ir_blocks) new_irblocks = [] @@ -622,6 +638,14 @@ class IntermediateRepresentation(object): self._graph = None return new_irblocks + def post_add_bloc(self, block, ir_blocks): + """ + DEPRECATED function + Use post_add_block instead of post_add_bloc + """ + warnings.warn('DEPRECATION WARNING: use "post_add_block" instead of "post_add_bloc"') + return self.post_add_block(block, ir_blocks) + def get_instr_label(self, instr): """Returns the label associated to an instruction @instr: current instruction""" diff --git a/miasm2/ir/symbexec.py b/miasm2/ir/symbexec.py index e98744c0..6d6ba630 100644 --- a/miasm2/ir/symbexec.py +++ b/miasm2/ir/symbexec.py @@ -530,7 +530,7 @@ class SymbolicExecutionEngine(object): return self.emul_ir_block(addr, step) def emul_ir_block(self, addr, step=False): - irblock = self.ir_arch.get_bloc(addr) + irblock = self.ir_arch.get_block(addr) if irblock is not None: addr = self.emulbloc(irblock, step=step) return addr @@ -541,7 +541,7 @@ class SymbolicExecutionEngine(object): def emul_ir_blocks(self, addr, lbl_stop=None, step=False): while True: - irblock = self.ir_arch.get_bloc(addr) + irblock = self.ir_arch.get_block(addr) if irblock is None: break if irblock.label == lbl_stop: diff --git a/miasm2/jitter/jitcore.py b/miasm2/jitter/jitcore.py index 0ccbfcd7..6c4d197e 100644 --- a/miasm2/jitter/jitcore.py +++ b/miasm2/jitter/jitcore.py @@ -122,7 +122,7 @@ class JitCore(object): @block: asm_bloc to add """ - irblocks = self.ir_arch.add_bloc(block, gen_pc_updt = True) + irblocks = self.ir_arch.add_block(block, gen_pc_updt = True) block.blocks = irblocks self.jitirblocs(block.label, irblocks) @@ -143,7 +143,7 @@ class JitCore(object): # Disassemble it try: - cur_block = self.mdis.dis_bloc(addr) + cur_block = self.mdis.dis_block(addr) except IOError: # vm_exception_flag is set label = self.ir_arch.symbol_pool.getby_offset_create(addr) |