在企业安全技术(1):检查平台AESNI支持和企业安全技术(2):检查平台Secure Key支持中,我们默认的平台是Intel平台,所以有网友问我:如果在其他平台会怎么样?这是一个好问题!对于其他平台,最好的方法是根据它们的软件开发员手册仔细对照一下是否同样支持AESNI或者Secure Key?是否也有同样的检测办法?若开发者仅仅关心Intel平台,并且想自己的企业软件对其他平台免疫,那么最好的方法还是加入平台检查功能。在Intel平台尝试硬件解决方案,其他平台用软件解决方案。那么如何检查当前平台是Intel平台呢?本篇博客将介绍一种软件自动检查的方法。
CPUID提供了CPU的名字获取,对于如图1所示。当EAX=0时候,EBX,ECX,EDX将会存储CPU的名字。
图1
从图1可以获知,Intel CPU的名字是GenuineIntel。我们可以通过检查它来判断是否是Intel平台,具体代码如下。
int main( void ) { char name[16]; int CPUInfo[4] = { 0, 0, 0, 0 }; int InfoType = 0;
__cpuid( CPUInfo, InfoType ); *((int*) name) = CPUInfo[ 1 ]; *((int*) (name + 4)) = CPUInfo[ 3 ]; *((int*) (name + 8)) = CPUInfo[ 2 ]; name[12] ='\0'; printf( "Name is %s\n", name ); if ( strlen( name ) == strlen( "GenuineIntel" ) && strcmp( name, "GenuineIntel" ) == 0 ) printf( "CPU maker is Intel\n" );
getchar();
return 0; } |
简答吧?
嗯…
那还在等什么!
参考:
图标图像:
