获取CPUID

用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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值