0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

よく使う Mex のコマンド

Posted at

Mex

Mex は、WinDbg の機能を拡張するツールで、Windows のクラッシュダンプ解析やデバッグを効率化できます。Mex は、デバッグ作業をより簡単にし、分析の精度と速度を向上させるための重要なツールになります。

Mex の導入方法は、こちらの投稿を確認してみてください。

よく使うコマンド(解析系)

カーネルモードのメモリダンプ解析でよく使用するコマンドです。そのまま使用するコマンドとオプションやアドレスを指定するコマンドがあります。オプションやアドレスを指定するコマンドは、使用例を記載しておきます。なお、アドレスは適当なので、実際に解析する際は、アドレスを変更してください。

1. !mex.dumpinfo

メモリダンプに関する詳細情報を表示します。どのようなメモリダンプなのか確認するのに役立ちます。

2. !mex.crash

クラッシュ解析のためにメモリダンプから特定のクラッシュに関する情報を表示するコマンドです。ブルースクリーンが発生した際に出力されたダンプファイルには、まずこれを実行します。

3. !mex.running

CPU で実行中のスレッドに関する情報を表示できます。

4. !mex.ready

実行準備が整っているスレッドのリストを取得するためのコマンドです。ready 状態のスレッドが多数ある場合には、CPU の処理が追いついていないか、なんらかの処理が CPU を占有し続けている可能性が考えられます。

5. !mex.tasklist

システム内のすべてのプロセスとその関連情報を一覧表示します。システム全体の状態把握に便利です。かなりオプションの種類があるので、!mex.tasklist -? で状況に応じて使えそうなオプションを探してみてください。

6. !mex.p

プロセス情報を取得するコマンドで、プロセス ID やメモリ使用状況などを表示します。確認したいプロセスのアドレスを指定して実行します。

使用例
!mex.p ffffd45689abcd80

7. !mex.t

特定のスレッドに関する詳細情報を表示できます。確認したいスレッドのアドレスを指定して実行します。

使用例
!mex.t ffffd45689abcd80

8. !mex.listthreads

指定したプロセスが実行しているすべてのスレッドのリストを取得します。各スレッドの状態などを確認できます。確認したいプロセスのアドレスを指定して実行します。

使用例
!mex.listthreads ffffd45689abcd80

9. !mex.UniqueStacks

ユニークなスタックトレースをまとめて表示します。似たようなスレッドやスタックトレースをグループ化して、メモリダンプ解析の効率を上げるために使用されます。

使用例
#ユーザーモード、カーネルモードすべてのスタックが一致するスレッドをまとめて表示
!mex.UniqueStacks -a 
#カーネルモードのみ一致するスレッドをまとめて表示
!mex.UniqueStacks -k 
#CPU で実行されている一致するスレッドをまとめて表示
!mex.UniqueStacks -cpu

10. !mex.eresource

ERESOURCE(排他制御のためのオブジェクト)の状態を表示します。デッドロックや競合状態の解析に役立つ情報を表示できます。

11. !mex.WrLpcReply

LPC(ローカルプロシージャコール)の応答待ちになっているスレッドを表示するコマンドです。長時間 LPC 待ちしているスレッドがないか確認するときに使用します。

12. !mex.mreg

レジストリの情報を表示するコマンドで、レジストリの値を確認したいときに使用します。

13. !mex.mods

ロードされているモジュール(DLLや実行ファイル)に関する情報をリストします。どのモジュールがメモリにロードされているかを確認する際に使用されます。

14. !mex.tag

プールタグに関連する情報を取得するコマンドで、メモリプールの使用状況を特定する際に役立ちます。

使用例
!mex.tag -a ntfs

よく使うコマンド(ユーティリティ系)

ユーティリティ系のコマンドは解析系のコマンドを組み合わせて使用します。使用方法は、ほぼ Linux のコマンドと一緒です。

1. !mex.grep

出力内容をフィルタリングするために使用します。正規表現に基づいて、特定のパターンを含む行だけを表示させることができます。使い方は !mex.grep -? で確認してみてください。

2. !mex.cut

出力の指定された範囲や部分を切り取るためのコマンドです。必要な部分だけを表示したい場合に使用します。使い方は !mex.cut -? で確認してみてください。

3. !mex.ForEachLine

それぞれの行に対して、指定したコマンドを実行するためのループ処理機能を提供します。大量のデータセットを効率的に処理する際に役立ちます。使い方は !mex.ForEachLine -? で確認してみてください。

活用法

ユーティリティ系のコマンドを使用することにより、解析を少し自動化できます。次の例では、ffffd45689abcd80 のアドレスをもつプロセスのすべてのスレッドの詳細情報を表示できます。

使用例
!mex.ForEachLine -x "!mex.t @#Line" !mex.grep ffff !mex.cut -f 3 !mex.listthreads ffffd45689abcd80 

さいごに

Mex のコマンドは、紹介したもの以外にもたくさんあり、長いコマンドには、短縮形が用意されていたりします。すべて書くのは大変なので、!mex.help -all を実行して、ヘルプからいろいろ確認してみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?