다음을 통해 공유


!vtop

!vtop 확장은 가상 주소를 해당 실제 주소로 변환하고 다른 페이지 테이블 및 페이지 디렉터리 정보를 표시합니다.

구문

!vtop PFN VirtualAddress 
!vtop 0 VirtualAddress 

매개 변수

DirBase
프로세스의 디렉터리 베이스를 지정합니다. 각 프로세스에는 고유한 가상 주소 공간이 있습니다. !process 확장을 사용하여 프로세스의 디렉터리 기반을 확인합니다.

PFN
프로세스에 대한 디렉터리 베이스의 PFN(페이지 프레임 번호)을 지정합니다.

0
!vtop이 현재 프로세스 컨텍스트를 주소 변환에 사용하도록 합니다.

VirtualAddress
페이지가 필요한 가상 주소를 지정합니다.

DLL

Kdexts.dll

추가 정보

이러한 결과를 달성하는 다른 방법은 가상 주소를 실제 주소로 변환을 참조 하세요. !ptov도 참조하세요. 페이지 테이블 및 페이지 디렉터리에 대한 자세한 내용은 Mark Russinovich 및 David Solomon의 Microsoft Windows Internals를 참조하세요.

설명

이 명령을 사용하려면 먼저 !process 확장을 사용하여 프로세스의 디렉터리 기반을 확인합니다. 이 디렉터리 베이스의 PFN(페이지 프레임 번호)은 후행 16진수 0(즉, 숫자 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)

후행 0은 선택 사항입니다. !vtop 확장은 PDI(페이지 디렉터리 인덱스), 페이지 테이블 인덱스(PTI), 원래 입력한 가상 주소, 실제 페이지의 시작 부분의 실제 주소 및 PTE(페이지 테이블 항목)의 PFN(페이지 프레임 번호)을 표시합니다.

가상 주소 0x0012F980 실제 주소로 변환하려면 마지막 3자리 16진수(0x980)를 가져와서 페이지 시작의 실제 주소(0x09DE9000)에 추가하면 됩니다. 이렇게 하면 실제 주소 0x09DE9980.

세 개의 0을 제거하고 PFN 대신 !vtop전체 디렉터리 베이스를 전달하는 것을 잊어버린 경우 결과는 일반적으로 정확합니다. 이는 !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을 사용하는 것이 좋습니다.