출처 : 동빈나님 유튜브 youtu.be/TxWOaKE5w_s |
유튜브를 보며 공부하던 중 두고두고 복습이 필요할 것 같아 정리를 하려고 한다..
구체적인 하나의 프로그램이 실행된 형태인 프로세스는 어떠한 메모리 구조를 가지게 될 지 알아보자.
기본적으로 실제 메인 메모리에서 하나의 세그먼트는 아래의 구조를 가지고 있다.
세그먼트(segment) : 하나의 프로세스를 묶은 것
실행 시점에 실제 메모리의 어느 위치에 저장될 지 결정된다.
Stack, Heap, BSS, Data, Text로 나뉘어져 있다.
- Text : 실제로 우리가 작성한 소스코드가 들어간다. 프로그램을 실행하게 되면 여기에 있는 어셈블리 코드가 한 줄 한 줄 읽히면서 프로그램이 구동된다.
- Data : 실제로 초기화가 이루어진 변수가 들어간다.
- BSS : 초기화가 이루어지지 않은 변수가 들어간다.
- Heap : 동적으로 할당되는 공간이다. 예를들어 C언어 같은 경우, 동적으로 배열을 할당해주면 사용 후 메모리 해제를 반드시 시켜줘야 한다. 여기서 메모리가 힙 영역이다.
- Stack : 함수의 파라미터 값, 반환 값, 지역변수 등의 데이터를 담고 있다. 함수를 호출할 때마다 이 스택 영역에 쌓이게 된다. 실제로 이 부분에서 취약점이 많이 발생이 되고 버퍼오버플로우도 자주 발생이 된다.
jiravvit.tistory.com/entry/Buffer-Overflow-8086-Memory-Architecture
자세한 건 위 포스팅을 참고하면 될 것 같다..
다음 포스팅에서는 취약점이 많이 발생이 되는 Stack 영역에 대해 더 알아보도록 하겠다.
'System Hacking' 카테고리의 다른 글
함수 프롤로그(prolog) / 함수 에필로그(eplilog) (1) | 2020.09.17 |
---|---|
pwndbg를 이용한 ELF 동적 분석 방법 (0) | 2020.08.29 |
[pwntools] 사용법 정리 -(최초 작성 : 20.08.28) (0) | 2020.08.28 |
스택 프레임 (Stack Frame) (2) | 2020.07.02 |
파일 디스크립터 (File Descriptor) (0) | 2020.06.11 |