处理器对栈的保护

处理器对栈的保护

Content #

当处理器执行任何一条改变栈段寄存器SS 的指令时,它会在下一条指令执行完期间禁止中断。

要想改变代码段和数据段,只需要改变段寄存器就可以了。但栈段不同,因为它除了有段寄存器,还有栈指针。因此,绝大多数时候,对栈的改变是分两步进行的:先改变段寄存器SS 的内容,接着又修改栈指针寄存器SP 的内容。想象一下,如果刚刚修改了段寄存器SS,在还没来得及修改SP 的情况下,就发生了中断,会出现什么后果,而且要知道,中断是需要依靠栈来工作的。

因此,处理器在设计的时候就规定,当遇到修改段寄存器SS 的指令时,在这条指令和下一条指令执行完毕期间,禁止中断,以此来保护栈。换句话说,你应该在修改段寄存器SS 的指令之后,紧跟着一条修改栈指针SP 的指令。

From #