我知道操作系统提供的系统调用,以保护程序不访问其他程序内存。但这只有在我使用OS提供的系统调用库时才有用。如果我自己编写汇编代码,为内核模式设置CPU位并执行特权指令(假设在内存中修改OS'程序段),该怎么办?操作系统可以防范吗? 附:出于好奇的问题。如果可以提供任何好的博客或书籍参考,那将是有帮助的,因为我想尽可能详细地研究操作系统。
答案 0 :(得分:1)
处理器再次通过以下方式保护这种恶意恶作剧:(1)要求你处于高架模式(对于我们这里的例子,KERNEL); (2)限制对内核模式的访问。
要从用户模式进入内核模式,必须是中断(此处不适用)或异常。通常两者都以相同的方式处理,但有一些奇怪的处理器(有人说英特尔吗?)做的事情有点不同
操作系统异常和中断处理程序必须限制用户模式程序可以执行的操作。
如果我自己编写汇编代码,为内核模式设置CPU位并执行特权指令
,该怎么办?
您无法将处理器状态寄存器中的内核模式位设置为进入内核模式。
OS可以防范吗?
CPU防止这种情况发生。
如果可以提供任何好的博客或书籍参考,那将是有帮助的,因为我想尽可能详细地研究操作系统。
VAX / VMS系统内部书籍虽然陈旧,但它很便宜,并展示了如何实现真正的操作系统。
答案 1 :(得分:0)
这篇博客清楚地解释了我的困惑。 http://minnie.tuhs.org/CompArch/Lectures/week05.html 即使用户程序可以切换到内核模式,但它们必须通过中断指令(在x86的情况下为int)来执行,并且对于此中断,中断处理程序由OS编写。 (可能是在启动时处于内核模式时)。因此,所有特权指令只能由OS代码执行。