2009-08-27 4 views
4

힙을 소유하고있는 모듈과 힙 사이의 매핑을 찾는 방법을 찾고 있습니다. 나는 다음과 같은 방법으로 힙을 검색 :Windows 힙과 모듈 간의 매핑 찾기

HANDLE heaps[1025]; 
DWORD nheaps = GetProcessHeaps((sizeof(heaps)/sizeof(HANDLE)) - 1, heaps); 
for (DWORD i = 0; i < nheaps; ++i) { 
    // find module which created for heap 
    // ... 
} 

내가 그렇게 할 이유는 내 응용 프로그램에서 나는 몇 가지 표준 힙, 다른 하나는 낮은 조각화 힙되어 있으며, 원형 약 40 힙을 찾을 것입니다. 이제 어떤 모듈이 어떤 종류의 힙을 사용하는지 알아 내려고 노력 중입니다.

고맙습니다.

답변

2

프로그램 시작 부분에 CreateHeap 전화를 추가하고 중단 점을 지정하십시오. 운영. 전화를 거십시오 (디스 어셈블리 레벨로 이동). 새 중단 점을 설정하십시오. 이제 새로운 힙이 만들어 질 때마다 중단 점이 계속 발생해야합니다. 호출 스택은 그것이 어디서 왔는지 보여줍니다.

전역 개체로 힙을 만드는 경우 main() 전에 발생합니다. C 런타임 시작 코드에서 중단 점을 더 일찍 설정할 수 있습니다.

6

MSDN docs에 따르면 GetProcessHeaps 호출은 시스템의 모든 힙이 아니라 현재 프로세스의 모든 힙에 대한 핸들을 제공하므로 다른 프로세스에 매핑되지 않습니다.

+0

안녕 티모! 답변 해 주셔서 감사합니다. 함수가 현재 프로세스의 힙만을 검색한다는 것이 옳다. 죄송합니다. 죄송합니다. 그럼에도 불구하고 누가 힙을 생성했는지 알 수 있도록 힙에 대한 더 많은 정보를 얻을 수있는 방법이 있습니까? DLL? – usac