原因是CPU对BTS记录的大小做了调整。
typedef struct tagBtsRecord { DWORD dwFrom; DWORD dwTo; DWORD dwFlags; } BtsRecord, *PBtsRecord;
Pentium M和P4时,这个结构在32位模式时每个字段都是32位的,64位时各个字段都是64位的。
但是后来的CPU统一使用64位了,不管是否工作在32位模式还是64位模式。
也就是说,需要把上面的结构扩展成64位。可以通过cpuid指令来检查CPU的这种特征:
以EAX=1执行CPUID指令,然后判断ECX寄存器的bit 2,即DTES64位:
64-bit DS Area. A value of 1 indicates the processor supports DS area using 64-bit layout
|