드라이버 검증 도구의 특수 풀 메모리 손상 검색

메모리 손상은 일반적인 드라이버 문제입니다. 드라이버 오류로 인해 오류가 발생한 후 오랫동안 충돌이 발생할 수 있습니다. 이러한 오류 중 가장 일반적인 오류는 이미 해제된 메모리에 액세스하고 n 바이트를 할당한 다음 n+1바이트에 액세스하는 것입니다.

메모리 손상을 감지하기 위해 드라이버 검증 도구는 특수 풀에서 드라이버 메모리를 할당하고 잘못된 액세스를 위해 해당 풀을 모니터링할 수 있습니다. ExAllocatePoolWithTag와 같은 커널 모드 시스템 제공 루틴과 GDI 시스템 제공 루틴(예: EngAllocMem)을 위한 특수 풀 지원이 제공됩니다.

맞춤별 특수 풀

특수 풀의 두 맞춤을 사용할 수 있습니다.

  • 시작 확인 맞춤은 액세스 언더런을 검색하는 데 더 적합합니다.
  • 종료 확인 맞춤은 액세스 오버런을 검색하는 데 더 적합합니다.

시작 확인종료 확인 옵션을 사용하는 방법에 대한 자세한 내용은 오버런 및 언더런 검색을 참조하세요. 대부분의 메모리 손상은 오버런이 아니라 오버런으로 인한 것입니다.

특수 풀 기능이 활성화되고 종료 확인 이 선택되면 드라이버에서 요청한 각 메모리 할당이 별도의 페이지에 배치됩니다. 할당이 페이지에 맞도록 허용하는 가능한 가장 높은 주소가 반환되므로 메모리가 페이지 끝에 맞춰집니다. 페이지의 이전 부분은 특수 패턴으로 작성되었습니다. 이전 페이지와 다음 페이지에 액세스할 수 없음으로 표시됩니다.

드라이버가 할당이 종료된 후 메모리에 액세스하려고 하면 드라이버 검증 도구가 이를 즉시 검색하고 버그 검사 0xCD 실행합니다. 드라이버가 버퍼가 시작되기 전에 메모리에 쓰는 경우 패턴이 변경될 수 있습니다. 버퍼가 해제되면 드라이버 검증 도구는 변경을 감지하고 버그 검사 0xC1 실행합니다.

드라이버가 버퍼를 해제한 후 버퍼를 읽거나 쓰는 경우 드라이버 검증 도구는 버그 검사 0xCC 실행합니다.

시작 확인이 선택되면 메모리 버퍼가 페이지의 시작 부분에 맞춰집니다. 이 설정을 사용하면 오버런으로 인해 즉각적인 버그 검사 발생하며 오버런으로 인해 메모리가 해제될 때 버그 검사 발생합니다. 이 옵션은 종료 확인 옵션과 동일합니다.

오버런 오류가 언더런 오류보다 드라이버에서 훨씬 더 일반적이므로 End가 기본 맞춤인지 확인합니다.

개별 메모리 할당은 XxxSpecialPoolOverrun 또는 XxxSpecialPoolUnderrun으로 설정된 Priority 매개 변수를 사용하여 ExAllocatePoolWithTagPriority를 호출하여 이러한 설정을 재정의하고 맞춤을 선택할 수 있습니다. (이 루틴은 특수 풀 기능을 활성화하거나 비활성화하거나 메모리 할당을 위해 특수 풀을 요청할 수 없으며, 그렇지 않으면 일반 풀에서 할당됩니다. 이 루틴에서 맞춤만 제어할 수 있습니다.)

Windows 운영 체제의 Windows 7 이상 버전에서 특수 풀 옵션은 다음 커널 API를 사용하여 할당된 메모리를 지원합니다.

풀 태그 또는 할당 크기별 특수 풀

지정된 드라이버의 할당을 위해 특수 풀을 요청하는 드라이버 검증 도구의 특수 풀 기능 외에도 특수 풀을 사용하는 두 가지 다른 방법이 있습니다.

  • 풀 태그입니다. 지정된 풀 태그를 사용하여 모든 할당에 대해 특수 풀을 요청합니다.

  • 크기 지정된 크기 범위 내의 모든 할당에 대해 특수 풀을 요청합니다.

풀 태그 또는 크기 범위에 대한 특수 풀을 요청하려면 Windows용 디버깅 도구에 포함된 도구인 Gflags를 사용합니다. 자세한 내용은 전역 플래그 유틸리티 사용을 참조하세요.

드라이버 검증 도구의 특수 풀 기능과 Gflags의 특수 풀 기능을 동시에 사용할 수 있습니다. 이렇게 하면 특수 풀이 제한되고, 특수 풀에서 할당하려는 모든 시도가 성공하지는 않으며, Windows는 일반 메모리 풀의 할당에 의해 충족되는 특수 풀에서 할당하지 못한 성공 상태 반환합니다.

특수 풀 효율성

모든 특수 풀 요청이 처리되는 것은 아닙니다. 특수 풀의 각 할당은 페이지가 지정될 수 없는 실제 메모리의 한 페이지와 가상 주소 공간의 두 페이지를 사용합니다. 풀이 소진되면 특수 풀을 다시 사용할 수 있게 될 때까지 메모리가 표준 방식으로 할당됩니다. 표준 풀에서 특수 풀 요청이 채워지면 풀 요청이 성공했기 때문에 요청 함수가 오류를 반환하지 않습니다. 따라서 특수 풀 기능이 활성화된 경우 여러 드라이버를 동시에 확인하는 것은 권장되지 않습니다.

많은 작은 메모리 요청을 만드는 단일 드라이버는 이 풀을 고갈시킬 수도 있습니다. 이 경우 드라이버의 메모리 할당에 풀 태그를 할당하고 한 번에 하나의 풀 태그에 특수 풀을 바치는 것이 좋습니다.

시스템의 실제 메모리 양에 따라 특수 풀의 크기가 증가합니다. 이상적으로 1GB 이상이어야 합니다. x86 컴퓨터에서는 가상(물리적 공간 외에) 공간이 사용되므로 /3GB 부팅 옵션을 사용하지 마세요. 페이지 파일 최소/최대 수량을 2~3배 늘리는 것도 좋습니다.

드라이버의 모든 할당이 테스트되고 있는지 확인하려면 오랜 기간 동안 드라이버를 강조하는 것이 좋습니다.

특수 풀 모니터링

풀 할당과 관련된 통계를 모니터링할 수 있습니다. 드라이버 검증 도구 관리자, Verifier.exe 명령줄 또는 로그 파일에 표시할 수 있습니다. 자세한 내용은 전역 카운터 모니터링 을 참조하세요.

특수 풀에서 풀 할당 성공 카운터가 풀 할당 성공 카운터와 같으면 특수 풀이 모든 메모리 할당을 포함하기에 충분했습니다. 이전 카운터가 후자보다 낮으면 특수 풀이 한 번 이상 소진되었습니다.

이러한 카운터는 특수 풀을 적용할 수 없으므로 크기가 한 페이지 이상인 할당을 추적하지 않습니다.

특수 풀 기능을 사용하도록 설정했지만 모든 풀 할당의 95% 미만이 특수 풀에서 할당된 경우 드라이버 검증 도구 관리자에 경고가 표시됩니다. Windows 2000에서는 이 경고가 드라이버 상태 화면에 표시됩니다. Windows XP 이상에서는 이 경고가 전역 카운터 화면에 표시됩니다. 이 경우 드라이버 목록을 더 짧게 확인하거나, 풀 태그별로 개별 풀을 확인하거나, 시스템에 물리적 메모리를 더 추가해야 합니다.

커널 디버거 확장 !verifier 를 사용하여 특수 풀 사용을 모니터링할 수도 있습니다. 드라이버 검증 도구 관리자와 유사한 정보를 제공합니다. 디버거 확장에 대한 자세한 내용은 Windows 디버깅을 참조하세요.

특수 풀 옵션 활성화

드라이버 검증 도구 관리자 또는 Verifier.exe 명령줄을 사용하여 하나 이상의 드라이버에 대한 특수 풀 기능을 활성화할 수 있습니다. 자세한 내용은 드라이버 검증 도구 옵션 선택을 참조하세요.

참고

풀 태그 또는 할당 크기별로 특수 풀 기능을 활성화하거나 시작 확인 (언더런 검색) 및 종료 확인 (오버런 검색) 맞춤을 설정하려면 Global Flags 유틸리티를 사용합니다. 이러한 맞춤 설정은 모든 특수 풀 할당에 적용됩니다.

  • 명령줄에서

    명령줄에서 특수 풀 옵션은 비트 0(0x1)으로 표시됩니다. 특수 풀을 활성화하려면 플래그 값 0x1 사용하거나 플래그 값에 0x1 추가합니다. 예를 들면 다음과 같습니다.

    verifier /flags 0x1 /driver MyDriver.sys
    

    이 기능은 다음 부팅 후에 활성화됩니다.

    Yyou는 명령에 /volatile 매개 변수를 추가하여 컴퓨터를 다시 부팅하지 않고 특수 풀을 활성화하고 비활성화할 수도 있습니다. 예를 들면 다음과 같습니다.

    verifier /volatile /flags 0x1 /adddriver MyDriver.sys
    

    이 설정은 즉시 유효하지만 컴퓨터를 종료하거나 다시 부팅하면 손실됩니다. 자세한 내용은 Volatile 설정 사용을 참조하세요.

    특수 풀 기능도 표준 설정에 포함되어 있습니다. 예를 들면 다음과 같습니다.

    verifier /standard /driver MyDriver.sys
    
  • 드라이버 검증 도구 관리자 사용

    1. 사용자 지정 설정 만들기(코드 개발자용)를 선택하고 다음을 클릭합니다.
    2. 전체 목록에서 개별 설정 선택을 선택합니다.
    3. (검사) 특수 풀을 선택합니다.

    특수 풀 기능도 표준 설정에 포함되어 있습니다. 이 기능을 사용하려면 드라이버 검증 도구 관리자에서 표준 설정 만들기를 클릭합니다.