Co oznacza ta linia w Pythonie?

Jakie informacje procesora ten kod próbuje odzyskać. Ten kod jest częścią większego pakietu. Nie jestem programistą Pythona i chcę przekonwertować ten kod do 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()

Jeśli jesteś programistą Pythona i wiesz, co robi ten kod, będzie to dla mnie bardzo pomocne.

Author: anatoly techtonik, 2009-06-12

2 answers

Wykonuje następujący kod maszynowy:

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

W zasadzie wywołuje CPUID instrukcję procesora w celu uzyskania informacji o procesorze. Od EAX = 1 pobiera informacje o procesorze i bitach funkcji. Wynik 32-bitowa liczba całkowita jest następnie wyświetlana na ekranie, zobacz artykuł w Wikipedii lub ta strona aby dekodować wynik.

EDIT: ponieważ tego właśnie szukasz, Oto doskonały artykuł o wywoływaniu CPUID w. Net/C# environment (sort of, with P/Invoke)

 24
Author: Tamas Czinege,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-12 11:24:25

Oprócz odpowiedzi DrJokepu . Kod Pythona używa modułów ctypes implementujących następujący kod 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.

Zauważ również, że zwraca to tylko informacje w EAX i Kod x86 powinien prawdopodobnie również wypchnąć / popped wartości ECX i EDX, aby być bezpiecznym.

 6
Author: mweerden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:51:02