c # - Hvad betyder denne linje i Python?

Indlæg af Hanne Mølgaard Plasc

Problem



Hvilke CPU-oplysninger denne kode forsøger at hente. Denne kode er en del af en større pakke. Jeg er ikke en Python-programmerer, og jeg vil konvertere denne kode til C #.


from ctypes import c\_uint, create\_string\_buffer, CFUNCTYPE, addressof
CPUID = create\_string\_buffer("x53x31xc0x40x0fxa2x5bxc3")
cpuinfo = CFUNCTYPE(c\_uint)(addressof(CPUID))
print cpuinfo()


Hvis du er en Python programmerer og ved, hvad denne kode gør, vil det være en stor hjælp for mig.

Bedste reference


Den udfører følgende maskinkode:


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


Grundlæggende kalder det CPUID instruktion fra CPU'en for at få oplysninger om CPU'en. Siden EAX=1 får processoren info og feature bits. Resultatet 32-biters heltal vises derefter på skærmen, se wikipedia-artiklen eller denne side for at afkode resultatet. [5] [6]


EDIT : Siden det er det du leder efter, er her en glimrende artikel om at påberåbe CPUID i et .NET/C # miljø (sort med P/Invoke) [7]

Andre referencer 1


Ud over DrJokepu's svar. Python-koden bruger ctypes modulerne gennemfører følgende C-kode (/hack):


char *CPUID = "x53x31xc0x40x0fxa2x5bxc3"; // 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.


Bemærk også, at dette kun returnerer oplysningerne i EAX, og x86-koden skulle sandsynligvis også have skubbet/poppet værdierne ECX og EDX for at være sikre.