pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


Windows向けのEXEやDLLが、32bitなのか64bitなのかを調べる方法をいくつか考えてみる

アプリケーションとDLLのビット数が合わないと動かないので、方法を把握したいと思った

あるツールのビット数と、そのツールが使うDLLのビット数が合っていないことに気づかず、意外に手間取ったので、ビット数の確認方法を考察してみることにした。

とりあえず見つけた方法はこんなところ。

  • dumpbinコマンドで見る
  • バイナリを直接見る
  • fileコマンドで見る

この中では、自分の環境では file コマンドでチェックするのが最もよさげ。

dumpbin コマンドで見る

Visual Studio に含まれる dumpbin.exe で見れるらしい。

こんなふうに実行すると、x64 or x86 という情報が出るらしい。

dumpbin.exe /headers ファイル名 | findstr machine

でも、自分の環境には Visual Studio を入れていないので、この方法は取れない。

直接見る

0x80 前後に以下のようなデータの並びを探せばよいそうです。

50 45 00 00 4C 01 = 32bit
50 45 00 00 64 86 = 64bit

うん、わかった。でもちょっとめんどくさい。

file コマンドで見る

macOS, Ubuntu, CentOS などに含まれる file コマンドを使えば、こんなふうに確認できます。

EXEはこんなふうに。

$ file System32/net.exe SysWOW64/net.exe
System32/net.exe: PE32+ executable (console) x86-64, for MS Windows
SysWOW64/net.exe: PE32 executable (console) Intel 80386, for MS Windows

DLLも、こんなふうに。

$ file System32/winusb.dll SysWOW64/winusb.dll
System32/winusb.dll: PE32+ executable (DLL) (console) x86-64, for MS Windows
SysWOW64/winusb.dll: PE32 executable (DLL) (console) Intel 80386, for MS Windows

自分のWindows 10環境にはWSLを入れているし、MacBook もあるし、だったら、file コマンドが一番ラクだということがわかりました。