2009-07-20 12 views
6

64ビットまたは32ビットであることを検出する方法私が持っている時点で32ビットまたは64ビット所与のPEファイル(EXEまたはDLL)がIが所定の.dllまたは.exeファイルであるか否かを検出する必要が

1つの解決策:指定されたファイルからPEヘッダーを読み取り、そこから 'Machine'フィールドを取得します。

(仕様: "3.3 COFFはヘッダー(オブジェクトとイメージ)ファイル" Microsoft Portable Executable and Common Object File Format Specification(.docxのファイル)セクションで)

このフィールドには、約20までの値を取ることができます。それらのうち3つは、次のとおりです。

IMAGE_FILE_MACHINE_I386 (== 32bit) 

IMAGE_FILE_MACHINE_IA64 (== 64bit) 

IMAGE_FILE_MACHINE_AMD64 (== 64bit) 

私の質問:

1)「マシンのマッピングをbit化するためには正しいですか、私は何かを逃したのですか?その他の注意点はありますか?

2)32/64ビット数を検出する簡単な方法はありますか(おそらくPEフォーマットの特定のフィールドに気付かなかったか、または特別なシステム機能があります)。

+0

dup:http://stackoverflow.com/questions/971689/win32-api-to-tell-whether-a-given-binary-exe-or-dll-is-x86-x64-or-ia64/971715 #971715 –

+0

この他の質問はアーキテクチャについて質問していますが、これは語のサイズを尋ねています。 – Draemon

+0

文書は2017年の時点でv8からv11に更新されています。http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx –

答えて

15

GetBinaryType(...)戻り、64ビットWindowsベースのアプリケーション用の32ビットWindowsベースのアプリケーションと SCS_64BIT_BINARYためSCS_32BIT_BINARY

+0

これは残念ながらDLLを解析するときに0を返します。 – Benoit

+0

Pythonで作ったもの:import win32file; print win32file.GetBinaryType( "myfile.exe")。これは、32ビットのexeでは0を返し、64ビットのファイルでは6を返します。 –

関連する問題