【发布时间】:2015-12-16 13:54:14
【问题描述】:
一般来说,如果不使用特定于操作系统的方法,x86 应用程序如何检测到它是在 AMD64 兼容模式而不是传统模式下运行的?
我知道我可以通过执行smsw eax 或类似的非特权指令(用于检查是否启用例如分页/缓存/...)在用户空间中获得cr0,但在阅读了英特尔的系统编程指南之后第 9.8.5 节 初始化 IA-32e 模式,我了解到这几乎没有用,因为 IA-32e 模式是通过 IA32_EFER MSR 启用的,而响铃 3 代码无法访问。那么还有什么方法可以可靠地区分传统模式和兼容模式吗?
【问题讨论】:
-
wiki.osdev.org/X86-64#How_do_I_detect_if_the_CPU_is_64_bits_.3F 指出
CPUID会告诉您cpu 是否支持长模式,但不会对您的问题有任何启发。我认为该页面上没有提到检测方法这一事实是用户空间没有检测方法的一小部分证据。