.context(사용자 모드 주소 컨텍스트 설정)

.context 명령은 사용자 모드 주소 컨텍스트에 사용할 프로세스의 페이지 디렉터리를 지정하거나 현재 사용자 모드 주소 컨텍스트를 표시합니다.

.context [PageDirectoryBase]

매개 변수

PageDirectoryBase
원하는 프로세스의 페이지 디렉터리에 대한 기본 주소를 지정합니다. 사용자 모드 주소 컨텍스트가 이 페이지 디렉터리로 설정됩니다. PageDirectoryBase가 0이면 사용자 모드 주소 컨텍스트가 현재 시스템 상태의 페이지 디렉터리로 설정됩니다. PageDirectoryBase를 생략하면 현재 사용자 모드 주소 컨텍스트가 표시됩니다.

환경

항목 설명
모드 커널 모드만
대상 라이브, 크래시 덤프
플랫폼 all

추가 정보

사용자 모드 주소 컨텍스트 및 기타 컨텍스트 설정에 대한 자세한 내용은 컨텍스트 변경을 참조 하세요.

설명

일반적으로 커널 디버깅을 수행할 때 표시되는 유일한 사용자 모드 주소 공간은 현재 프로세스와 연결된 공간입니다.

.context 명령은 커널 디버거에 지정된 페이지 디렉터리를 사용자 모드 주소 컨텍스트사용하도록 지시합니다. 이 명령을 실행하면 디버거가 이 가상 주소 공간에 액세스할 수 있습니다. 이 주소 공간의 페이지 테이블은 모든 사용자 모드 메모리 주소를 해석하는 데 사용됩니다. 이렇게 하면 이 메모리를 읽고 쓸 수 있습니다.

.process(프로세스 컨텍스트 설정) 명령도 비슷한 효과를 줍니다. 그러나 .context 명령은 사용자 모드 주소 컨텍스트를 특정 페이지 디렉터리로 설정하고 .process 명령은 프로세스 컨텍스트를 특정 프로세스로 설정합니다. x86 프로세서에서 이러한 두 명령은 기본적으로 동일한 효과를 갖습니다. 자세한 내용은 프로세스 컨텍스트를 참조하세요.

라이브 디버깅을 수행하는 경우 .context 명령 외에도 .cache forcedecodeuser 명령을 실행해야 합니다. 이렇게 하면 디버거가 필요한 메모리 공간의 실제 주소를 조회합니다. (디버그 케이블을 통해 엄청난 양의 데이터를 전송해야 하는 경우가 많기 때문에 속도가 느릴 수 있습니다.)

크래시 덤프 디버깅을 수행하는 경우 .cache 명령이 필요하지 않습니다. 그러나 충돌이 발생했을 때 디스크에 페이징된 사용자 모드 프로세스의 가상 주소 공간 부분에는 액세스할 수 없습니다.

예를 들어 다음과 같습니다. !process 확장을 사용하여 원하는 프로세스의 디렉터리 기반을 찾습니다.

kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS fe5039e0  SessionId: 0  Cid: 0008    Peb: 00000000  ParentCid: 0000
    DirBase: 00030000  ObjectTable: fe529b68  TableSize:  50.
    Image: System

...

PROCESS fe3c0d60  SessionId: 0  Cid: 0208    Peb: 7ffdf000  ParentCid: 00d4
 DirBase: 0011f000  ObjectTable: fe3d0f48  TableSize:  30.
    Image: regsvc.exe

이제 이 페이지 디렉터리 베이스와 함께 .context 명령을 사용합니다.

kd> .context 0011f000

이렇게 하면 다양한 방법으로 주소 공간을 검사할 수 있습니다. 예를 들어 !peb 확장의 출력은 다음과 같습니다.

kd> !peb
PEB at 7FFDF000
    InheritedAddressSpace:    No
    ReadImageFileExecOptions: No
    BeingDebugged:            No
    ImageBaseAddress:         01000000
    Ldr.Initialized: Yes
    Ldr.InInitializationOrderModuleList: 71f40 . 77f68
    Ldr.InLoadOrderModuleList: 71ec0 . 77f58
    Ldr.InMemoryOrderModuleList: 71ec8 . 77f60
        01000000 C:\WINNT\system32\regsvc.exe
        77F80000 C:\WINNT\System32\ntdll.dll
        77DB0000 C:\WINNT\system32\ADVAPI32.dll
        77E80000 C:\WINNT\system32\KERNEL32.DLL
        77D40000 C:\WINNT\system32\RPCRT4.DLL
        77BE0000 C:\WINNT\system32\secur32.dll
    SubSystemData:     0
    ProcessHeap:       70000
    ProcessParameters: 20000
        WindowTitle: "'C:\WINNT\system32\regsvc.exe'"
        ImageFile:    'C:\WINNT\system32\regsvc.exe'
        CommandLine:  'C:\WINNT\system32\regsvc.exe'
        DllPath:     'C:\WINNT\system32;.;C:\WINNT\System32;C:\WINNT\system;C:\WINNT;C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;C:\PROGRA~1\COMMON~1\AUTODE~1'
        Environment:  0x10000