본문 바로가기

My Study/Function

VirtualAlloc

LPVOID WINAPI VirtualAlloc(
  __in_opt  LPVOID lpAddress,
  __in      SIZE_T dwSize,
  __in      DWORD flAllocationType,
  __in      DWORD flProtect
);

페이지 상태를 RESERVE와 COMMIT상태로 만드는 역할을 하는 함수

lpAddress : RESERVE 및 COMMIT하고자 하는 메모리의 시작 주소를 저장한다. 일반적으로 NULL을 전달.
   NULL이 전달되면 할당하고자 하는 크기에 맞춰서 메모리의 위치를 임의로 결정한다.
   그러나 RESERVE상태에 있는 페이지를 COMMIT상태로 변경할 때에는 해당 페이지의 시작 주소를 지정해야 한다.

dwSize : 할당하고자 하는 메모리의 크기를 바이트 단위로 지정한다. 메모리의 할당은 페이지 크기 단위로 결정된다.
 예를 들어서 페이지 크기가 4KB인 경우, 14KB를 할당한다 하더라도 4KB의 배수에 해당하는 16KB바이트가 할당된다.

flAllocationType : 메모리 할당의 타입을 결정한다. 
  페이지를 RESERVE상태로 변경 - MEM_RESERVE 전달
  페이지를 COMMIT상태로 변경 - MEM_COMMIT 전달

flProtect : 페이지별 접근방식에 제한을 두는 용도로 사용한다.
 기본적으로 RESERVE상태에 둘 때에는 접근을 허용하지 않는 PAGE_NOACCESS
 COMMIT상태로 변경할 때에는 읽기 쓰기를 모두 허용하는 PAGE_READWRITE를 인자로 전달.
 MSDN에서 소개하고 있는 인자들의 개수가 열 가지를 넘으며, 이들은 제한된 형태로 조합이 가능하다.

함수 호출이 성공하면 할당이 이뤄진 메모리의 시작 번지를 반환한다. ( 유저모드 주소 공간에 메모리 블록을 할당 )

'My Study > Function' 카테고리의 다른 글

VirtualQuery  (0) 2010.02.24
VirtualProtect  (4) 2010.02.24
TerminateProcess  (0) 2010.02.24
ExitProcess  (0) 2010.02.24
GetModuleHandle  (0) 2010.02.24