此代码尝试检索哪些CPU信息。此代码是更大包的一部分。我不是Python程序员,我想将此代码转换为C#。
from ctypes import c_uint, create_string_buffer, CFUNCTYPE, addressof
CPUID = create_string_buffer("\x53\x31\xc0\x40\x0f\xa2\x5b\xc3")
cpuinfo = CFUNCTYPE(c_uint)(addressof(CPUID))
print cpuinfo()
如果您是Python程序员并且知道这段代码在做什么,那对我来说将是一个很好的帮助。
答案 0 :(得分:24)
执行以下机器代码:
push bx
xor ax, ax
inc ax
cpuid
pop bx
retn
基本上它调用CPU的CPUID指令以获取有关CPU的信息。由于EAX = 1,它获得处理器信息和特征位。然后,屏幕上会显示结果32位整数,请参阅维基百科文章或this page以解码结果。
编辑:既然这就是你要找的东西,here's an excellent article about在.NET / C#环境中调用CPUID(有点P / Invoke)
答案 1 :(得分:6)
除了DrJokepu的回答。 python代码使用ctypes
模块实现以下C代码(/ hack):
char *CPUID = "\x53\x31\xc0\x40\x0f\xa2\x5b\xc3"; // x86 code
unsigned int (*cpuid)() = (unsigned int (*)()) CPUID; // CPUID points to first instruction in above code; cast it to a function pointer
printf("%u",cpuid()); // calling cpuid() effectively executes the x86 code.
另请注意,这只返回EAX中的信息,x86代码可能也应该推送/弹出ECX和EDX的值是安全的。