次の方法で共有


!vtop

!Vtop拡張機能は、仮想アドレスを対応する物理アドレスに変換し、その他のページテーブルとページディレクトリ情報を表示します。

構文

!vtop PFN VirtualAddress 
!vtop 0 VirtualAddress 

パラメーター

DirBase
プロセスのディレクトリベースを指定します。 各プロセスには、独自の仮想アドレス空間があります。 !process拡張を使用して、プロセスのディレクトリベースを決定する。

PFN
プロセスのディレクトリベースのページフレーム番号 (PFN) を指定します。

0
アドレス変換のために、!vtopが現在のプロセスコンテキストを使うようにする。

VirtualAddress
ページが必要な仮想アドレスを指定します。

DLL

Kdexts.dll

追加情報

これらの結果を実現するその他の方法については、 「仮想アドレスを物理アドレスに変換する」 を参照してください。 !ptovも参照してください。 ページテーブルとページディレクトリの詳細については、 「Microsoft Windowsの内部構造」 を参照してください。これは、Mark RussinovichとDavid Solomonによるものです。

解説

このコマンドを使用するには、まず!process拡張機能を使用して、プロセスのディレクトリベースを決定します。 このディレクトリベースのページフレーム番号 (PFN) は、末尾の3つの16進ゼロ(言い換えると、12ビットの数値を右シフトすることによって)を削除することによって確認できます。

例を次に示します。

kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
....
PROCESS ff779190  SessionId: 0  Cid: 04fc    Peb: 7ffdf000  ParentCid: 0394
 DirBase: 098fd000  ObjectTable: e1646b30  TableSize:   8.
    Image: MyApp.exe

ディレクトリベースが0x098FD000であるため、そのPFNは0x098FDです。

kd> !vtop 98fd 12f980
Pdi 0 Pti 12f
0012f980 09de9000 pfn(09de9)

末尾の3つのゼロが省略可能である方法に注意してください。 !Vtop拡張機能には、ページディレクトリインデックス (PDI) 、ページテーブルインデックス (PTI) 、最初に入力した仮想アドレス、物理ページの先頭の物理アドレス、およびページフレーム番号 (PFN) のページテーブルエントリ (PTE) が表示されます。

仮想アドレス0x0012F980を物理アドレスに変換する場合は、最後の3つの16進数 (0x980) を取得し、ページ (0x09DE9000) の先頭の物理アドレスに追加するだけです。 これにより、物理アドレス0x09DE9980が提供されます。

3つのゼロを削除し、完全なディレクトリベースを渡すことを忘れた場合!vtop PFNではなく、結果は通常正しいです。 これは、!vtopがPFNにするには大きすぎる数値を受け取るときに、右シフト12ビットし、代わりにその数値を使用するためです。

kd> !vtop 98fd 12f980
Pdi 0 Pti 12f
0012f980 09de9000 pfn(09de9)

kd> !vtop 98fd000 12f980
Pdi 0 Pti 12f
0012f980 09de9000 pfn(09de9)

ただし、いくつかのディレクトリベースの値はこの方法で変換されないため、常にPFNを使用することをお勧めします。