假设——出于某种奇怪的原因——ESP
某个函数的堆栈指针 , 暂时递减,然后再次递增:
;; ... we're saving registers ...
push EAX
push EBX
push ECX
push EDX
add ESP, 4 ;; Whoops!
sub ESP, 4 ;; Ah, we're fine; we restored it... or are we?
现在,完全有可能在您的子指令之前立即触发中断。
如果我理解正确,中断会导致 CPU 将一些值压入堆栈。
这是否意味着您的堆栈现在将被损坏?或者操作系统是否以某种方式(如何?)使用不同的堆栈/内存来存储程序的上下文?还是取决于 CPU 的权限级别?(如果有,怎么做?)