zl程序教程

您现在的位置是:首页 >  APP

当前栏目

【Android 逆向】【ARM汇编】 堆栈

2023-04-18 15:49:13 时间

arm 四种栈

1 空栈
栈指针指向空位,每次存入时可以直接存入然后栈指针移动一格;而取出时需要先移动一格才能取出
2 满栈
栈指针指向栈中最后一格数据。每次存入时需要先移动栈指针一格再存入。取出时可以直接取出,然后再移动栈指针
3 增栈
栈指针移动时向地址增加的方向移动的栈
4 减栈
栈指针移动时向地址减小的方向移动的栈

arm 8种后缀

用于多寄存器寻址
ia increase after 先传输 再地址+4
ib increase before 先地址+4,再传输
da decrease after 先传输 再地址-4
db decrease before 先地址-4 再传输

用于堆栈寻址
fd full decrease 满递减栈 (重点掌握 ARM用)
ed empty decrease 空递减栈
fa 满递增栈
ea 空递增栈
arm 是满递减栈(FD)
stmfd sp!, {r1-r4} 
等价于 stmfd sp!, {r1, r2, r3, r4} 
等价于 push {r1, r2, r3, r4}, sp = sp -寄存器数量*4(个字节)

入栈 从右往左  r4 -> r1

ldmfd sp!, {r1-r4}
出栈 从左往右  r1 -> r4