ある日、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 件のコメント:
コメントを投稿