我想检查 RDTSC 指令是否可用。必须有 Intel Pentium 或更新的处理器,并且寄存器 CR4 中的 TSD 标志清零或已设置且 CPL 等于 0。
因此,获取当前的特权级别(CS 段寄存器的第 0 位和第 1 位)是没有问题的。检查指令本身是否受支持也没有问题(CPUID.1:EDX[4] = 1)。
但是(这就是问题所在),这也必须在用户模式(PL3)下运行。但是,我无法在用户模式下读取控制寄存器 CR4。
有没有其他方法可以检查操作系统是否限制对时间戳计数器的访问?
我想检查 RDTSC 指令是否可用。必须有 Intel Pentium 或更新的处理器,并且寄存器 CR4 中的 TSD 标志清零或已设置且 CPL 等于 0。
因此,获取当前的特权级别(CS 段寄存器的第 0 位和第 1 位)是没有问题的。检查指令本身是否受支持也没有问题(CPUID.1:EDX[4] = 1)。
但是(这就是问题所在),这也必须在用户模式(PL3)下运行。但是,我无法在用户模式下读取控制寄存器 CR4。
有没有其他方法可以检查操作系统是否限制对时间戳计数器的访问?