문제 내용: 다음은 스택 버퍼 오버플로우 공격을 효과적으로 방어하기 위한 스택 보호 메커니즘을 서술한 것이다. ⑦~에 들어갈 말을 바르게 연결한 것은?
  스택가드(stackguard)는 가장 잘 알려진 보호 메커니즘 중 하나이다. 이것은 GCC 컴파일러의 확장 버전으로 추가의 함수 진입과 종료 코드를 삽입한다. 추가되는 함수 진입 코드는 지역변수를 위한 공간을 할당하기 전에 이전(㉠) 주소 앞에(㉡) 값을 기록한다. 추가되는 함수 종료 코드는 이전(⑦)를 복원하고 제어를(㉢)로 이동하는 보통의 함수 종료 연산을 수행하기 전에(㉡) 값이 변경되었는지를 검사한다. 전통적인 스택 버퍼 오버플로우 시도는 이전 (㉠)와()를 변경하기 위해(㉡) 값을 바꾸어야 하는데, 만약 변경되었다면 프로그램을 종료하게 된다.
선택지 1: 스택포인터
  반환주소
  카나리아(canary)
선택지 2: 스택포인터
  카나리아(canary)
  반환주소
선택지 3: 프레임 포인터
  카나리아(canary)
  반환주소
선택지 4: 프레임 포인터
  반환주소
  스택포인터