C&C++

WINAPI VirtualAlloc and VirtualAllocEx Difference

김승목 2019. 7. 9. 13:54
LPVOID VirtualAlloc( LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect );
 
LPVOID VirtualAllocEx( HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect );
 
함수 원형에서 확인 가능하듯이 차이점은 프로세스 핸들이 인자로 들어가느냐 안들어가느냐에 있다.
 
다시말해 VirtualAlloc 함수는 내 프로세스에, VirtualAllocEx 함수는 타 프로세스에도 메모리 공간을 할당할 수 있다.
 
[인자 설명]
LPVOID lpAddress
  • 할당할 메모리의 절대주소
  • NULL을 인자로 주면 시스템에서 알아서 할당
 
SIZE_T dwSize
  • 할당할 메모리의 크기
  • NULL을 인자로 주면 하나의 페이지 크기만큼 할당
 
DWORD flAllocationType
  • 할당 방법 지정
  • MEM_COMMIT : 물리 메모리의 할당을 확정
  • MEM_RESERVE : 물리 메모리의 할당 없이 예약만 한다
  • ETC : 나머지 옵션은 MSDN
 
DWORD flProtect
 
Return Value
  • 성공시 할당한 메모리 주소를 반환
  • 실패시 NULL 반환