2009-06-12 13 views
9

Jakie informacje o procesorze próbuje pobrać ten kod. Ten kod jest częścią większego pakietu. Nie jestem programistą w języku Python i chcę przekonwertować ten kod na język C#.Co oznacza ta linia w Pythonie?

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() 

Jeśli jesteś programistą Python i wie, co ten kod robi, będzie to wielka pomoc dla mnie.

+0

wygląda jak zakodowane na stałe wywołanie funkcji, platforma, szczegóły pakietu itp. Może pomóc w odpowiadaniu na –

+0

również trzecią linią powinna być cpuinfo = CFUNCTYPE (c_uint) (addressof (CPUID)) –

+0

Cofnij zmianę. – VVS

Odpowiedz

24

Wykonuje następujące kodu maszynowego:

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

Zasadniczo wywołuje CPUID instrukcji CPU w celu uzyskania informacji na temat procesora. Od EAX = 1 pobiera informacje o procesorze i bitach operacji. Wynik 32-bitowa liczba całkowita jest następnie wyświetlany na ekranie, patrz artykuł wikipedia lub this page, aby dekodować wynik.

EDIT: Ponieważ to co szukasz, here's an excellent article about powołując CPUID w środowisku .NET #/C (rodzaj, z P/Invoke)

+1

Cholera :) Doszedłem do tego samego wniosku, szukając w Google wartości heksadecymalnej. http://www.cs.helsinki.fi/u/vahakang/ineptkey.pyw i http://en.wikipedia.org/wiki/CPUID dały mi wskazówki. – VVS

+2

Być może rzeczywiście wolisz korzystać z WMI, aby uzyskać ten rodzaj informacji, zamiast próbować uruchomić surowy język komputera. Windows robi pomruk dla ciebie i dostarcza o wiele więcej niż tylko CPUID. – paxdiablo

+1

Pax: Bardzo prawdziwe. –

6

Oprócz DrJokepu „s odpowiedź. Kod Python używa modułów ctypes należy wdrożyć następujący kod C (/ technikę):

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. 

Należy również zauważyć, że to tylko zwraca informacje w EAX i kod x86 prawdopodobnie powinien również popchnął/pojawiło wartości ECX i EDX są bezpieczne.

+0

Tak, nie jestem naprawdę w domu w Pythonie, więc właśnie odgadłem część Pythona. –