W.Richard Stevens 씨께서 저술한 Advanced Programming in the Unix Environment 의 7.6절은 보면 C 프로그램의 Layout에 대해 설명이 나와있습니다.
간단히 설명해 보면
/-------------------------/ 메모리상에서 | | 높은 구역 | Stack | | | /-------------------------/ | | | Heap | | | /-------------------------/ | Uninitialized data | | ---------Data---------- | | Initialized data | /-------------------------/ | | | Text | | | 메모리상에서 /-------------------------/ 낮은 구역
Text segment : CPU에 의해 실행되는 머신 코드들이 있는 영역.Read Only
Initalized data segment : data segment 라 불리는 영역이며, 초기화된 외부 변수 static 변수등이 저장되는 영역입니다. 보통 Text segment + initialized data 영역을 합쳐서 프로그램이라고 합니다.
예) static int a = 1;
Uninitalized data segment : bss segment 라고 불리며, 이 영역을 프로그램이 실행될때 0 이나 NULL Pointer로 초기화 됩니다.
예) static int a; (외부 변수나, static 변수중 초기화 되지 않은 변수들)
Stack : 자동 변수들이 저장되는 곳이고, 함수가 호출될때 함수 안의 자동변수(함수내 로컬 변수) 등이 저장되는 곳입니다. 함수가 실행되는 동안에만 존재하며 함수의 실행이 종료되면 그 변수들도 사라집니다. 함수내의 자동 변수외에 saved frame pointer 등의 함수를 호출한 caller의 환경 정보도 저장합니다.
Heap : 동적 메모리 할당을 할경우 Heap 영역에 할당이 됩니다. Heap 영역은 uninitialzed data 영역의 top 과 stack 영역의 bottom 부분에 위치합니다.
이 밖에 더 자세한 것을 알고 싶으시면 Phrack 문서의 Smashing The Stack For Fun And Profit 을 읽어 보시거나 위에서 제가 언급한 책을 읽어 보시길 바랍니다. Phrack 문서는 해킹 문서로 해킹을 하기 전초 단계로 위의 영역에 대해 설명이 자세히 나와있습니다.
www.phrack.org 에서 받을 수 있으며, 49호 14 장이 위의 주제를 다룹니다.
'JAVA' 카테고리의 다른 글
추상클래스와 인터페이스 차이 (0) | 2011.04.11 |
---|---|
인터페이스 정의(추상클래스) (0) | 2011.04.11 |