2009-06-12 2 views
9

Информация о CPU, которую этот код пытается извлечь. Этот код является частью более крупного пакета. Я не программист на Python, и я хочу преобразовать этот код в C#.Что означает эта линия в Python?

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

выглядит как вызов функции жесткого вызова, платформа, информация о пакете и т. Д., Может помочь в ответе –

+0

также 3-я строка должна быть cpuinfo = CFUNCTYPE (c_uint) (addressof (CPUID)) –

+0

Отменить изменение. – VVS

ответ

24

Он выполняет следующий машинный код:

push bx 
xor ax, ax 
inc ax 
cpuid 
pop bx 
retn 

В основном это вызывает CPUID инструкции процессора, чтобы получить информацию о процессоре. Поскольку EAX = 1, он получает информацию о процессоре и биты функций. После этого на экране отображается 32-битное целое число, см. Статью wikipedia или this page для декодирования результата.

EDIT: Так что это то, что вы ищете, here's an excellent article about применение CPUID в среде .NET/C# (вид с P/Invoke)

+1

Черт! Я пришел к такому же выводу, что и для гекса. http://www.cs.helsinki.fi/u/vahakang/ineptkey.pyw и http://en.wikipedia.org/wiki/CPUID дали мне подсказки. – VVS

+2

Возможно, вы предпочитаете использовать WMI для получения такой информации, а не для запуска исходного машинного языка. Windows делает хрюканье для вас и обеспечивает гораздо больше, чем просто CPUID. – paxdiablo

+1

Pax: Очень верно. –

6

В дополнение к DrJokepu «s ответ. Код Python использует ctypes модулей действительно реализовать следующий код C (/ хак):

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 должны быть безопасными.

+0

Да, я не нахожусь дома на Python, поэтому я только что догадался о части Python. –