在一个类中,教授说“一个[汇编]指令知道它是在特权模式还是用户模式下运行,因为如果产生一个陷阱,那么它就是用户模式”。
首先我假设它不能是任何陷阱,而是一个特定的陷阱,说该命令无法在用户模式下运行。
其次,这看起来非常低效:运行整个命令并检查是否存在陷阱。为什么没有标志或什么?这不是说如果它不起作用那么我们知道有问题吗?所以真的没有办法检查?
答案 0 :(得分:0)
这取决于您的平台(即ARM,x86等......)。我主要使用ARM,所以我的答案可能是ARM特定的,但我保持它尽可能通用。
通常,CPU会跟踪它所处的处理器模式,并在执行时检查每条指令。这是在硬件而不是在软件中完成的,因此您不必担心它是否有效(留给硬件开发人员)。
如果指令被硬件捕获,因为没有足够的权限,CPU通常会在特权模式下的设置位置开始执行。此设置位置是陷阱处理程序,通常位于内核中。陷阱处理程序然后收集有关导致陷阱的原因的一些信息并适当地处理它。