나는 힙 손상을 추적하고있다. 나는DPH_BLOCK_INFORMATION에서 "(null)"StackTrace를 피하는 방법?
gflags /p /enable myprogram.exe
표준 페이지 힙 인증을 사용하도록 설정 한이는 손상 확인에 성공 : 나는 기대에 전체 페이지 힙 검증 (gflags /p /enable myprogram.exe /full
)를 켜면
=========================================================== VERIFIER STOP 00000008: pid 0x1040: corrupted suffix pattern 10C61000 : Heap handle 19BE0CF8 : Heap block 00000010 : Block size 00000000 : ===========================================================
이 오류가 발생할 수 있음을 부패가 시작될 때 발생하기 위해, 나는 더 이상 아무것도 얻지 못한다.
Advanced Windows Debugging: Memory Corruption Part II—Heaps을 읽는 동안 나는 희망을 갖기 시작했습니다. 이것은 의 장입니다. WinDbg를 설치하고 에 따라 user32.dll
, kernel32.dll
, ntdll.dll
에 대한 디버그 기호를 다운로드했습니다. 프로그램이 디버거에서 중단 이제 때 힙 페이지에 대한 정보를 보려면이 명령을 실행할 수 있습니다 :
0:000> dt _DPH_BLOCK_INFORMATION 19BE0CF8-0x20 ntdll!_DPH_BLOCK_INFORMATION +0x000 StartStamp : 0xabcdaaaa +0x004 Heap : 0x90c61000 +0x008 RequestedSize : 0x10 +0x00c ActualSize : 0x38 +0x010 FreeQueue : _LIST_ENTRY [ 0x0 - 0x0 ] +0x010 TraceIndex : 0 +0x018 StackTrace : (null) +0x01c EndStamp : 0xdcbaaaaa
나는 (null)
스택 추적에 의해 놀라지입니다. 자, http://msdn.microsoft.com/en-us/library/ms220938%28VS.80%29.aspx는 다음과 같이 말합니다 :
StackTrace 필드는 다양한 이유에서 항상 null이 아닌 값을 포함하지는 않습니다. 우선 스택 추적 검색은 x86 플랫폼에서만 지원되며 둘째, x86 시스템에서도 스택 추적 감지 알고리즘이 완전히 신뢰할 수 없습니다. 블록이 할당 된 블록이면 스택 추적은 할당 순간을 나타냅니다. 블록이 해제 된 경우 스택 추적은 자유 시간 동안 수행됩니다.
그러나 누가 할당 순간부터 스택 추적을 볼 가능성을 높이는 데 어떤 생각이 있는지 궁금합니다.
읽어 주셔서 감사합니다.