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

时间:2012-08-28 16:24:17

标签: x86 arm stack-overflow

我已经看到ARM使用链接寄存器,并想知道用户空间恶意代码是否不可写?

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

2 个答案:

答案 0 :(得分:3)

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

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

的返回地址

另外,LR可以从用户空间写入。

答案 1 :(得分:2)

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