환급미션 39일째...
운영체제 - 프로세스와 스케쥴러의 이해 - 12. 프로세스 구조와 힙
운영체제 - 프로세스와 스케쥴러의 이해 - 13. 프로세스 구조와 스택 오버플로우
운영체제 - 프로세스와 스케쥴러의 이해 - 14. 컨텍스트 스위칭 원리
운영체제 - 프로세스와 스케쥴러의 이해 - 15. 컨텍스트 스위칭 개념 정리
- Heap이란?
heap - 동적으로 생성되는 메모리 부분
에 대해 조금 더 상세하게 다뤄볼 예정
파이썬에서는 동적 메모리 할당은 생각할 필요가 없다.
하지만 내부적으로 컴퓨터를 세세하게 제어하려면 c언어만한 게 없다..
int *data;
정수형으로 공간이 필요하다는 것을 미리 알 수 있다.
main 함수 내부에 선언되어 있으므로 함수 안에 있는 로컬변수처럼 취급되게 된다.
malloc() -> 동적으로 메모리 생성하는 함수, 인자로 사이즈를 받는다. stdlib.h 라이브러리 안에 있다.
위의 코드에서 malloc(sizeof(int))으로 쓰였으므로 통상적으로 32bit 의 공간만큼을 동적 메모리할당하게 된 셈이다.
이 포인터 변수에 주소를 타입캐스팅해서 (int *) 넣어주면
data는 동적 메모리에 접근할 수 있는 변수가 된다.
-> data 변수는 heap 공간에 생성이 된다.
=> heap 영역에 32비트의 동적 메모리 공간이 만들어지게 되었다.
free(data);
함수가 끝날 때 fre(data)함수로 동적 메모리를 해제해야 한다.
*data=1;
위에서 만들어둔 데이터 공간에 1을 넣는다.
printf("%d\n", *data);
data 공간에 있는 값을 출력 (1)
다시 한 번 예제로 돌아와서
c언어로 작성한 프로그램을 실행하면
코드 영역에 들어가게 된다.
1. STACK <- return address : 0006h
2. STACK <- int *data
3. HEAP <- data = (int*)malloc(sizeof(int)) ---- 그냥 32비트의 공간에 생성되는 것.
해당 주소값이 STACK-int *data에 들어가게 된다.
4. *data=1
-> STACK-data가 가리키는 주소값 (1000h)의 값이 1로 바뀐다.
5. data값 출력
6. 프로그램 종료
- 프로세스 구조 : Stack, HEAP, DATA (BSS,DATA), TEXT(CODE)
-> DATA영역 - BSS / DATA 두 가지 영역으로 분리
BSS (block started by symbol) - 초기화되지 않은 전역변수
DATA - 초기값이 있는 전역변수
global_data1
global_data2
두 가지의 전역변수가 선언되어 있다.
global_data1 -> 선언만 되었다. 초기값x ===> BSS영역
global_data2 -> 1 값으로 초기화되어있다. 초기값o ===> DATA영역
(main함수 내에 선언된 지역변수도 있다.) int*data ===> Stackframe 영역
*스택 오버플로우 - 주로 해커들의 공격에 활용되었다.
지금까지의 예제와는 다르게
STACK의 가장 높은 주소를 아래에 두었다. (1000h)
코드를 살펴보면
main함수에서 두 개의 인자를 디폴트로 받아오고,
이 중 한 인자를 copy라는 함수에 넘긴다.
지역변수인 char data[6] -> 6byte 스택공간
strcpy (data,bar) -> 전달받은 인자를 그대로 복사
만약, bar 값에 6byte 이상의 문자를 넣게 된다면
0FFFh, 1000h까지 넘어가면서 문자를 저장하게 된다.
1000h 자리에 들어가는 자리에 해킹을 할 수 있는 코드를 적어두게 되면 프로그램이나 운영체제를 해킹하게 될 수 있는 것이다.
-> 프로세스 구조를 이용해 (프로세스가 코드를 어떻게 동작할지를 알고 있기 때문에) 이런 해킹이 가능하게 되는 것이다.
올인원 패키지 : 컴퓨터 공학 전공 필수👉https://bit.ly/3i4sCVE
'패스트캠퍼스' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 41회차 미션 (0) | 2020.11.28 |
---|---|
[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 40회차 미션 (0) | 2020.11.27 |
[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 38회차 미션 (0) | 2020.11.25 |
[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 37회차 미션 (0) | 2020.11.24 |
[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 36회차 미션 (0) | 2020.11.23 |