|
|
|
|
|
|
|
Windows内核调试
帖子发起人: merry 发起时间: 2009-05-04 17:14 下午 回复: 7
|
帖子排序:
|
|
|
|
2009-05-04, 17:14 下午
|
merry
注册: 2008-09-26
发 贴: 61
|
请问如何解读!cpuinfo指令Features栏属性
|
|
|
|
请问指令 !cpuinfo的Features栏属性代表什么含义?谢谢! lkd> !cpuinfo CP F/M/S Manufacturer MHz
PRCB Signature MSR 8B Signature Features 0 6,14,12 GenuineIntel 1733
0000005400000000 0000005400000000 a0033fff
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-05-04, 19:58 下午
|
MJ0011
注册: 2008-04-24
发 贴: 112
|
Re: 请问如何解读!cpuinfo指令Features栏属性
|
|
|
|
CPU 特性,PAE , MMX , 3DNOW,等等等
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-05-04, 21:42 下午
|
merry
注册: 2008-09-26
发 贴: 61
|
Re: 请问如何解读!cpuinfo指令Features栏属性
|
|
|
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-05-04, 21:53 下午
|
MJ0011
注册: 2008-04-24
发 贴: 112
|
Re: 请问如何解读!cpuinfo指令Features栏属性
|
|
|
|
{ Standard (Intel) Feature Flags }
FPU_FLAG = $00000001; // Floating-Point unit on chip
VME_FLAG = $00000002; // Virtual Mode Extention
DE_FLAG = $00000004; // Debugging Extention
PSE_FLAG = $00000008; // Page Size Extention
TSC_FLAG = $00000010; // Time Stamp Counter
MSR_FLAG = $00000020; // Model Specific Registers
PAE_FLAG = $00000040; // Physical Address Extention
MCE_FLAG = $00000080; // Machine Check Exception
CX8_FLAG = $00000100; // CMPXCHG8 Instruction
APIC_FLAG = $00000200; // Software-accessible local APIC on Chip
BIT_10 = $00000400; // Reserved, do not count on value
SEP_FLAG = $00000800; // Fast System Call
MTRR_FLAG = $00001000; // Memory Type Range Registers
PGE_FLAG = $00002000; // Page Global Enable
MCA_FLAG = $00004000; // Machine Check Architecture
CMOV_FLAG = $00008000; // Conditional Move Instruction
PAT_FLAG = $00010000; // Page Attribute Table
PSE36_FLAG = $00020000; // 36-bit Page Size Extention
BIT_18 = $00040000; // Reserved, do not count on value
CLFLSH_FLAG = $00080000; // CLFLUSH intruction
BIT_20 = $00100000; // Reserved, do not count on value
DS_FLAG = $00200000; // Debug store
ACPI_FLAG = $00400000; // Thermal monitor and clock control
MMX_FLAG = $00800000; // MMX technology
FXSR_FLAG = $01000000; // Fast Floating Point Save and Restore
SSE_FLAG = $02000000; // Streaming SIMD Extensions
SSE2_FLAG = $04000000; // Streaming SIMD Extensions 2
SS_FLAG = $08000000; // Self snoop
HTT_FLAG = $10000000; // Hyper-threading technology
TM_FLAG = $20000000; // Thermal monitor
BIT_30 = $40000000; // Reserved, do not count on value
PBE_FLAG = DWORD($80000000); // Pending Break Enable
{ Extended (Intel) Feature Flags }
SSE3_EFLAG = $00000001; // Streaming SIMD Extensions 3
EBIT_1 = $00000002; // Reserved, do not count on value
EBIT_2 = $00000004; // Reserved, do not count on value
MONITOR_EFLAG = $00000008; // Monitor/MWAIT
DSCPL_EFLAG = $00000010; // CPL Qualified debug Store
EBIT_5 = $00000020; // Reserved, do not count on value
EBIT_6 = $00000040; // Reserved, do not count on value
EST_EFLAG = $00000080; // Enhanced Intel Speedstep technology
TM2_EFLAG = $00000100; // Thermal monitor 2
EBIT_9 = $00000200; // Reserved, do not count on value
CNXTID_EFLAG = $00000400; // L1 Context ID
EBIT_11 = $00000800; // Reserved, do not count on value
EBIT_12 = $00001000; // Reserved, do not count on value
EBIT_13 = $00002000; // Reserved, do not count on value
EBIT_14 = $00004000; // Reserved, do not count on value
EBIT_15 = $00008000; // Reserved, do not count on value
EBIT_16 = $00010000; // Reserved, do not count on value
EBIT_17 = $00020000; // Reserved, do not count on value
EBIT_18 = $00040000; // Reserved, do not count on value
EBIT_19 = $00080000; // Reserved, do not count on value
EBIT_20 = $00100000; // Reserved, do not count on value
EBIT_21 = $00200000; // Reserved, do not count on value
EBIT_22 = $00400000; // Reserved, do not count on value
EBIT_23 = $00800000; // Reserved, do not count on value
EBIT_24 = $01000000; // Reserved, do not count on value
EBIT_25 = $02000000; // Reserved, do not count on value
EBIT_26 = $04000000; // Reserved, do not count on value
EBIT_27 = $08000000; // Reserved, do not count on value
EBIT_28 = $10000000; // Reserved, do not count on value
EBIT_29 = $20000000; // Reserved, do not count on value
EBIT_30 = $40000000; // Reserved, do not count on value
EBIT_31 = DWORD($80000000); // Reserved, do not count on value
{ AMD Standard Feature Flags }
AMD_FPU_FLAG = $00000001; // Floating-Point unit on chip
AMD_VME_FLAG = $00000002; // Virtual Mode Extention
AMD_DE_FLAG = $00000004; // Debugging Extention
AMD_PSE_FLAG = $00000008; // Page Size Extention
AMD_TSC_FLAG = $00000010; // Time Stamp Counter
AMD_MSR_FLAG = $00000020; // Model Specific Registers
AMD_PAE_FLAG = $00000040; // Physical address Extensions
AMD_MCE_FLAG = $00000080; // Machine Check Exception
AMD_CX8_FLAG = $00000100; // CMPXCHG8 Instruction
AMD_APIC_FLAG = $00000200; // Software-accessible local APIC on Chip
AMD_BIT_10 = $00000400; // Reserved, do not count on value
AMD_SEP_BIT = $00000800; // SYSENTER and SYSEXIT instructions
AMD_MTRR_FLAG = $00001000; // Memory Type Range Registers
AMD_PGE_FLAG = $00002000; // Page Global Enable
AMD_MCA_FLAG = $00004000; // Machine Check Architecture
AMD_CMOV_FLAG = $00008000; // Conditional Move Instruction
AMD_PAT_FLAG = $00010000; // Page Attribute Table
AMD_PSE2_FLAG = $00020000; // Page Size Extensions
AMD_BIT_18 = $00040000; // Reserved, do not count on value
AMD_CLFLSH_FLAG = $00080000; // CLFLUSH instruction
AMD_BIT_20 = $00100000; // Reserved, do not count on value
AMD_BIT_21 = $00200000; // Reserved, do not count on value
AMD_BIT_22 = $00400000; // Reserved, do not count on value
AMD_MMX_FLAG = $00800000; // MMX technology
AMD_FX_FLAG = $01000000; // FXSAVE and FXSTORE instructions
AMD_SSE_FLAG = $02000000; // SSE Extensions
AMD_SSE2_FLAG = $04000000; // SSE2 Extensions
AMD_BIT_27 = $08000000; // Reserved, do not count on value
AMD_BIT_28 = $10000000; // Reserved, do not count on value
AMD_BIT_29 = $20000000; // Reserved, do not count on value
AMD_BIT_30 = $40000000; // Reserved, do not count on value
AMD_BIT_31 = DWORD($80000000); // Reserved, do not count on value
AMD Enhanced Feature Flags }
EAMD_FPU_FLAG = $00000001; // Floating-Point unit on chip
EAMD_VME_FLAG = $00000002; // Virtual Mode Extention
EAMD_DE_FLAG = $00000004; // Debugging Extention
EAMD_PSE_FLAG = $00000008; // Page Size Extention
EAMD_TSC_FLAG = $00000010; // Time Stamp Counter
EAMD_MSR_FLAG = $00000020; // Model Specific Registers
EAMD_PAE_EFLAG = $00000040; // Physical-address extensions
EAMD_MCE_FLAG = $00000080; // Machine Check Exception
EAMD_CX8_FLAG = $00000100; // CMPXCHG8 Instruction
EAMD_APIC_FLAG = $00000200; // Advanced Programmable Interrupt Controler
EAMD_BIT_10 = $00000400; // Reserved, do not count on value
EAMD_SEP_FLAG = $00000800; // Fast System Call
EAMD_MTRR_FLAG = $00001000; // Memory-Type Range Registers
EAMD_PGE_FLAG = $00002000; // Page Global Enable
EAMD_MCA_FLAG = $00004000; // Machine Check Architecture
//EAMD_ICMOV_FLAG = $00008000; // Integer Conditional Move Instruction
//EAMD_FCMOV_FLAG = $00010000; // Floating Point Conditional Move Instruction
EAMD_CMOV_FLAG = $00008000; // Conditional Move Intructions
EAMD_PAT_FLAG = $00010000; // Page Attributes Table
EAMD_PSE2_FLAG = $00020000; // Page Size Extensions
EAMD_BIT_18 = $00040000; // Reserved, do not count on value
EAMD_BIT_19 = $00080000; // Reserved, do not count on value
EAMD_NEPP_FLAG = $00100000; // No-Execute Page Protection
EAMD_BIT_21 = $00200000; // Reserved, do not count on value
EAMD_EXMMX_FLAG = $00400000; // AMD Extensions to MMX technology
EAMD_MMX_FLAG = $00800000; // MMX technology
EAMD_FX_FLAG = $01000000; // FXSAVE and FXSTORE instructions
EAMD_FFX_FLAG = $02000000; // Fast FXSAVE and FXSTORE instructions
EAMD_BIT_26 = $04000000; // Reserved, do not count on value
EAMD_BIT_27 = $08000000; // Reserved, do not count on value
EAMD_BIT_28 = $10000000; // Reserved, do not count on value
EAMD_LONG_FLAG = $20000000; // Long Mode (64-bit Core)
EAMD_EX3DNOW_FLAG = $40000000; // AMD Extensions to 3DNow! intructions
EAMD_3DNOW_FLAG = DWORD($80000000); // AMD 3DNOW! Technology
{ Cyrix Standard Feature Flags }
CYRIX_FPU_FLAG = $00000001; // Floating-Point unit on chip
CYRIX_VME_FLAG = $00000002; // Virtual Mode Extention
CYRIX_DE_FLAG = $00000004; // Debugging Extention
CYRIX_PSE_FLAG = $00000008; // Page Size Extention
CYRIX_TSC_FLAG = $00000010; // Time Stamp Counter
CYRIX_MSR_FLAG = $00000020; // Model Specific Registers
CYRIX_PAE_FLAG = $00000040; // Physical Address Extention
CYRIX_MCE_FLAG = $00000080; // Machine Check Exception
CYRIX_CX8_FLAG = $00000100; // CMPXCHG8 Instruction
CYRIX_APIC_FLAG = $00000200; // Software-accessible local APIC on Chip
CYRIX_BIT_10 = $00000400; // Reserved, do not count on value
CYRIX_BIT_11 = $00000800; // Reserved, do not count on value
CYRIX_MTRR_FLAG = $00001000; // Memory Type Range Registers
CYRIX_PGE_FLAG = $00002000; // Page Global Enable
CYRIX_MCA_FLAG = $00004000; // Machine Check Architecture
CYRIX_CMOV_FLAG = $00008000; // Conditional Move Instruction
CYRIX_BIT_16 = $00010000; // Reserved, do not count on value
CYRIX_BIT_17 = $00020000; // Reserved, do not count on value
CYRIX_BIT_18 = $00040000; // Reserved, do not count on value
CYRIX_BIT_19 = $00080000; // Reserved, do not count on value
CYRIX_BIT_20 = $00100000; // Reserved, do not count on value
CYRIX_BIT_21 = $00200000; // Reserved, do not count on value
CYRIX_BIT_22 = $00400000; // Reserved, do not count on value
CYRIX_MMX_FLAG = $00800000; // MMX technology
CYRIX_BIT_24 = $01000000; // Reserved, do not count on value
CYRIX_BIT_25 = $02000000; // Reserved, do not count on value
CYRIX_BIT_26 = $04000000; // Reserved, do not count on value
CYRIX_BIT_27 = $08000000; // Reserved, do not count on value
CYRIX_BIT_28 = $10000000; // Reserved, do not count on value
CYRIX_BIT_29 = $20000000; // Reserved, do not count on value
CYRIX_BIT_30 = $40000000; // Reserved, do not count on value
CYRIX_BIT_31 = DWORD($80000000); // Reserved, do not count on value
{ Cyrix Enhanced Feature Flags }
ECYRIX_FPU_FLAG = $00000001; // Floating-Point unit on chip
ECYRIX_VME_FLAG = $00000002; // Virtual Mode Extention
ECYRIX_DE_FLAG = $00000004; // Debugging Extention
ECYRIX_PSE_FLAG = $00000008; // Page Size Extention
ECYRIX_TSC_FLAG = $00000010; // Time Stamp Counter
ECYRIX_MSR_FLAG = $00000020; // Model Specific Registers
ECYRIX_PAE_FLAG = $00000040; // Physical Address Extention
ECYRIX_MCE_FLAG = $00000080; // Machine Check Exception
ECYRIX_CX8_FLAG = $00000100; // CMPXCHG8 Instruction
ECYRIX_APIC_FLAG = $00000200; // Software-accessible local APIC on Chip
ECYRIX_SEP_FLAG = $00000400; // Fast System Call
ECYRIX_BIT_11 = $00000800; // Reserved, do not count on value
ECYRIX_MTRR_FLAG = $00001000; // Memory Type Range Registers
ECYRIX_PGE_FLAG = $00002000; // Page Global Enable
ECYRIX_MCA_FLAG = $00004000; // Machine Check Architecture
ECYRIX_ICMOV_FLAG = $00008000; // Integer Conditional Move Instruction
ECYRIX_FCMOV_FLAG = $00010000; // Floating Point Conditional Move Instruction
ECYRIX_BIT_17 = $00020000; // Reserved, do not count on value
ECYRIX_BIT_18 = $00040000; // Reserved, do not count on value
ECYRIX_BIT_19 = $00080000; // Reserved, do not count on value
ECYRIX_BIT_20 = $00100000; // Reserved, do not count on value
ECYRIX_BIT_21 = $00200000; // Reserved, do not count on value
ECYRIX_BIT_22 = $00400000; // Reserved, do not count on value
ECYRIX_MMX_FLAG = $00800000; // MMX technology
ECYRIX_EMMX_FLAG = $01000000; // Extended MMX Technology
ECYRIX_BIT_25 = $02000000; // Reserved, do not count on value
ECYRIX_BIT_26 = $04000000; // Reserved, do not count on value
ECYRIX_BIT_27 = $08000000; // Reserved, do not count on value
ECYRIX_BIT_28 = $10000000; // Reserved, do not count on value
ECYRIX_BIT_29 = $20000000; // Reserved, do not count on value
ECYRIX_BIT_30 = $40000000; // Reserved, do not count on value
ECYRIX_BIT_31 = DWORD($80000000); // Reserved, do not count on value
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-05-04, 21:58 下午
|
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
|
Re: 请问如何解读!cpuinfo指令Features栏属性
|
|
|
|
这是NT内核抽象出来的CPU特性,记录在处理器的KPRCB结构的FeatureBits字段中,在内核启动时,nt!KiGetFeatureBits函数使用CPUID指令收集信息,分别按照AMD和INTEL CPU的特点将得到的信息放到FeatureBits中,各个位的定义在ReactOS的源代码中中可以找到:
00070 00071 00072 00073 #define KF_V86_VIS 0x00000001 00074 #define KF_RDTSC 0x00000002 00075 #define KF_CR4 0x00000004 00076 #define KF_CMOV 0x00000008 00077 #define KF_GLOBAL_PAGE 0x00000010 00078 #define KF_LARGE_PAGE 0x00000020 00079 #define KF_MTRR 0x00000040 00080 #define KF_CMPXCHG8B 0x00000080 00081 #define KF_MMX 0x00000100 00082 #define KF_WORKING_PTE 0x00000200 00083 #define KF_PAT 0x00000400 00084 #define KF_FXSR 0x00000800 00085 #define KF_FAST_SYSCALL 0x00001000 00086 #define KF_XMMI 0x00002000 00087 #define KF_3DNOW 0x00004000 00088 #define KF_AMDK6MTRR 0x00008000 00089 #define KF_XMMI64 0x00010000 00090 #define KF_DTS 0x00020000 00091 #define KF_NX_BIT 0x20000000 00092 #define KF_NX_DISABLED 0x40000000 00093 #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 a0033fff Evaluate 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
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-05-05, 09:05 上午
|
王宇
注册: 2007-05-08
发 贴: 306
|
Re: 请问如何解读!cpuinfo指令Features栏属性
|
|
|
|
楼上的忘记感谢 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
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-05-05, 20:54 下午
|
merry
注册: 2008-09-26
发 贴: 61
|
Re: 请问如何解读!cpuinfo指令Features栏属性
|
|
|
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
高端调试 » 软件调试 » Windows内核调试 » Re: 请问如何解读!cpuinfo指令Features栏属性
|
|
|
|
|
|