diff options
| -rw-r--r-- | example/disasm/callback.py | 2 | ||||
| -rw-r--r-- | miasm2/arch/arm/disasm.py | 2 | ||||
| -rw-r--r-- | miasm2/core/asmblock.py | 45 | ||||
| -rw-r--r-- | miasm2/ir/ir.py | 2 |
4 files changed, 16 insertions, 35 deletions
diff --git a/example/disasm/callback.py b/example/disasm/callback.py index bbf0afaf..a00cf5e5 100644 --- a/example/disasm/callback.py +++ b/example/disasm/callback.py @@ -37,7 +37,7 @@ def cb_x86_callpop(cur_bloc, symbol_pool, *args, **kwargs): # Update next blocks to process in the disassembly engine cur_bloc.bto.clear() - cur_bloc.add_cst(loc_key, AsmConstraint.c_next, symbol_pool) + cur_bloc.add_cst(loc_key, AsmConstraint.c_next) # Prepare a tiny shellcode diff --git a/miasm2/arch/arm/disasm.py b/miasm2/arch/arm/disasm.py index 956a894b..205e2a17 100644 --- a/miasm2/arch/arm/disasm.py +++ b/miasm2/arch/arm/disasm.py @@ -25,7 +25,7 @@ def cb_arm_fix_call(mn, cur_bloc, symbol_pool, offsets_to_dis, *args, **kwargs): if not l2.args[1] in values: return loc_key_cst = self.symbol_pool.getby_offset_create(l1.offset + 4) - cur_bloc.add_cst(loc_key_cst, AsmConstraint.c_next, symbol_pool) + cur_bloc.add_cst(loc_key_cst, AsmConstraint.c_next) offsets_to_dis.add(l1.offset + 4) cb_arm_funcs = [cb_arm_fix_call] diff --git a/miasm2/core/asmblock.py b/miasm2/core/asmblock.py index 082dc344..c2b7aa0a 100644 --- a/miasm2/core/asmblock.py +++ b/miasm2/core/asmblock.py @@ -211,9 +211,14 @@ class AsmBlock(object): def get_offsets(self): return [x.offset for x in self.lines] - def add_cst(self, loc_key, c_t, symbol_pool): + def add_cst(self, loc_key, constraint_type): + """ + Add constraint between current block and block at @loc_key + @loc_key: LocKey instance of constraint target + @constraint_type: AsmConstraint c_to/c_next + """ assert isinstance(loc_key, LocKey) - c = AsmConstraint(loc_key, c_t) + c = AsmConstraint(loc_key, constraint_type) self.bto.add(c) def get_flow_instr(self): @@ -1628,20 +1633,12 @@ class disasmEngine(object): # Block is not empty, stop the desassembly pass and add a # constraint to the next block loc_key_cst = self.symbol_pool.getby_offset_create(offset) - cur_block.add_cst( - loc_key_cst, - AsmConstraint.c_next, - self.symbol_pool - ) + cur_block.add_cst(loc_key_cst, AsmConstraint.c_next) break if lines_cpt > 0 and offset in self.split_dis: loc_key_cst = self.symbol_pool.getby_offset_create(offset) - cur_block.add_cst( - loc_key_cst, - AsmConstraint.c_next, - self.symbol_pool - ) + cur_block.add_cst(loc_key_cst, AsmConstraint.c_next) offsets_to_dis.add(offset) break @@ -1652,11 +1649,7 @@ class disasmEngine(object): if offset in job_done: loc_key_cst = self.symbol_pool.getby_offset_create(offset) - cur_block.add_cst( - loc_key_cst, - AsmConstraint.c_next, - self.symbol_pool - ) + cur_block.add_cst(loc_key_cst, AsmConstraint.c_next) break off_i = offset @@ -1683,11 +1676,7 @@ class disasmEngine(object): # Block is not empty, stop the desassembly pass and add a # constraint to the next block loc_key_cst = self.symbol_pool.getby_offset_create(off_i) - cur_block.add_cst( - loc_key_cst, - AsmConstraint.c_next, - self.symbol_pool - ) + cur_block.add_cst(loc_key_cst, AsmConstraint.c_next) break # XXX TODO nul start block option @@ -1700,11 +1689,7 @@ class disasmEngine(object): # Block is not empty, stop the desassembly pass and add a # constraint to the next block loc_key_cst = self.symbol_pool.getby_offset_create(off_i) - cur_block.add_cst( - loc_key_cst, - AsmConstraint.c_next, - self.symbol_pool - ) + cur_block.add_cst(loc_key_cst, AsmConstraint.c_next) break # special case: flow graph modificator in delayslot @@ -1750,11 +1735,7 @@ class disasmEngine(object): if add_next_offset: loc_key_cst = self.symbol_pool.getby_offset_create(offset) - cur_block.add_cst( - loc_key_cst, - AsmConstraint.c_next, - self.symbol_pool - ) + cur_block.add_cst(loc_key_cst, AsmConstraint.c_next) offsets_to_dis.add(offset) # Fix multiple constraints diff --git a/miasm2/ir/ir.py b/miasm2/ir/ir.py index 0a7d1d84..6084e67d 100644 --- a/miasm2/ir/ir.py +++ b/miasm2/ir/ir.py @@ -685,7 +685,7 @@ class IntermediateRepresentation(object): loc_key = self.symbol_pool.getby_offset_create(line.offset + line.l) if loc_key is None: loc_key = self.symbol_pool.gen_loc_key() - block.add_cst(loc_key, AsmConstraint.c_next, self.symbol_pool) + block.add_cst(loc_key, AsmConstraint.c_next) else: loc_key = next_loc_key dst = m2_expr.ExprLoc(loc_key, self.pc.size) |