如何解释片上系统 CPU 供应商字符串?
Posted
技术标签:
【中文标题】如何解释片上系统 CPU 供应商字符串?【英文标题】:How to interpret System-On-Chip cpu vendor string? 【发布时间】:2019-09-10 05:28:25 【问题描述】:英特尔手册定义了cpuid
叶0x17
负责cpu 供应商字符串。输出取决于ecx
中的值。所以根据注释:
叶 17H 输出取决于
ECX
中的初始值。 SOC 供应商 Brand String 是一个 UTF-8 编码的字符串,用尾随字节填充 00H.完整的 SOC Vendor Brand String 由 以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
cpuid
cpuid
指令的结果如下:
(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 供应商字符串?
【问题讨论】:
【参考方案1】:您的处理器不支持 cpuid 叶 0x17。使用 cpuid 叶 0 找出最大支持的 cpuid 叶(在 eax 中返回)。例如,在我的系统上,最大 cpuid 叶为 0x0f。当 cpuid 与大于最大支持值的叶值一起使用时,处理器会从最大支持值返回结果,这就是为什么您会得到看似垃圾值的原因。 (如果您尝试使用 cpuid 叶 0x16,您将看到您获得与使用 0x17 完全相同的返回值。)
【讨论】:
没错。在我的 CPU 上,最大值原来是0x16
。以上是关于如何解释片上系统 CPU 供应商字符串?的主要内容,如果未能解决你的问题,请参考以下文章