본문 바로가기
프로그래밍

windows 애플리케이션 가상 메모리의 상태를 확인해보자.

by 안플루언서 2011. 3. 4.
windows에서 원하는 대상 프로세스의 가상메모리 상태를 알아보는방법..

프로세스 핸들을 알려면 프로세스 ID 값을 알아야 아래와 같이 핸들을 가져올수 있다.
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcessId);


typedef struct _MEMORY_BASIC_INFORMATION {
    PVOID BaseAddress; //pvAddress 매개변수로 전달한 주소를 페이지 크기 단위로 내림한 값.
    PVOID AllocationBase; // pvAddress 매개변수로 전달한 수고를 포함하는 영역의 시작 주소.
    DWORD AllocationProtect; // 해당 영역이 최초로 예약될 때 할당된 보호특성.
    SIZE_T RegionSize; /* BaseAddress로부터 시작하여 pvAddress 매개변수로 전달한 주소를 포함하는 
      페이지와 동일한 보호특성, 상태, 페이지 형태를 가진 인접하는 모든 페이지들의 전체 크기를 바이트 단위로 나타낸다.*/
    DWORD State; //pvAddress값을 포함하는 RegionSize값과 같은 범위의 페이지 상태를 나타낸다.
    DWORD Protect; //pvAddress값을 포함하는 같은 특성을 지닌 인접 페이지들의 보호 특성을 나타낸다.
    DWORD Type; //pvAddress값을 포함하는 같은 특성을 지닌 인접 페이지들의 물리저장소 형태를 나타낸다.
} MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;

MEMORY_BASIC_INFORMATION mbi;
VirtualQueryEx(hProcess, pvAddress, &mbi, sizeof(mbi);

값을 받아 왔다면..
pvAddress값이 포함되어있는 가상 주소의 시작 주소와 사이즈 등의 값을 알수있다.. 

ex)
mbi.AllocationBase 값이 pvAddress주소를 포함하는 영역의 시작주소..
mbi.RegionSize 값이 pvAddress주소를 포함하는 영역의 총 사이즈..


댓글