【发布时间】: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 供应商字符串?
【问题讨论】: