system – 什么是阻止用户进程独立使用trap指令?

系统调用的存根例程通过陷阱指令切换到内核模式.什么是防止用户进程独立使用trap指令切换到内核模式,然后在切换后执行恶意代码? 最佳答案 trap指令不是简单地将CPU模式从用户切换到内核;它实际上做了以下事情:

它将模式和JUMPS CPU指令指针切换到内核中的指定中断处理程序,因此从技术上讲,一旦调用了trap指令,您的代码将不会被执行.

我们以x86 FreeBSD为例:
在所有操作系统中,都有一个称为中断向量的东西,它基本上是一个中断处理程序列表,如果IO发生,中断处理程序0xwhatever正在进行,如果你想将CPU陷入内核模式,应该调用中断处理程序0x80;怎么叫它?
int 0x80完成此操作后,CPU将执行处理程序#80(粗略地说),然后将读取某些寄存器以确定下一步操作(通常,您设置您希望内核为其执行的服务类型)你和寄存器中的参数).

所以在这里,你可以切换到内核模式的唯一方法是通过int指令(有指令切换,但方式略有不同,但概念保持不变),你必须指定一个特定的中断,所以CPU将跳转到适当的代码,然后代码,这是内核的一部分,将完成它应该做的工作,并返回到您的代码后返回模式到用户模式;你可以在没有任何数字的情况下调用int,但这不仅仅是将模式转移到内核中,它默认情况下会调用中断处理程序0,无论可能是什么.

其他操作系统/ CPU将使用不同的指令,但通常,机制是相同的.

点赞