C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■85317 / 4階層)  CPUタイプを判別する方法
□投稿者/ 魔界の仮面弁士 (1422回)-(2017/10/06(Fri) 12:18:40)
2017/10/06(Fri) 17:44:51 編集(投稿者)

No85314 (餓狼 さん) に返信
> https://dobon.net/vb/dotnet/system/is64bit.html
> 解決しました

自プロセスに対して判断する場合は、上記の手法が一般的ですね。

ちなみに、アセンブリ(EXE や DLL)から調査する場合は
 CorFlags WindowsApplication1.exe
 CorFlags Library1.dll
のようにして確認できます。


=== 以下蛇足 ===

【VS2012 以上に付属の CorFlags の場合】
PE = PE32+ および 32BITREQ = 0 および 32BITPREF = 0 → x64 ビルド
PE = PE32 および 32BITREQ = 1 および 32BITPREF = 0 → x86 ビルド
PE = PE32 および 32BITREQ = 0 および 32BITPREF = 1 → Any CPU (32 ビットの優先: On) ビルド
PE = PE32 および 32BITREQ = 0 および 32BITPREF = 0 → Any CPU (32 ビットの優先: Off) ビルド

【VS2010 以下に付属の CorFlags の場合】
PE = PE32+ および 32BIT = 0 → x64 ビルド
PE = PE32 および 32BIT = 1 → x86 ビルド
PE = PE32 および 32BIT = 0 → Any CPU ビルド


VS2012 以降で追加された "32 ビットの優先" フラグの状態を
VS2010 以下の CorFlags.exe で判定したい場合は、
"CorFlags" フィールドの値を確認してみてください。
たとえば 131075 (0x20003) が得られた場合には
32 ビットの優先 On な AnyCPU としてビルドされています。


ツールに頼らず、直接 PE ヘッダーを読み取る場合はこのあたり。

IMAGE_FILE_HEADER.Machine
 0x014c (IMAGE_FILE_MACHINE_I386) x86
 0x0200 (IMAGE_FILE_MACHINE_IA64) Intel Itanium
 0x8664 (IMAGE_FILE_MACHINE_AMD64) x64

IMAGE_OPTIONAL_HEADER32.Magic / IMAGE_NT_OPTIONAL_HDR64_MAGIC.Magic
 0x10b (IMAGE_NT_OPTIONAL_HDR32_MAGIC) PE32
 0x20b (IMAGE_NT_OPTIONAL_HDR64_MAGIC) PE32+


"32bit の優先" の方は、CLR ヘッダーから CorFlags を読むことになりそう。
(IMAGE_COR20_HEADER.Flags)
https://jstdev.wordpress.com/2014/02/16/clr-header/
https://qiita.com/katabamisan/items/ae94ff3b582dd42de44a

=== 追記 ===
以下、[corhdr.h] より。

0x00000001: COMIMAGE_FLAGS_ILONLY
0x00000002: COMIMAGE_FLAGS_32BITREQUIRED
0x00000004: COMIMAGE_FLAGS_IL_LIBRARY
0x00000008: COMIMAGE_FLAGS_STRONGNAMESIGNED
0x00000010: COMIMAGE_FLAGS_NATIVE_ENTRYPOINT
0x00010000: COMIMAGE_FLAGS_TRACKDEBUGDATA
0x00020000: COMIMAGE_FLAGS_32BITPREFERRED
解決済み
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[3]: CPUタイプを判別する方法 /餓狼 返信無し
 
上記関連ツリー

CPUタイプを判別する方法 / 餓狼 (17/10/06(Fri) 10:39) #85310
Re[1]: CPUタイプを判別する方法 / Jitta (17/10/06(Fri) 11:00) #85311
  └ Re[2]: CPUタイプを判別する方法 / 餓狼 (17/10/06(Fri) 11:14) #85312
    ├ Re[3]: CPUタイプを判別する方法 / 餓狼 (17/10/06(Fri) 11:19) #85314 解決済み
    │└ CPUタイプを判別する方法 / 魔界の仮面弁士 (17/10/06(Fri) 12:18) #85317 解決済み ←Now
    └ Re[3]: CPUタイプを判別する方法 / Hongliang (17/10/06(Fri) 11:19) #85313
      └ Re[4]: CPUタイプを判別する方法 / 餓狼 (17/10/12(Thu) 18:14) #85353
        ├ Re[5]: CPUタイプを判別する方法 / Azulean (17/10/12(Thu) 22:58) #85356
        └ Re[5]: CPUタイプを判別する方法 / 魔界の仮面弁士 (17/10/13(Fri) 09:43) #85360

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信