nemo의 이야기
메모리 구조 본문
취약점을 분석하려면 메모리에 대한 이해가 필요하다.
그래서 프로세스가 실행되어 메모리에 올라갔을 경우 메모리를 분석해보자.
프로세스에 실행하는데 필요한 메모리가 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 |