这条线在Python中意味着什么?

时间:2009-06-12 10:57:21

标签: c# python windows cpu cpuid

此代码尝试检索哪些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程序员并且知道这段代码在做什么,那对我来说将是一个很好的帮助。

2 个答案:

答案 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的值是安全的。