亲测在Qt中能正确获取CPU序列号,获取序列号的代码如下:
unsigned long s1,s2,s3,s4;
char string[128];
char szCpuId[1024];
char p1[128], p2[128];
unsigned int eax = 0;
unsigned int ebx,ecx,edx;
QString strCPUID;
#if 1
asm volatile
(
"cpuid"
: "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx)
: "0"(0)
);
snprintf(szCpuId, 5, "%s", (char *)&ebx);
snprintf(szCpuId+4, 5, "%s", (char *)&edx);
snprintf(szCpuId+8, 5, "%s", (char *)&ecx);
#endif
asm volatile
(
"movl $0x01 , %%eax ; \n\t"
"xorl %%edx , %%edx ;\n\t"
"cpuid ;\n\t"
"movl %%edx ,%0 ;\n\t"
"movl %%eax ,%1 ; \n\t"
:"=m"(s1),"=m"(s2)
);
char cpuID[20];
memset(cpuID,0,20);
sprintf((char *)p1, "%08X%08X", s1, s2);
snprintf(szCpuId+12, 20, "%s", (char *)p1);
memcpy(cpuID,p1,17);
printf("CPUID is:%s\n", cpuID);