diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2015-08-19 00:22:20 +0200 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2015-08-20 13:51:10 +0200 |
| commit | c6ff84779d211039153c93176eaf86307a0be38c (patch) | |
| tree | e62f8fdc9984dee6d2b7e452d023c476e501bfda | |
| parent | a32c414fd3e2c6b14636e41d115b9a83b3c77d8e (diff) | |
| download | miasm-c6ff84779d211039153c93176eaf86307a0be38c.tar.gz miasm-c6ff84779d211039153c93176eaf86307a0be38c.zip | |
Arch/aarch64: fix PC value in semantic
Diffstat (limited to '')
| -rw-r--r-- | miasm2/arch/aarch64/sem.py | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/miasm2/arch/aarch64/sem.py b/miasm2/arch/aarch64/sem.py index 44925e1f..9d83ccd2 100644 --- a/miasm2/arch/aarch64/sem.py +++ b/miasm2/arch/aarch64/sem.py @@ -764,12 +764,7 @@ class ir_aarch64l(ir): args[-1].args[0], args[-1].args[-1][:8].zeroExtend(32)) instr_ir, extra_ir = get_mnemo_expr(self, instr, *args) - # for i, expr in enumerate(instr_ir): - # instr_ir[i] = self.expraff_fix_regs_for_mode(expr) - # for b in extra_ir: - # for irs in b.irs: - # for i, expr in enumerate(irs): - # irs[i] = self.expraff_fix_regs_for_mode(expr) + self.mod_pc(instr, instr_ir, extra_ir) return instr_ir, extra_ir def expr_fix_regs_for_mode(self, e): @@ -796,6 +791,23 @@ class ir_aarch64l(ir): irs[i] = self.expr_fix_regs_for_mode(e) irbloc.dst = self.expr_fix_regs_for_mode(irbloc.dst) + def mod_pc(self, instr, instr_ir, extra_ir): + "Replace PC by the instruction's offset" + cur_offset = m2_expr.ExprInt64(instr.offset) + for i, expr in enumerate(instr_ir): + dst, src = expr.dst, expr.src + if dst != self.pc: + dst = dst.replace_expr({self.pc: cur_offset}) + src = src.replace_expr({self.pc: cur_offset}) + instr_ir[i] = m2_expr.ExprAff(dst, src) + for b in extra_ir: + for irs in b.irs: + for i, expr in enumerate(irs): + dst, src = expr.dst, expr.src + if dst != self.pc: + dst = dst.replace_expr({self.pc: cur_offset}) + src = src.replace_expr({self.pc: cur_offset}) + irs[i] = m2_expr.ExprAff(dst, src) class ir_aarch64b(ir_aarch64l): |