nemo의 이야기

메모리 구조 본문

Information security/System security

메모리 구조

nemojjong 2017. 8. 11. 12:36

취약점을 분석하려면 메모리에 대한 이해가 필요하다.

 

그래서 프로세스가 실행되어 메모리에 올라갔을 경우 메모리를 분석해보자.

 

프로세스에 실행하는데 필요한 메모리가 3M이여도 실질적으로 4G가 사용된다.

 

이는 실제 메모리 + 가상 메모리로 모든 프로세스는 자신만의 가상 주소 공간을 가지고 있다.

 

다른 프로세스에 의해 소유된 메모리는 숨겨져 있으며, 접근이 불가능하다.

 

예를 들어 A 프로세스가 0x12345678 주소에 어떠한 값을 저장하고, B프로세스가 0x12345678을 사용하면 전혀 다른 값이 사용되고

 

이 주소들은 완전히 독립되어 있다.

 

리눅스에서 메모리를 확인하고 싶으면 다음 명령어를 수행

 

#> ps -ef | grep test2        # test2는 실행파일 이름이다.

 

#> cd /proc/

 

#> cd 809                    # 고유 아이디(PID) 809

 

#> cat maps                

 

 

실행하면 이런 메모리 형식이 나올 것이다.

 

0x00000000
    ~                  접근 불가(접근하면 에러메시지가 뜬다)
0x08048000         elf 실행파일  
    ~                   text 세그먼트의 최소 크기(4k)  
0x08048FFF        
0x08049000      
    ~                   data 세그먼트    
0x08049FFF          a.out(elf 실행파일) 
0x0804A000
    ~                   공유 라이브러리로 가기 위해 건너뛴다(예약공간(heap))
                         (공유 라이브러리 40으로 시작)
40000000-40013000 r-xp       /lib/ld-2.1.3.so   -> text
40013000-40014000 rw-p      /lib/ld-2.1.3.so   -> data
                                       /lib/ld-2.1.3.so 동적 (컴파일 할때 정적 메모리이면 메모리 사용이 커진다.)

40014000-40016000 rw-p reseved (빈공간)
    ~
4010d000-40111000 rw-p reseved (빈공간)
bfffe000-bffffff rwxp         스택 메모리 제일 밑바닥(스택은 높은쪽에서 부터 시작된다)

나머지 1G는 커널

 

총 4G

 

여기서 확인할 수 있는 STACK은

 

0xbfffffff로 시작 stack이다

 

esp => top

 

주소가 높은 메모리는 사용중인 메모리이고 esp보다 낮은 메모리는 사용 가능한 메모리이다.

 

기준을 잡는 ebp,와 pop을 써도 기준은 움직이지 않는다(지역변수)

 

ex)

 

0xbffffb78     ebp

     ~                    지역변수

0xbffff54       esp

 

 

 

 

'Information security > System security' 카테고리의 다른 글

시스템 콜(System call)  (0) 2017.08.16
argc, argv에 이해  (0) 2017.08.14
어셈블리 함수  (0) 2017.08.12
어셈블리어 기초  (0) 2017.08.10
실행 환경 구축 및 어셈블리  (0) 2017.08.09
Comments