使用链接寄存器是否可以防止stackoverflow攻击



我看到ARM使用了链接寄存器,想知道它是否可以被用户空间的恶意代码写入?

我的意思是,你不能进行stackoverflow攻击并覆盖堆栈上的返回地址(就像在x86中一样)。

我会用一个问题来回答你的问题:

如果函数A调用函数B,而函数B调用函数C,那么在C执行时,B的返回地址存储在哪里?它不能在链接寄存器中,因为它保存了C…的返回地址


顺便说一句,LR是可从用户空间写入的。

链接寄存器使用用户输入覆盖它稍微困难一些,但肯定不是不可能。最常见的原因是嵌套函数:如果你正在调用另一个函数,你必须将当前LR存储在某个地方,因为它会被调用破坏。它的逻辑位置是堆栈和其他保存的寄存器,这是大多数编译器所做的。因此,缓冲区溢出仍然可以覆盖保存的LR,并且当保存的值被弹出并用于"返回到调用方"时,控制权传输可能会发生。

最新更新