本帖最后由 想把我唱给你听 于 2014-11-1 20:27 编辑
比如说一个子程序:
void test(int a , int b)
{
..........
..........
}
反汇编后应该是:
mov ip, sp //IP=SP;保存SP
stmdb sp!, {fp, ip, lr, pc} //先对SP减4,再对fp,ip,lr,pc压栈。(这里的pc指针入栈后面没用到,如果不入栈可以吗?为什么?)
sub fp, ip, #4 ; 0x4 //fp=ip-4;此时fp指向栈里面的“pc”
..........
..........(参数入栈)
..........(局部变量入栈)
..........
sub sp, fp, #12 ; 0xc //sp=fp-12;此时sp指向栈里面的lr
ldmia sp, {fp, sp, pc} //弹栈pc=lr,sp=ip,fp=fp。然后地址加4---------1
|