仮想アドレスによるメモリへのアクセス
メモリ・アドレスやアドレス範囲にアクセスするには、いくつかのコマンドを使うことができます。 Visual Studio* と WinDbg には、メモリの表示と編集に使用できるユーザー・インター フェース・エレメント(コマンドも含む)が用意されています。 詳細については、WinDbg(Classic)でのメモリの表示と編集を参照してください。
以下のコマンドは、様々なフォーマットでメモリを読み書きできます。 これらのフォーマットには、16 進バイト、ワード(ワード、ダブルワード、4 ワード)、整数(短整数、長整数、4 進整数、符号なし整数)、浮動小数点数(10 バイト、16 バイト、32 バイト、64 バイトの実数)、ASCII 文字が含まれます。
d*(Display Memory)コマンドは、指定したメモリ・アドレスまたは範囲の内容を表示します。
e* (Enter Values) コマンドは、指定されたメモリ・アドレスに値を書き込む。
以下のコマンドを使用すると、より特殊なデータ型を扱うことができます:
dt(Display Type)コマンドは、さまざまなデータ型を検索し、デバッグ対象のアプリケーションによって作成されたデータ構造を表示します。 このコマンドは汎用性が高く、多くのバリエーションとオプションがあります。
ds, dS (Display String)コマンドは、STRING、ANSI_STRING、またはUNICODE_STRINGデータ構造を表示します。
dl (Display Linked List) コマンドはリンクリストをトレースして表示します。
d*s(Display Words and Symbols)コマンドは、シンボル情報を含む可能性のあるダブル・ワードまたはクワッド・ワードを検出し、データとシンボル情報を表示する。
address extensionコマンドは、特定のアドレスにあるメモリのプロパティに関する情報を表示します。
以下のコマンドを使用して、メモリ範囲を操作できます:
m (Move Memory) コマンドは、あるメモリ範囲の内容を別のメモリ範囲に移動します。
f (Fill Memory) コマンドは、メモリ範囲にパターンを書き込み、その範囲が一杯になるまで繰り返します。
c (Compare Memory) コマンドは、2 つのメモリ範囲の内容を比較します。
s (Search Memory) コマンドは、メモリ範囲内で指定されたパターンを検索したり、メモリ範囲内に存在する ASCII または Unicode 文字を検索したりします。
.holdmem(Hold and Compare Memory)コマンドは、あるメモリ範囲と別のメモリ範囲を比較する。
ほとんどの場合、これらのコマンドは現在の基数でパラメータを解釈する。 したがって、現在の基数が16でない場合は、16進数アドレスの前に0xを追加する必要がある。 しかし、これらのコマンドの表示出力は、現在の基数に関係なく、通常16進数形式である。 (出力の詳細については、各コマンドのトピックを参照のこと)。Memoryウィンドウでは、整数と実数は10進数形式で表示され、その他の形式は16進数形式で表示される。
デフォルトの基数を変更するには、n (Set Number Base)コマンドを使用する。 ある基数から別の基数に素早く変換するには、を使用しますか? (Evaluate Expression)コマンドまたは .formats (Show Number Formats)コマンドを使用します。
ユーザー・モードのデバッグを実行している場合、仮想アドレスの意味は現在のプロセスによって決まります。 カーネルモードのデバッグを実行している場合、仮想アドレスの意味はデバッガーによって制御できます。 詳細については、「プロセス・コンテキスト」を参照してください。