通过CPUID指令获取CPU信息

本文介绍了在Linux环境下如何通过内嵌汇编调用CPUID指令获取CPU的ID、厂商、Brand、Family、Model及Stepping ID。详细讲解了CPUID指令的工作原理,并提供了相关代码实现。
摘要由CSDN通过智能技术生成

1.简介

在计算机领域中需要用到CPU信息的地方有很多。比如,在可信计算中,需要收集终端的软硬件的完整性信息,其中就包含CPU的信息;再比如,一些加密软件需要绑定CPU的某些信息,去生成加密密钥。本文就关于在Linux平台下CPU信息的获取展开阐述。
CPU信息获取的方式有两种方式:
1. 使用内嵌汇编调用CPUID指令
2. 读取/proc/cpuinfo文件
本文主要对第一种方式-“使用内嵌汇编调用CPUID指令”进行说明,在下一篇中重点对‘读取/proc/cpuinfo文件’的方式进行讲解。
以”使用内嵌汇编调用CPUID指令”的方式获取CPU信息。首先使用内嵌汇编调用CPUID指令来获取CPUID、CPU厂商、CPU Brand、CPU Family、CPU Model、CPU Stepping ID,然后采用MD5算法计算CPU信息的Hash值。

2.CPUID指令

CPUID指令的基本原理是,CPU根据传递给EAX 寄存器的值,将对应的CPU信息返回给 EAX、EBX、ECX 及 EDX 寄存器。通过对这些寄存器的值进行操作即可获取CPU各类信息。CPUID指令带代码如下:

#define cpuid(func,eax,ebx,ecx,edx)\
    __asm__ __volatile__ ("cpuid":\
    "=a" (eax),"=b" (ebx),"=c" (ecx),"=d" (edx):\
    "a" (func));

本文使用了宏定义的方式封装CPUID指令函数。如对此处的宏定义不太清楚,请阅读。GCC内嵌汇编的格式是——
_asm__</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值