英特尔手册定义了cpuid叶0x17负责cpu供应商字符串。输出取决于ecx中的值。因此,根据注释:
叶片17H输出取决于
ECX中的初始值。SOC供应商品牌字符串是一个UTF-8编码的字符串,由00H.The的尾随字节填充,完整的SOC供应商字符串是通过EAX:EBX:ECX:EDX的升序连接和从亚叶1片段到亚叶3的连接来构造的。
我编写了以下程序集,并期望得到一些合理的字符串:
;Set the System-On-Chip value to eax
mov eax, 0x17
;Set the first subleaf in ecx
mov ecx, 0x01
cpuidcpuid指令的结果如下:
(gdb) p/x $eax
$8 = 0x7d0
(gdb) p/x $ebx
$9 = 0xfa0
(gdb) p/x $ecx
$10 = 0x64
(gdb) p/x $edx
$11 = 0x0简单地连接寄存器内容(丢弃尾随的0x00字节)不会产生可读的结果:
$1 = 0x7fffffffdea0 "d\240\017\320\a"问题:如何解释SOC供应商字符串?
发布于 2019-09-10 06:26:54
您的处理器不支持cpuid叶子0x17。使用cpuid叶0查找最大支持的cpuid叶(在eax中返回)。例如,在我的系统中,最大的cpuid叶是0x0f。当使用cpuid时,叶值大于最大支持值时,处理器将返回最大支持值的结果,这就是为什么要获得看起来是垃圾值的结果。(如果您尝试cpuidlev0x16,您将看到得到与0x17完全相同的返回值。)
https://stackoverflow.com/questions/57864505
复制相似问题