
CPUID指令是intel IA32架构下获得CPU信息的汇编指令,可以得到CPU类型,型号,制造商信息,商标信息,序列号,缓存等一系列CPU相关的东西。
比如生成查询CPU的制造商信息(Vender ID String)的代码:
string CPUID::GetVID(){
char cVID[13]; // 字符串,用来存储制造商信息
memset(cVID, 0, 13); // 把数组清0
Executecpuid(0); // 执行cpuid指令,使用输入参数 eax = 0
memcpy(cVID, &m_ebx, 4); // 复制前四个字符到数组
memcpy(cVID+4, &m_edx, 4); // 复制中间四个字符到数组
memcpy(cVID+8, &m_ecx, 4); // 复制最后四个字符到数组
return string(cVID); // 以string的形式返回
}
每个型号的地址不一样的,但做软件加密时不要直接地址,不然很容易被破解
#define SOC_STM32F0_ID_ADDR 0x1FFFF7AC
#define SOC_STM32F1_ID_ADDR 0x1FFFF7E8
#define SOC_STM32F2_ID_ADDR 0x1FFF7A10
#define SOC_STM32F3_ID_ADDR 0x1FFFF7AC
#define SOC_STM32F4_ID_ADDR 0x1FFF7A10
#define SOC_STM32F7_ID_ADDR 0x1FF0F420
#define SOC_STM32L0_ID_ADDR 0x1FF80050
#define SOC_STM32L1_ID_ADDR 0x1FF80050
#define SOC_STM32L4_ID_ADDR 0x1FFF7590
#define SOC_STM32H7_ID_ADDR 0x1FF0F420
1,不要在程序中直接出现id地址,例如STM32:1FFFF7E8 1FFFF7EC 1FFFF7F0 STM8: 0x4865~0x4870
2, 利用校验和或是crc对程序区进行校验,防止改程序
#include<stdioh>
#include<stdlibh>
#include<timeh>
int main()
{
srand(time(0));
for(int i=0;i<10;i++)
printf("%3d",rand()%100+1);
printf("\n");
return 0;
}
生成10个1-100的随机整数。
以上就是关于给定一个CPU型号,如何生成对应的cpuid指令注意不是获取是生成 !全部的内容,包括:给定一个CPU型号,如何生成对应的cpuid指令注意不是获取是生成 !、如何获得stm32 cpu的唯一ID、在c语言中如何取得cpuid等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)