2025-05-01

実行ファイルのアーキテクチャを調べる方法

ある日、Windows上で、実行ファイルがARMプロセッサ用のもの (ARM64) なのか、Intelプロセッサ用のもの (x64) なのかを調べる必要に迫られた。

macOSやLinuxならfileコマンドで簡単に調べられる。

macOSでhelloコマンドがどのプロセッサアーキテクチャ用か調べる例:

% file hello
hello: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64]
hello (for architecture x86_64):	Mach-O 64-bit executable x86_64
hello (for architecture arm64):	Mach-O 64-bit executable arm64

Linuxでhelloコマンドがどのプロセッサアーキテクチャ用か調べる例:

$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=hQzJMwMxb02f49rQ6g6B/3BF_ZZ5BPtbixKbreFsE/u3vXoCvI_vufilYlKBOW/6afpPIRP4FC4Tq7Lltoj, with debug_info, not stripped

標準的な状態のWindowsにはfileコマンドなんぞ無い。 Windows実行ファイル (.exe) が、どのアーキテクチャ用かを知るにはどうすればいいのじゃ?

プロ驚き屋さんオススメの生成AIや、Google先生に聞いてみると、dumpbinコマンドを使えとか、PowerShellのスクリプトを書けとか、割と面倒なことをいってくる。

もっと簡単な方法はないのか?

そういえば Git for Windows をインストールしていたぞ。 ひょっとしてfileコマンドが含まれているのでは? 試してみよう。

Git Bashでhello_*.exeコマンドがどのプロセッサアーキテクチャ用か調べる例:

$ file hello_arm64.exe
hello_arm64.exe: PE32+ executable for MS Windows 6.01 (console), ARM64, 13 sections

$ file hello_amd64.exe
hello_amd64.exe: PE32+ executable for MS Windows 6.01 (console), x86-64, 15 sections

いけるじゃん!

ということで、Git for Windows に含まれている Git Bash を開いてfileコマンドを実行すれば、Unix系OSと同じ要領で実行ファイルが対応してるアーキテクチャを調べられる。

0 件のコメント:

コメントを投稿