본문 바로가기
Programming/Reversing

Memory

by NAMP 2009. 4. 8.

Memory 구조 - 2009/04/08

80386  -  32bit - 보호모드 사용

Register size -> 32bit

Memory size -> 32bit

  • 보호모드 - 메모리에 접근할 때 중간에서 OS(MMU, VMM)가 중계를 한다. 
  • 가상메모리를 사용한다. => 멀티스레딩 가능
  • Segmentation, Paging 기법 사용. (혼합사용)

    • Segmentation  / 내부 단편화 방지 
    • Paging  / 4KB 로 일괄적으로 분할 / 외부 단편화 방지 

 

  • 가상메모리
  • Segmentation
  • 선형주소 (Linear address)
  • Paging
  • 물리메모리 주소

 

  1. Segment Selector 는 16bit 이다.  
  2. GDTR을 참조하여 GDT의 시작값을 알아내고, Segment Selector를 통하여 Segment Descriptor를 알아낸다. 
  3. Segment Descriptor에서 알아낸 Base Address와 OffSet을 더하여 Linear Address Space에 접근 후, Segment를 알아낸다. 
  4. Segment를 10bit | 10bit | 12bit 로 나누고, 각각 Page Directory, Page Table에 접근 후, 실제 물리메모리에 접근한다. 

 

CR3 (Control Register3) 이 Page Directory의 시작 지점을 가지고 있다. 

 

80286

큰 변화가 없다. 

 

 

8086  - 16bit - 리얼모드 사용.

리얼모드로 동작함. 

세그먼트 레지스터에 메모리 주소값이 들어있음. 

메모리는 20bit 버스 사용.          CS:Offset 값 사용. 

         (CS)16bit + 4bit

+           (Offset)16bit

 

 

 

------------------

    (MemoryAddr) 20bit

 

Segment Register     

  • CS / code
  • DS / data  / 전역변수 
  • SS / stack  / 지역변수
  • ES / 보조
  • FS  
  • GS

 

 

FFFFFFFF  =  -1


보호모드

보호 모드(Protected mode)는 컴퓨터에서 보호 가상 주소 모드라고도 하며 x86 호환 CPU의 운영 방식이다. 처음에는 1982년x86아키텍처에 추가되었다. 그 뒤로 인텔의 80286 (286) 프로세서로, 나중에 1985년, 80386 (386)로 연장되었다. 보호 모드는 시스템 소프트웨어가 다중 작업가상 메모리페이징, 그리고 응용 소프트웨어를 넘는 운영 체제 제어 능력을 높이기 위해 고안된 운영 체제의 다른 기능들을 이용할 수 있게 도와 준다.

x86 보호 모드를 지원하는 프로세서가 전원이 켜지면 리얼 모드에서 함수를 실행하여 초기의 x86 프로세서의 뒤떨어지는 호환성을 관리하기 시작한다. 보호 모드는 시스템 소프트웨어가 몇 개의 서술자 테이블을 설정하고 제어 레지스터 0 (CR0)에서 프로텍션 이네이블(PE:Protection Enable) 비트를 설정한 뒤에만 입력받을 수 있다. 보호 모드가 추가해 놓은 개선 사항들 덕에 이 방식은 폭넓게 채택되었으며, 그 뒤로 x86 아키텍처 위로 여러 향상들이 추가로 뒤따르게 되었다.


가상 메모리

  • 메모리 관리 장치(Memory Management Unit, 줄여서 MMU)는 CPU가 메모리에 접근하는 것을 관리하는 컴퓨터 하드웨어 부품이다. 가상 메모리 주소를 실제 메모리 주소로 변환하며, 메모리 보호, 캐시 관리, 버스 중재 등의 역할을 담당하며 간단한 8비트 아키텍처에서는 뱅크 스위칭을 담당하기도 한다.
  • Virtual memory is a computer system technique which gives an application program the impression that it has contiguous working memory (an address space), while in fact it may be physically fragmented and may even overflow on to disk storage. Systems that use this technique make programming of large applications easier and use real physical memory (e.g. RAM) more efficiently than those without virtual memory.

페이지

페이징 기법(paging)은 가상기억장치를 모두 같은 크기의 블록으로 편성하여 운용하는 기법이다. 이때의 일정한 크기를 가진 블록을 페이지(page)라고 한다. 주소공간을 페이지 단위로 나누고 실제기억공간은 페이지 크기와 같은 프레임으로 나누어 사용한다.

페이징 기법이 적용된 시스템에서 가상주소는 순서쌍 (p,d)로 나타낼 수 있다. p는 가상기억장치 내에서 참조될 항목이 속해 있는 페이지 번호이고, d는 페이지 p내에서 참조될 항목이 위치하고 있는 곳의 변위이다.

어떤 프로세스가 현재 참조하고 있는 페이지가 주기억장치 내에 있다면 그 프로세스는 수행될 수 있다. 반대로 주기억장치 내에 없다면 그 해당 페이지를 보조기억장치로부터 읽어와서 페이지 프레임의 한 블록에 저장한다.

[편집]프레임과 페이지

프레임과 페이지는 메모리를 일정한 크기의 공간으로 나누어 관리하는 단위이며, 프레임과 페이지의 크기는 같다.

  • 프레임(Frame) : 물리 메모리를 일정된 한 크기로 나눈 블록이다.
  • 페이지(Page) : 가상 메모리를 일정된 한 크기로 나눈 블록이다.

페이지가 하나의 프레임을 할당 받으면, 물리 메모리에 위치하게 된다. 프레임을 할당 받지 못한 페이지들은 외부 저장장치에 저장되며, 이때도 프레임과 같은 크기 단위로 관리됩니다.

이 글은 스프링노트에서 작성되었습니다.

'Programming > Reversing' 카테고리의 다른 글

ASM 1  (0) 2009.04.09
MASM32 / EditPlus 연동  (0) 2009.04.09
Register  (0) 2009.04.08
OpenRCE Anti Reverse Engineering Techniques Database  (0) 2009.03.29
모음 - 크랙 관련 사이트  (0) 2009.03.26

댓글