【问题标题】:Time-Stamp Counter Restriction时间戳计数器限制
【发布时间】:2011-07-25 04:25:46
【问题描述】:

我想检查 RDTSC 指令是否可用。必须有 Intel Pentium 或更新的处理器,并且寄存器 CR4 中的 TSD 标志清零或已设置且 CPL 等于 0。

因此,获取当前的特权级别(CS 段寄存器的位 0 和位 1)是没有问题的。检查指令本身是否支持也没有问题(CPUID.1:EDX[4] = 1)。

但是(这就是问题所在),这也必须在用户模式 ​​(PL3) 下运行。但是,我无法在用户模式下读取控制寄存器 CR4。

有没有其他方法可以检查操作系统是否确实限制了对时间戳计数器的访问?

【问题讨论】:

    标签: operating-system intel assembly privileged-functions


    【解决方案1】:

    唯一的方法是“尝试”指令并拦截异常,前提是操作系统让您能够以安全的方式对事件做出反应并恢复您的状态,以便您可以继续您的程序。不幸的是,并非所有操作系统都允许在他们认为“致命”的异常之后继续。在 Windows 上,您可以尝试使用结构化异常处理,在 linux 上有特定的信号(特别是 SIGILL)。但是其他操作系统不会原谅这种例外。 再见

    (编辑)

    PS:原则上,操作系统也可以接收异常并模拟指令,因此应用程序无法确定指令是否真的可用。我不知道是否有操作系统可以做这件事(虚拟机,也许?)。 再见!

    【讨论】:

    • (+1) 这似乎是我能得到的唯一解决方案,太糟糕了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    相关资源
    最近更新 更多