内核堆栈与我们(程序员)编写的应用程序使用的用户模式堆栈的结构是否不同?
你能解释一下区别吗?
最佳答案
从概念上讲,两者是相同的数据结构:堆栈。
之所以每个线程有两个不同的堆栈是因为在用户模式下,不允许代码弄乱内核内存。当切换到内核模式时,内存中的另一个堆栈只能在内核模式下访问,用于返回地址等。
如果用户模式可以访问内核堆栈,它可以修改跳转地址(例如),然后进行系统调用;当内核跳转到之前修改的地址时,你的代码在内核模式下执行!
此外,与安全相关的信息/关于其他进程的信息(用于同步)可能在内核堆栈上,因此用户模式也不应该对其进行读取访问。
关于language-agnostic - 内核堆栈与用户模式应用程序堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1974612/