tmytのらくがき

個人の日記レベルです

プロセスのことが気になって夜も眠れないのでツールを書いた

TL;DR

  • Windows 10 on ARMで動いているプロセスがi386なのか、ARM32なのか、ARM64なのか気になって夜も眠れないのでツールを書きました。
  • GitHubにあります。

夜も眠れない

Windows 10 on ARMは、i386、ARM32、ARM64のPEが実行できる、とても愉快なOSだそうです。確かに、バイナリを眺めているとARM32とかi386の実行ファイルが紛れ込んでいるのが確認できます。

でも、タスクマネージャからはそのプロセスがターゲットにしてるCPUアーキテクチャが確認できません。確認できるのは32bit or 64bitのみ。

f:id:tmyt:20190401120237p:plain

僕が知りたいのはビット数じゃなくて、CPUアーキテクチャなんです。気になって夜も眠れなくなってきました。

確認方法

IsWow64Process2 という今欲しかったものが得られるAPIがあります。呼びましょう。

BOOL IsWow64Process2(
  HANDLE hProcess,
  USHORT *pProcessMachine,
  USHORT *pNativeMachine
);

これはプロセスのハンドル*1を渡すと、pProcessMachineにプロセスが何のCPU向けのバイナリなのかを返してくれます。このとき、実行環境のネイティブバイナリの場合は IMAGE_FILE_MACHINE_UNKNOWN が入っているので、WOW64で動いているのかそうでないのかがわかります。

ソースとバイナリ

これを全プロセスに対してチェックして、リストにするような感じに仕立てておきました。

f:id:tmyt:20190401120728p:plain

ソースとバイナリはGitHubにあります。

github.com

*1:OpenProcessの引数に"PROCESS_QUERY_INFORMATION"か"PROCESS_QUERY_LIMITED_INFORMATION"が必要です