首页
社区
课程
招聘
[原创]硬件信息获取系列--通过cpuid指令获取cpu的基本信息与扩展信息
发表于: 2016-12-8 22:14 11253

[原创]硬件信息获取系列--通过cpuid指令获取cpu的基本信息与扩展信息

2016-12-8 22:14
11253
有需求需要这部分资料 百度谷歌各种找 都不是很全 所以自己写吧

【原创】硬件信息获取系列--通过cpuid指令获取cpu的基本信息与扩展信息
【原创】硬件信息获取系列二--使用ATAPI获取硬盘信息


.h
typedef struct _EQUIPMENT_CPU {
char Constructor[100];//制造商
char Trademarks[100];//商标
char SerialNumber[100];//CPU序列号
}EQUIPMENT_CPU, *PEQUIPMENT_CPU;

union CpuFeaturesEcx {
ULONG32 all;
struct {
ULONG32 sse3 : 1; //! <[0]simd流技术扩展3(SSE3)
ULONG32 pclmulqdq : 1; //! <[1]PCLMULQDQ
ULONG32 dtes64 : 1; //! <[2]64位DS区域
ULONG32 monitor : 1; //! <[3]显示器/等
ULONG32 ds_cpl : 1; //! <[4]CPL合格的调试存储
ULONG32 vmx : 1; //! <[5]虚拟机技术
ULONG32 smx : 1; //! <[6]安全模式扩展
ULONG32 est : 1; //! <[7]增强型英特尔Speedstep技术
ULONG32 tm2 : 1; //! <[8]散热监控2
ULONG32 ssse3 : 1; //! <[9]附加simd流技术扩展3
ULONG32 cid : 1; //! <[10]L1上下文ID
ULONG32 sdbg : 1; //! <[11]IA32_DEBUG_INTERFACE MSR
ULONG32 fma : 1; //! <[12]使用YMM状态FMA扩展
ULONG32 cx16 : 1; //! <[13]CMPXCHG16B
ULONG32 xtpr : 1; //! <[14]xTPR更新控制
ULONG32 pdcm : 1; //! <[15]性能/调试能力MSR
ULONG32 reserved : 1; //! <[16]保留
ULONG32 pcid : 1; //! <[17]程序的上下文标识符
ULONG32 dca : 1; //! <[18]回迁从内存映射设备
ULONG32 sse4_1 : 1; //! <[19]SSE4.1
ULONG32 sse4_2 : 1; //! <[20]SSE4.2
ULONG32 x2_apic : 1; //! <[21]x2APIC功能
ULONG32 movbe : 1; //! <[22]MOVBE指令
ULONG32 popcnt : 1; //! <[23]POPCNT指令
ULONG32 reserved3 : 1; //! <[24]使用TSC期限一次性操作
ULONG32 aes : 1; //! <[25]AESNI指令
ULONG32 xsave : 1; //! <[26]XSAVE/XRSTOR功能
ULONG32 osxsave : 1; //! <[27]使XSETBV/XGETBV说明
ULONG32 avx : 1; //! <[28]AVX指令扩展
ULONG32 f16c : 1; //! <[29]16位浮点转换
ULONG32 rdrand : 1; //! <[30]RDRAND指令
ULONG32 not_used : 1; //! <[31]0(a.k.一。 HypervisorPresent)
} fields;
};

union CpuFeaturesEdx {
ULONG32 all;
struct {
ULONG32 fpu : 1; //! <[0]浮点单元的片上
ULONG32 vme : 1; //! <[1]虚拟8086模式增强
ULONG32 de : 1; //! <[2]调试扩展程序
ULONG32 pse : 1; //! <[3]页大小扩展
ULONG32 tsc : 1; //! <[4]时间戳计数器
ULONG32 msr : 1; //! <[5]RDMSR和WRMSR说明
ULONG32 mce : 1; //! <[7]机器检查异常
ULONG32 cx8 : 1; //! <[8]散热监控2
ULONG32 apic : 1; //! <[9]APIC片上
ULONG32 reserved1 : 1; //! <[10]保留
ULONG32 sep : 1; //! <[11]SYSENTER和SYSEXIT说明
ULONG32 mtrr : 1; //! <[12]内存范围寄存器
ULONG32 pge : 1; //! <[13]页全球位
ULONG32 mca : 1; //! <[14]机器检查架构
ULONG32 cmov : 1; //! <[15]有条件的移动指令
ULONG32 pat : 1; //! <[16]页属性表
ULONG32 pse36 : 1; //! <[17]36位页面大小扩展
ULONG32 psn : 1; //! <[18]处理器序列号
ULONG32 clfsh : 1; //! <[19]CLFLUSH指令
ULONG32 reserved2 : 1; //! <[20]保留
ULONG32 ds : 1; //! <[21]的调试存储
ULONG32 acpi : 1; //! <[22]TM和软件控制时钟
ULONG32 mmx : 1; //! <[23]英特尔MMX技术
ULONG32 fxsr : 1; //! <[24]FXSAVE和FXRSTOR说明
ULONG32 sse : 1; //! <[25]SSE
ULONG32 sse2 : 1; //! <[26]SSE2
ULONG32 ss : 1; //! <[27]自探听
ULONG32 htt : 1; //! <[28]保留的最大APIC id字段有效
ULONG32 tm : 1; //! <[29]散热监控
ULONG32 reserved3 : 1; //! <[30]保留
ULONG32 pbe : 1; //! <[31]挂起的分行符启用
} fields;
};




.cpp
bool dlgSystemInfo::GetCpuInfo()
{
PEQUIPMENT_CPU cpu = new EQUIPMENT_CPU;

{//制造商
char str[13] = { 0 };
unsigned int cpu_info[4] = {};
__cpuidex(reinterpret_cast<int *>(cpu_info), 0, 0);
memcpy_s(str, sizeof(str), &cpu_info[1], 4 * 3);
strcpy(cpu->Constructor, str);
}
{//商标
char str[49] = { 0 };
unsigned int cpu_info[4] = {};
for (DWORD i = 0; i < 3; i++) {
__cpuidex(reinterpret_cast<int *>(cpu_info), 0x80000002 + i, 0);
memcpy(str + i * 16, cpu_info, sizeof(cpu_info));
}
strcpy(cpu->Trademarks, str);
}
{//CPU序列号
char str[200] = { 0 };
unsigned int cpu_info[4] = {};
__cpuidex(reinterpret_cast<int *>(cpu_info), 1, 0);
sprintf_s(str, "%08X%08X", cpu_info[3], cpu_info[0]);
__cpuidex(reinterpret_cast<int *>(cpu_info), 3, 0);
sprintf_s(str, "%s%08X%08X", str, cpu_info[3], cpu_info[0]);
strcpy(cpu->SerialNumber, str);
}

unsigned int cpu_info[4] = {};
__cpuidex(reinterpret_cast<int *>(cpu_info), 1, 0);
CpuFeaturesEcx ecx = { static_cast<ULONG_PTR>(cpu_info[2]) };
CpuFeaturesEdx edx = { static_cast<ULONG_PTR>(cpu_info[3]) };

return true;
}



这样别人需要这些资料的时候就可以搜索到了

还有 看雪手册KSSD上的内容可以换掉了 也不全

[课程]Linux pwn 探索篇!

收藏
免费 2
支持
分享
最新回复 (10)
雪    币: 223
活跃值: (1555)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
呵呵,楼主是个热心肠,顶贴支持一下。
2016-12-9 00:02
0
雪    币: 0
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
关注此贴
2016-12-9 09:03
0
雪    币: 2882
活跃值: (1245)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yjd
4
支持分享
2016-12-9 09:17
0
雪    币: 933
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
非常不错 MARK一下 以后可以用
2016-12-20 08:54
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
mark
2016-12-20 17:45
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
mark
2016-12-22 09:13
0
雪    币: 0
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
关注此贴,楼主辛苦
2017-1-23 13:49
0
雪    币: 296
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
刚好最近在书店翻了明日科技的vc++开发实例大全,里面也有例子,好像是在最后一章
2017-1-23 15:06
0
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
不知道可不可以hook?如果可以的话那这个还是不能用来做注册码生成用
2017-1-23 15:09
0
雪    币: 284
活跃值: (250)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
11
NICE。非常给力
2017-1-23 16:24
0
游客
登录 | 注册 方可回帖
返回
//