#include "stdafx.h"
#include <afx.h>
CString GetCpuSerial()
{
unsigned long st1 = 0;
unsigned long st2 = 0;
unsigned long s1,s2;
unsigned char vendor_id[]="------------";
char CPUSERIAL[20];
memset(CPUSERIAL,0,20);
__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
}
__asm{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
st1 = s1+s2;
__asm{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
st2 = s1+s2;
memset(&CPUSERIAL,0,20);
sprintf_s(CPUSERIAL,"%08X",st1+st2);
return CPUSERIAL;
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("%s\n", GetCpuSerial());
return 0;
}
主要用到汇编指令 cpuid。
cpuid指令
cpuid就是一条读取CPU各种信息的一条指令,大概是从80486的某个版本开始就存在了。 CPUID这条指令,除了用于识别CPU(CPU的型号、家族、类型等),还可以读出CPU支持的功能(比如是否支持MMX,是否支持4MB的页等等),内容的确是十分丰富。CPUID指令有两组功能,一组返回的是基本信息,另一组返回的是扩展信息。
继续了解请参考:https://www.tsingfun.com/it/cpp/1965.html
运行结果: