| 메모리 브레이크포인트


메모리 브레이크포인트(Memory Breakpoint)는 사실 브레이크포인트가 아니다. 디버거가 메모리 브레이크포인트를 설정하면 해당 메모리 영역이나 페이지에 대한 접근 권한이 변경된다. 메모리 페이지는 운영체제가 처리하는 가장 작은 단위의 메모리 크기다. 메모리 페이지가 할당되면 그곳에 대한 접근 권한이 부여된다. 메모리 페이지에 부여되는 접근 권한은 다음과 같다.



- 페이지 실행(Page Execution) 이 권한이 할당된 메모리 페이지는 실행시킬 수 있다. 하지만 이 메모리 페이지에서 데이터를 읽거나 쓰려고 하면 접근 위반 예외가 발생한다.


- 페이지 읽기(Page Read) 프로세스는 이 권한이 할당된 메모리의 내용을 읽을 수 있따. 하지만 데이터를 쓰거나 실행시키려고 하면 접근 위반 예외가 발생한다.


- 페이지 쓰기(Page Write) 이 접근 권한은 프로세스가 해당 메모리 페이지에 데이터를 쓰는 것만 허용한다.


- 보호 페이지(Guard Page) 이 권한이 할당된 페이지에 대해 어떤 종류의 접근이라도 발생하면 예외를 발생시킨다. 예외를 발생시킨 이후에는 페이지의 원래 상태로 복귀된다.



대부분의 운영체제는 이와 같은 접근 권한들을 지원한다. 예를 들어 메모리상에는 읽고 쓰는 것이 가능한 메모리 페이지가 있을 수 있고 읽고 실행하는 것이 가능한 또 따른 메모리 페이지가 있을 수 있다. 또한 각 운영체제는 특정 메모리 페이지의 접근 권한을 질의하거나 접근 권한을 원하는 대로 변경시킬 수 있는 내장 함수를 제공한다. 



메모리의 접근 권한 중에서 우리의 관심사는 바로 보호 페이지(Guard Page) 권한이다. 이 접근 권한은 스택에서 힙을 분리해내거나 특정 메모리 영역이 어떤 범위 이상으로 커지는지 확인하는데 유용하다. 또한 특정 메모리 영역에 대한 접근이 발생할 때 프로세스를 중지시키고자 할 때 매우 유용하게 사용된다. 


예를 들어 네트워크 서버 어플리케이션을 리버스 엔지니어링할 때 어플리케이션에 전달된 패킷의 페이로드가 저장되는 메모리 영역에 메모리 브레이크포인트를 설정할 수 있다. 이렇게 하면 브레이크포인트를 설정한 메모리에 대한 접근이 발생했을 때 CPU가 보호 페이지 디버그 예외를 발생시키기 때문에 어플리케이션이 전달된 패킷의 내용을 언제, 어떻게 사용하는지 판단할 수 있게 된다. 그리고 해당 메모리 페이지에 접근하는 명령을 조사해 어플리케이션이 패킷의 내용으로 어떤 작업을 수행하는 것인지 알아낼 수 있다. 메모리 브레이크포인트는 실행되는 어떤 코드도 변경하지 않기 때문에 소프트 브레이크포인트가 갖고 있는 코드 변경으로 인한 제약을 극복할 수 있다.







이 포스팅에서는, Mac OS X 운영체제의 시스템 메모리 체제에 대한 설명을 하도록 하겠습니다.

Mac OS X에서는 '활성 상태 보기' 응용 프로그램을 이용해서 시스템 메모리 사용량에 대한 정보를 얻을 수 있습니다.


위 사진을 보면 알 수 있듯이,

Mac OS X의 시스템 메모리는 크게 4가지로 분류가 됩니다.

여유 공간, 와이어드, 활성, 비활성


여유 공간: 

현재 사용되고 있지 않은 메모리 공간입니다.


와이어드 공간:

현재 사용중인 메모리 공간입니다.


활성:

최근에 사용한 정보들 중 현재 메모리에 보관이 되어있는 정보들이 차지하는 메모리 공간입니다.


비활성:

현재는 사용하지 않지만 최근에 사용한 응용 프로그램의 메모리를 담고 있는 메모리 공간입니다.

응용 프로그램을 종료한 후, 다시 실행시킬 떄 비활성 메모리에 적재되어 있는 상태라면 더욱 빠르게 실행 복귀가 가능합니다.

느린 하드 디스크보다 램에서 정보를 가져오는 것이 훨씬 빠르기 때문입니다.


여유 공간 + 와이어드 + 활성 + 비 활성 = 총 메모리 공간

    와이어드 + 활성 + 비활성 = 사용됨

여유 공간 + 사용됨 = 총 메모리 공간




VM 크기:

Virtual Memory 크기라는 의미로, 가상 메모리의 크기를 말합니다.


페이지 입력 및 출력:

메모리와 하드 드라이브사이에 주고 받은 메모리의 용량을 의미합니다.

메모리가 부족해서 하드 드라이브에 기록하게 되는 경우 페이지 출력이 발생합니다. 

페이지 입력은 그 반대로, 램의 용량이 충분한 경우 하드 드라이브의 메모리를 램에 적재하여 사용하는 경우 발생합니다.


따라서, 보통 램이 많을 수록 페이지 입력이 많은 경우가 많고, 램이 부족할 수록 페이지 출력이 많은 경우가 많습니다.


사용된 스왑 공간:

말그대로 사용된 스왑 공간을 의미하는데, 스왑 공간이란 물리적 메모리가 가득 찬 경우 하드 드라이브 상에서 사용되는 여유 공간을 의미합니다. 스왑 공간은 주로 적은 량의 램이 적재된 시스템에서 유용하게 쓰일 수 있습니다.


램이 많은 경우, 스왑 공간을 사용하지 않을 수도 있습니다.


+ Recent posts