看了https://r00tk1ts.github.io/2018/03/07/leg/的wp后才做出来的
LR就是连接寄存器(Link Register,LR)(R14)
在ARM体系结构中LR的特殊用途有两种:
一是用来保存子程序返回地址 保存子程序返回地址。使用BL或BLX时,跳转指令自动把返回地址放入r14中;子程序通过把r14复制到PC来实现返回;
二是当异常发生时,LR中保存的值等于异常发生时PC的值减4(或者减2),因此在各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行。
所以在这道题目中我们会去看哪里调用了key3然后多加4得到lr的值(其实是pc-4,因为pc=当前+8)
SP(stack pointer)就是堆栈指针
寄存器pc(r15)在arm状态下(指令长度为4,RISC等长指令集),总是指向当前指令(正在执行)+8处
thumb状态下每次+4 (thumb状态每条指令是2字节长)。
本文深入解析ARM体系结构中LR(Link Register)和SP(Stack Pointer)的作用及使用场景。LR主要用于保存子程序返回地址,确保程序正确返回;异常处理时,LR帮助返回异常前状态。SP用于管理堆栈,确保程序调用过程中的数据正确保存与恢复。
491

被折叠的 条评论
为什么被折叠?



