用CPUID指令,首先你可以确定你用的CPU是Intel的。然后执行:
MOV EAX,01H
CPUID
如果返回的EDX中,低18位为1,那么这个CPU就是支持序列号的。此时EAX就是序列号的高32位。这32位对同一型号的CPU是一样的。再执行:
MOV EAX,03H
CPUID
此时的EDX:ECX就是序列号的第64位。 要想关闭这个ID,可执行下列代码:
MOV ECX,119H
RDMSR
OR EAX,00200000H
WRMSR
不过,一旦执行上述代码,cpu 将一直不能取id,直到下次 reset。
// getcpuid.cpp : Defines the entry point for the console application.
//
#include <stdio.h>
#include <conio.h>
int main(int argc, char* argv[])
{
unsigned long s1,s2;
unsigned char vendor_id[]="------------";
char sel;
printf("Select the function:/n1-------Read CPU id./n2-------Disable CPU id./n");
sel=getch();
switch(sel)
{
case '1':
_asm
{
xor eax,eax
cpuid
mov dword ptr vendor_id,ebx
mov dword ptr vendor_id[+4],edx
mov dword ptr vendor_id[+8],ecx
}
printf("%s-",vendor_id);
_asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
printf("%08X/n%08X-",s1,s2);
_asm
{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
printf("%08X-%08X/n",s1,s2);
break;
case '2':
_asm{
mov ecx,119h
rdmsr
or eax,00200000h
wrmsr
}
printf("CPU id is disabled./n");
break;
}
return 0;
}
获取CPUID
最新推荐文章于 2022-11-26 10:40:35 发布