리눅스 메모리 구조에 관한 간략한 설명

IT/Security/System 2010. 5. 11. 17:51

======================================================================================================

리눅스에서는 바이너리 실행파일의 형식으로 ELF(Executable and Linking Format) 형식을 사용한다.
리눅스 커널에서 ELF형식의 바이너리가 메모리에 로드되는 방식은 binfmt_elf.c에 들어있다.
binfmt_elf.c 에 보면 메모리 구조는 대략적으로 아래의 그림과 같이 4가지의 영역으로 구분 된다.

우선 텍스트(Text) 영역은 프로그램의 어셈블리 코드가 저장된다.
텍스트 영역공유라이브러리와 기계어 코드가 저장 된다.
데이터(Data) 영역전역(Global) 데이터들이 저장된다.
힙(Heap) 영역동적 변수가 사용하는 영역으로
C 언어에서
malloc()과 같은 시스템 호출을 통해서 할당되는 메모리는 힙 영역에 할당된다. 스택 영역은 지역변수(local)가 사용하는
영역이다.

스택은 사용자 주소 공간의 최상위 부분에 위치하며, LIFO(Last In, First Out) 모델에 따라 동작한다.
함수가 호출될 때마다 지역 변수와 함수의 인자, 리턴어드레스 등을 위한 새로운 프레임이 스택에 생성되는데
CPU는 값을 집어넣는 push 연산과 값을 꺼내는 pop 연산을 통하여 스택을 제어한다. 

======================================================================================================

예전에 어떤 논문을 보고 잠시 기록해놨던 내용인데, 정확히 어떤 논문이었는지를 모르겠네요.. -_-;
암튼 깔끔하게 잘 정리되어 있어서 스크랩했던 부분입니다. 참고하시길 바라겠습니다.

'IT/Security > System' 카테고리의 다른 글

ASCII-Hex Table  (0) 2010.06.04
ARM 디컴파일러 출시!  (0) 2010.06.04
Ubuntu 10.04 Beta2 설치기  (0) 2010.04.22
/bin/sh 주소를 찾을 때  (0) 2010.03.17
gcc 2.96에서 buf와 buf2의 거리표  (0) 2010.03.14

설정

트랙백

댓글