【Android 逆向】【ARM汇编】 事前更新和事后更新

1. 事前更新,事后更新,不更新

  1. 不更新
ldr R4, [R1, R2, lsl #1]
相当于 R4 = *(R1 + R2 << 2^1) 之后 R1、R2的值时没有变化的
  1. 事前更新(! 的含义)(++i 的感觉)
ldr R0, [R1, #4]!
加了感叹号 执行完这一句后 R1的值也是随之变化的,也是加了4的

感叹号是事前更新标志
相当于
R1 = R1 + 4
R0 = *(R1)

ldr R4, [R1, R2, lsl #1]!
相当于 R4 = *(R1 + R2 << 2^1) 之后 R1的值会随之变化 而 R2的值时没有变化的
  1. 事后更新(i++ 的感觉)
ldr R3, [R1], R2
相当于
R3 = *R1
R1 = R1 + R2 即 R1指向地址处的内容,之后 R1 = R1 + R2的值, 之后R2的值时没有变化的

相当于
事后更新
R3 = *R1
R1 =  R1 + R2

ldr R4, [R1], R2, lsl #1
相当于 R4 = *(R1), R1 = R1 + (R2 << 2^1) 之后 R2的值时没有变化的
posted @ 2023-03-13 17:00  明月照江江  阅读(49)  评论(0编辑  收藏  举报