본문 바로가기

보안

Virtual Memory 와 Physical Memory 이해하기

VAS( Virtual Address Space )

VAS는 실제 Physical Memory를 mapping한 가상 주소를 사용하는 것으로

Physical Memory 한계를 극복할 수 있고 OS가 메모리 접근을 관리하여 Memory Protection을 가능하게 한다 .

Windows는 VAS를 Physical Memory와 mapping하기 위하여 page table

을 사용하며 Physical Memory에 저장할 수 없는 Memory 정보는 page file로 저장하게 된다. (이를 paging이라고 한다.)

Process의 메모리 공간은 공유되지 않는 한 다른 Process가 접근하지 못 한다.

32bit 환경에서는 최대 VAS는 4GB이고 64bit 환경에서는 2의 64bit 만큼 의 VAS를 가질 수 있다.

그러기 위해서는

Virtual Memory 와

Page Directory , Page Table , Page 를 알 필요가있다 .

Virtual Memory 는 4Gbyte 크기를 가지고 이 Virtual Memory 를 4Kbyte 단위로 나눈다.

이 나눠진 이 4Kbyte 하나는 Page 한개가 된다.

그후 이 Page를 2의10승 즉 1024개만큼 묶어서 표현하는데 이걸 Page Table 라고한다.

이 Page Table는 자신안에 구성되어있는 Page의 모든 주소를 가지고있다.

즉 1024 * 4byte 크기 로 구성되어있다.

1024 = Page 개수 , 4byte = 주소를 저장하기위한 단위.

그후 이 Page Table 들을 모두 묶어서 표현한것을 Page Directory 로 불리는데

이 안에는 Page Table 의 주소들이 저장되어있다.

Page는 4k의 크기를 가지고 이안에는 데이터가들어있다.

그리고 이 Page의 주소들을 1024개를 묶어서 Page Table 로 묶는다.

그리고 이 Page Table 의 주소를 묶어보관하는것이 Page Directory 이다 .

그렇다면 이러한 정보들은 언제 사용될까?

가상메모리에서 물리메모리로 매칭을 할때 데이터가 가상메모리에서 물리메모리로

매칭되는 위치가 여기에 기록되어있는것이다.

그렇다면 가상주소를 물리주소로 바꿔보자.

먼저 주소의 정해진 범위마다 의미가있다.`

예로 가상주소 0x200 을 실제 물리주소로 변환한다면

먼저 16진수인 값을 2진수로 바꿔서 보아야한다.

총 32bit 로 이루어져있으니 이 크기에 맞춰서 반환하자.

0010 0000 0000 가 0x200일것이고 이것은 12 비트이니

나머지 앞의 20 비트는 모두 0 이기때문에 16진수로 표현되지않은것이다.

즉 원래의 값은

0000 0000 0000 0000 0000 0010 0000 0000 이 0x200의 값을 2진수로 변환한값이며

각 위치에 맞는 값을 보면

앞의 10 비트는 Page Directory의 인덱스이니 즉 0 번째 인덱스를 의미하고

가운데 10 비트는 Page Table 의 인덱스이니 즉 0 번째 인덱스를 의미

뒤의 12비트는 offset 을 의미한다. 즉 값에서 200 만큼 떨어진 위치라는 말이다.

그렇다면 디렉토리 3 번째 인덱스 의 Page Table 2번째 인덱스의 offset가 400 인경우는 어떻게 표현되는가.

0000 0000 1100 0000 0010 0100 0000 0000

=> 00C02400 -> 0xC02400 의 가상주소가 나온다.

CR3 : 현재 CPU가 실행하고있는 프로세스의 페이지 디렉토리를 가리키는 레지스터이다.

그림을 통해 순서적으로 알아보자.

먼저 CR3가 프로세스의 페이지 디렉토리를 가리키고있다.

그 페이지 디렉토리에는 128k 위치에 알맞는 테이블이 있다고 명시해주고있다.

Physical Memory 에서 그위치를 가보면 그위치에 알맞는 페이지 테이블이 위치하고있다.

그 위치를 보니 4K에 알맞는 페이지가있다고 명시해주고있다.

그위치에서 offset만큼 떨어진위치가 정확한 위치이다.

즉 4k = 0x1000 이니 옵셋만큼 더해서 실제 주소는 0x1100 이다

 

'보안' 카테고리의 다른 글

[포렌식] Windows Artifact 분석  (0) 2019.05.21
실시간 대응 키워드  (0) 2019.05.21
실시간 대응의 중요성  (0) 2019.05.21
사이버 포렌식  (0) 2019.05.21
구글해킹, 구글해킹 명령  (0) 2019.05.20