diff options
| author | Camille Mougey <commial@gmail.com> | 2018-02-08 09:42:46 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-02-08 09:42:46 +0100 |
| commit | 47811fe5a56c8071ab5064e1f84ca64389941eec (patch) | |
| tree | dad26c0bc7257aa9535b8a7e07c2ca63d4b5dab5 | |
| parent | d404b1803c09b61463845fe14feee5324cbdc051 (diff) | |
| parent | 45aed57c8bbe1cf7d4fde57ea1e39cf68b638cca (diff) | |
| download | miasm-47811fe5a56c8071ab5064e1f84ca64389941eec.tar.gz miasm-47811fe5a56c8071ab5064e1f84ca64389941eec.zip | |
Merge pull request #667 from serpilliere/aarch64_add_instr
Aarch64/sem: add ld[ur]s[[bhw]
| -rw-r--r-- | miasm2/arch/aarch64/sem.py | 46 |
1 files changed, 31 insertions, 15 deletions
diff --git a/miasm2/arch/aarch64/sem.py b/miasm2/arch/aarch64/sem.py index a1c6b41d..d8dc1efa 100644 --- a/miasm2/arch/aarch64/sem.py +++ b/miasm2/arch/aarch64/sem.py @@ -417,26 +417,47 @@ def ldr(ir, instr, arg1, arg2): return e, [] -def ldrb(ir, instr, arg1, arg2): +def ldr_size(ir, instr, arg1, arg2, size): e = [] addr, updt = get_mem_access(arg2) e.append( - m2_expr.ExprAff(arg1, m2_expr.ExprMem(addr, 8).zeroExtend(arg1.size))) + m2_expr.ExprAff(arg1, m2_expr.ExprMem(addr, size).zeroExtend(arg1.size))) if updt: e.append(updt) return e, [] +def ldrb(ir, instr, arg1, arg2): + return ldr_size(ir, instr, arg1, arg2, 8) + + def ldrh(ir, instr, arg1, arg2): + return ldr_size(ir, instr, arg1, arg2, 16) + + +def ldrs_size(ir, instr, arg1, arg2, size): e = [] addr, updt = get_mem_access(arg2) e.append( - m2_expr.ExprAff(arg1, m2_expr.ExprMem(addr, 16).zeroExtend(arg1.size))) + m2_expr.ExprAff(arg1, m2_expr.ExprMem(addr, size).signExtend(arg1.size))) if updt: e.append(updt) return e, [] +def ldrsb(ir, instr, arg1, arg2): + return ldrs_size(ir, instr, arg1, arg2, 8) + + +def ldrsh(ir, instr, arg1, arg2): + return ldrs_size(ir, instr, arg1, arg2, 16) + + +def ldrsw(ir, instr, arg1, arg2): + return ldrs_size(ir, instr, arg1, arg2, 32) + + + def l_str(ir, instr, arg1, arg2): e = [] addr, updt = get_mem_access(arg2) @@ -486,16 +507,6 @@ def ldp(ir, instr, arg1, arg2, arg3): return e, [] -def ldrsw(ir, instr, arg1, arg2): - e = [] - addr, updt = get_mem_access(arg2) - e.append( - m2_expr.ExprAff(arg1, m2_expr.ExprMem(addr, 32).signExtend(arg1.size))) - if updt: - e.append(updt) - return e, [] - - def sbfm(ir, instr, arg1, arg2, arg3, arg4): e = [] rim, sim = int(arg3.arg), int(arg4) + 1 @@ -745,7 +756,14 @@ mnemo_func.update({ 'ldur': ldr, 'ldurb': ldrb, + 'ldursb': ldrsb, 'ldurh': ldrh, + 'ldursh': ldrsh, + 'ldursw': ldrsw, + + 'ldrsb': ldrsb, + 'ldrsh': ldrsh, + 'ldrsw': ldrsw, 'str': l_str, 'strb': strb, @@ -755,8 +773,6 @@ mnemo_func.update({ 'sturb': strb, 'sturh': strh, - 'ldrsw': ldrsw, - 'bfm': bfm, 'sbfm': sbfm, |