diff options
| -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 ab45425c..63f6a32d 100644 --- a/miasm2/arch/aarch64/sem.py +++ b/miasm2/arch/aarch64/sem.py @@ -402,26 +402,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) @@ -471,16 +492,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 @@ -728,7 +739,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, @@ -738,8 +756,6 @@ mnemo_func.update({ 'sturb': strb, 'sturh': strh, - 'ldrsw': ldrsw, - 'bfm': bfm, 'sbfm': sbfm, |