9

このコードが取得しようとしているCPU情報。このコードは、より大きなパッケージの一部です。私はPythonプログラマーではないので、このコードを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()

あなたがPythonプログラマーであり、このコードが何をしているのかを知っているなら、それは私にとって大きな助けになるでしょう。

4

2 に答える 2

24

次のマシンコードを実行します。

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

基本的には、CPU に関する情報を取得するために、CPU のCPUID命令を呼び出します。EAX=1 なので、プロセッサ情報と機能ビットを取得します。結果の 32 ビット整数が画面に表示されます。ウィキペディアの記事またはこのページを参照して、結果をデコードしてください。

編集:それがあなたが探しているものなので、.NET/C# 環境での CPUID の呼び出しに関する優れた記事を次に示します (一種の P/Invoke を使用)。

于 2009-06-12T11:12:23.347 に答える
6

DrJokepuの回答に加えて。Python コードはctypes、次の 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.

また、これはEAXの情報のみを返すことに注意してください.x86コードは、安全のためにECXとEDXの値をプッシュ/ポップする必要があります。

于 2009-06-12T11:33:40.787 に答える