【发布时间】:2020-01-05 16:19:58
【问题描述】:
如果当前权限级别编码为CS,可以通过用户模式代码修改,为什么用户模式代码不能修改CS来更改CPL?
【问题讨论】:
-
它可以:只需执行
syscall或int3;) -
@Ruslan SYSCALL 在权限级别 0 调用操作系统系统调用处理程序,但在这种情况下,操作系统是将地址放入 CS 的人(CS 指向处理程序的地址),不是用户
-
不,这不是直接的操作系统:它是
syscall指令改变了cs,以及一堆其他寄存器。中断处理程序也是如此(尽管它们不使用 MSR 来查找目标,而是使用 IDT 中的中断门)。 -
关于每条可能改变 CPL(JMP/CALL/IRET/RETF 等)的指令会发生什么的真正答案在每条指令的指令集架构参考中。 felixcloutier.com/x86
-
我有一种预感,问你这个问题的人很/困惑,虽然我不能说,因为我不能直接问他们这些问题。
标签: x86 x86-64 cpu-architecture protected-mode