这是NT内核抽象出来的CPU特性,记录在处理器的KPRCB结构的FeatureBits字段中,在内核启动时,nt!KiGetFeatureBits函数使用CPUID指令收集信息,分别按照AMD和INTEL CPU的特点将得到的信息放到FeatureBits中,各个位的定义在ReactOS的源代码中中可以找到:
00070 //00071 // Kernel Feature Bits00072 //00073 #define KF_V86_VIS 0x0000000100074 #define KF_RDTSC 0x0000000200075 #define KF_CR4 0x0000000400076 #define KF_CMOV 0x0000000800077 #define KF_GLOBAL_PAGE 0x0000001000078 #define KF_LARGE_PAGE 0x0000002000079 #define KF_MTRR 0x0000004000080 #define KF_CMPXCHG8B 0x0000008000081 #define KF_MMX 0x0000010000082 #define KF_WORKING_PTE 0x0000020000083 #define KF_PAT 0x0000040000084 #define KF_FXSR 0x0000080000085 #define KF_FAST_SYSCALL 0x0000100000086 #define KF_XMMI 0x0000200000087 #define KF_3DNOW 0x0000400000088 #define KF_AMDK6MTRR 0x0000800000089 #define KF_XMMI64 0x0001000000090 #define KF_DTS 0x0002000000091 #define KF_NX_BIT 0x2000000000092 #define KF_NX_DISABLED 0x4000000000093 #define KF_NX_ENABLED 0x80000000
因此,a0033fff代表的CPU功能是:KF_NX_ENABLED | KF_NX_BIT | KF_DTS | KF_XMMI64 | KF_XMMI | KF_FAST_SYSCALL 加上KF_FXSR前面的所有功能,也就是几乎所有功能都支持了。
lkd> .formats a0033fffEvaluate expression: Hex: a0033fff Decimal: -1610399745 Octal: 24000637777 Binary: 10100000 00000011 00111111 11111111 Chars: ..?. Time: ***** Invalid Float: low -1.11173e-019 high -1.#QNAN Double: -1.#QNAN
Raymond, 学问一流,且乐于助人!
努力学习...
楼上的忘记感谢 MJ 了哦~
X86平台 微软的定义在: \base\ntos\inc\i386.h
//// i386 Feature bit definitions//// N.B. The no execute feature flags must be identical on all platforms.
#define KF_V86_VIS 0x00000001#define KF_RDTSC 0x00000002#define KF_CR4 0x00000004#define KF_CMOV 0x00000008#define KF_GLOBAL_PAGE 0x00000010#define KF_LARGE_PAGE 0x00000020#define KF_MTRR 0x00000040#define KF_CMPXCHG8B 0x00000080#define KF_MMX 0x00000100#define KF_WORKING_PTE 0x00000200#define KF_PAT 0x00000400#define KF_FXSR 0x00000800#define KF_FAST_SYSCALL 0x00001000#define KF_XMMI 0x00002000#define KF_3DNOW 0x00004000#define KF_AMDK6MTRR 0x00008000#define KF_XMMI64 0x00010000#define KF_DTS 0x00020000#define KF_NOEXECUTE 0x20000000#define KF_GLOBAL_32BIT_EXECUTE 0x40000000#define KF_GLOBAL_32BIT_NOEXECUTE 0x80000000