본문 바로가기
Study/Reversing

[리버싱] 메모리 구조

by graygreat 2017. 8. 24.
728x90
반응형




코드(code) 영역


실행할 프로그램의 코드가 저장되는 영역으로 텍스트(text)영역이라고도 부른다.


CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 된다.




데이터(data) 영역 


전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장된다.


데이터 영역은 쓰임새에 따라 3가지 영역으로 나뉜다.


- 읽기 전용으로 초기화되는 영역 (.rodata) --> 상수키워드(const)로 선언되는 영역, 시스템에 사용된 각종 문자열


예를들어, printf()의 포맷스트링이나 상수 문자열


- 읽기/쓰기가 가능한 영역으로 초기화되는 영역 (.data) --> 전역변수 중 초기값을 갖는 경우


- 초기화되지 않은 영역 (.bss) --> 전역변수로 초기화 되지 않거나 static으로 선언된 경우


프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다.




힙(heap) 영역


사용자가 직접 관리할 수 있는 '그리고 해야만 하는' 메모리 영역이다.


사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.


메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.




스택(stack) 영역


함수의 호출과 관계되는 지역 변수와 매개 변수가 저장되는 영역이다.


스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.


이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 한다.


메모리의 높은 주소에서 낮은 주소의 뱡항으로 할당된다.




반응형

댓글