주요 콘텐츠로 건너뛰기 이 브라우저는 더 이상 지원되지 않습니다. 최신 기능, 보안 업데이트, 기술 지원을 이용하려면 Microsoft Edge로 업그레이드하세요. 가상 주소를 실제 주소로 변환
이 문서의 내용대부분의 디버거 명령은 실제 주소가 아닌 가상 주소를 입력 및 출력으로 사용합니다. 그러나 실제 주소를 사용하는 것이 유용할 수 있는 경우가 있습니다. 가상 주소를 실제 주소로 변환하는 방법에는 !vtop 확장을 사용하고 !pte 확장을 사용하는 두 가지 방법이 있습니다. Windows 가상 주소에 대한 개요는 가상 주소 공간을 참조하세요. !vtop을 사용하여 주소 변환MyApp.exe 프로세스가 실행 중인 대상 컴퓨터를 디버깅하고 가상 주소 0x0012F980 조사하려는 경우를 가정해 보겠습니다. 다음은 !vtop 확장과 함께 해당 물리적 주소를 결정하는 데 사용하는 절차입니다. !vtop을 사용하여 가상 주소를 실제 주소로 변환
각 주소에 메모리를 표시하여 이 계산이 올바르게 수행되었는지 확인할 수 있습니다. !d\* 확장은 지정된 실제 주소에 메모리를 표시합니다.
d*(메모리 표시) 명령은 가상 주소를 인수로 사용합니다.
결과는 동일하기 때문에 실제 주소 0x09DE9980 실제로 가상 주소 0x0012F980 해당한다는 것을 나타냅니다. !pte를 사용하여 주소 변환다시 MyApp.exe 프로세스에 속하는 가상 주소 0x0012F980 조사하고 있다고 가정합니다. 다음은 !pte 확장과 함께 해당 실제 주소를 결정하는 데 사용하는 절차입니다. !pte를 사용하여 가상 주소를 실제 주소로 변환
이는 이전 메서드에서 얻은 것과 동일한 결과입니다. 직접 주소 변환!ptov 및 pte 확장은 가상 주소를 실제 주소로 변환하는 가장 빠른 방법을 제공하지만 이 변환도 수동으로 수행할 수 있습니다. 이 프로세스에 대한 설명은 가상 메모리 아키텍처의 세부 정보 중 일부에 대해 설명합니다. 메모리 구조는 프로세서 및 하드웨어 구성에 따라 크기가 달라집니다. 이 예제는 PAE(물리적 주소 확장)를 사용하도록 설정하지 않은 x86 시스템에서 가져옵니다. 0x0012F980 다시 가상 주소로 사용하면 먼저 직접 또는 .formats(숫자 형식 표시) 명령을 사용하여 이진 주소로 변환해야 합니다.
이 가상 주소는 세 필드의 조합입니다. 비트 0~11은 바이트 인덱스입니다. 비트 12~21은 페이지 테이블 인덱스입니다. 비트 22~31은 페이지 디렉터리 인덱스입니다. 필드를 구분하면 다음이 있습니다.
그러면 가상 주소의 세 부분이 노출됩니다.
그런 다음 시스템에 대한 세 가지 추가 정보가 필요합니다.
이 데이터를 사용하여 PTE 자체의 주소를 계산할 수 있습니다.
PTE의 주소입니다. PTE는 32비트 DWORD입니다. 해당 내용을 검사합니다.
이 PTE에는 0x09DE9067 값이 있습니다. 다음 두 필드로 구성됩니다.
실제 페이지의 첫 번째 실제 주소는 PFN에 0x1000 곱한 것입니다(왼쪽으로 12비트 이동). 바이트 인덱스는 이 페이지의 오프셋입니다. 따라서 찾으려는 실제 주소는 0x09DE9000 + 0x980 = 0x09DE9980. 이는 이전 메서드에서 얻은 것과 동일한 결과입니다. |