본 글은 중앙대 소프트웨어 보안 수업의 필기 본입니다. 잘못된 부분은 언제든지 정정해주세요!

메모리 취약점 발생
원래 정상 종료 시에는 main함수의 주소를 반환하지만,
해커가 악의적으로 다른 메모리 공간의 주소와 같은 악성코드를 넣어놓으면 스택 오버플로우가 발생한다
반복문에서 종료 조건 설정을 잘못 했다던지, 함수가 무한 호출되며 stack overflow가 발생할 수 있다. 이 때는 반복되는 프로세스가 임의로 다른 프로세스로 교환될 수 있다.
협조적 방법의 경우, 프로세스는 yield라는 시스템 콜을 이용하여 주기적으로 CPU 점유를 포기할 수 있다. 즉, 다른 프로세스가 실행될 수 있도록 자발적으로 반납할 수 있다.
비협조적 방법의 경우, timer interrupt를 이용해 프로그램을 강제 종료한다.
timer interrupt는 부팅 때부터 실행된다.
이런 timer interrupt 때문에 프로세스 스케줄링도 가능한 것!
여태까지는 시분할을 이용해 CPU를 가상화하는 것을 배워보았다.
여기서 중요한 요소 두가지가 있다.
불법적인 파일 접근 시도처럼, 현재 수행 중인 프로세스에서 생성되는 오류, 예외 조건 때문에 발생함. 기본적으로 인터럽트의 한 종류이나, 외부가 아닌 내부에서 유발되는 사건에 의해 발생
즉, 소프트웨어로부터 발생하는 인터럽트!
트랩 핸드러의 주소들

주소별로 트랩 핸들러를 담고 있다. 유저 모드에서는 실행 불가능
프로세스 모르게 메모리를 다른 위치에 재배치하느냐의 문제.
물리적 주소(PA) = 가상 주소(VA) + base (물리적 메모리의 시작 주소)
위 그림에서의 base register는 32KB이다.
바운드 레지스터는 VA의 한계값을 알려준다.
위 그림에서 VA의 bounds는 16KB, base는 32KB이므로, PA의 bounds는 46KB
이건 다음 시간에!