Que signifie cette ligne en Python?

Les informations sur le processeur que ce code tente de récupérer. Ce code fait partie d’un package plus grand. Je ne suis pas un programmeur Python et je veux convertir ce code en C #.

from ctypes import c_uint, create_ssortingng_buffer, CFUNCTYPE, addressof CPUID = create_ssortingng_buffer("\x53\x31\xc0\x40\x0f\xa2\x5b\xc3") cpuinfo = CFUNCTYPE(c_uint)(addressof(CPUID)) print cpuinfo() 

Si vous êtes un programmeur Python et que vous savez ce que fait ce code, ce sera une grande aide pour moi.

Il exécute le code machine suivant:

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

Fondamentalement, il appelle l’instruction CPUID de la CPU afin d’obtenir des informations sur le CPU. Depuis EAX = 1, il reçoit les informations sur le processeur et les bits de fonctionnalité. Le nombre entier de 32 bits résultant est alors affiché à l’écran, voir l’article de Wikipedia ou cette page pour décoder le résultat.

EDIT : Puisque c’est ce que vous recherchez, voici un excellent article sur l’ invocation de CPUID dans un environnement .NET / C # (en quelque sorte, avec P / Invoke)

En plus de la réponse du Dr Jokepu . Le code python utilisant les modules ctypes implémente le code C suivant (/ 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. 

Notez également que cela ne renvoie que les informations dans EAX et que le code x86 aurait probablement dû pousser / afficher les valeurs d’ECX et d’EDX pour être sûr.