diff options
| -rw-r--r-- | example/ida/ctype_propagation.py | 7 | ||||
| -rw-r--r-- | miasm2/analysis/cst_propag.py | 7 | ||||
| -rw-r--r-- | miasm2/core/objc.py | 2 |
3 files changed, 12 insertions, 4 deletions
diff --git a/example/ida/ctype_propagation.py b/example/ida/ctype_propagation.py index c18abbfd..76d4fa2d 100644 --- a/example/ida/ctype_propagation.py +++ b/example/ida/ctype_propagation.py @@ -253,9 +253,10 @@ def analyse_function(): if (lbl, state) in done: continue done.add((lbl, state)) - symbexec_engine = TypePropagationEngine(ir_arch, types_mngr, state) + if lbl not in ir_arch.blocks: + continue - assert lbl in ir_arch.blocks + symbexec_engine = TypePropagationEngine(ir_arch, types_mngr, state) addr = symbexec_engine.emul_ir_block(lbl) symbexec_engine.del_mem_above_stack(ir_arch.sp) @@ -266,6 +267,8 @@ def analyse_function(): symbexec_engine.get_state()) for lbl, state in states.iteritems(): + if lbl not in ir_arch.blocks: + continue symbexec_engine = CTypeEngineFixer(ir_arch, types_mngr, state, cst_propag_link) addr = symbexec_engine.emul_ir_block(lbl) symbexec_engine.del_mem_above_stack(ir_arch.sp) diff --git a/miasm2/analysis/cst_propag.py b/miasm2/analysis/cst_propag.py index d55d7e60..2a439ccc 100644 --- a/miasm2/analysis/cst_propag.py +++ b/miasm2/analysis/cst_propag.py @@ -139,9 +139,10 @@ def compute_cst_propagation_states(ir_arch, init_addr, init_infos): if (lbl, state) in done: continue done.add((lbl, state)) - symbexec_engine = SymbExecState(ir_arch, state) + if lbl not in ir_arch.blocks: + continue - assert lbl in ir_arch.blocks + symbexec_engine = SymbExecState(ir_arch, state) addr = symbexec_engine.emul_ir_block(lbl) symbexec_engine.del_mem_above_stack(ir_arch.sp) @@ -173,6 +174,8 @@ def propagate_cst_expr(ir_arch, addr, init_infos): states = compute_cst_propagation_states(ir_arch, addr, init_infos) cst_propag_link = {} for lbl, state in states.iteritems(): + if lbl not in ir_arch.blocks: + continue symbexec = SymbExecStateFix(ir_arch, state, cst_propag_link) symbexec.emulbloc(ir_arch.blocks[lbl]) return cst_propag_link diff --git a/miasm2/core/objc.py b/miasm2/core/objc.py index d6c100ca..91ef6604 100644 --- a/miasm2/core/objc.py +++ b/miasm2/core/objc.py @@ -981,6 +981,8 @@ class ExprToAccessC(ExprReducer): return None void_type = self.types_mngr.void_ptr out = set() + if not arg1.expr.is_int(): + return None ptr_offset = int(arg1.expr) for info in arg0.info: if isinstance(info.ctype, ObjCArray): |