배열의 요소를 참조할 때, 인덱스 값이 음수이거나 배열의 길이를 벗어날 때 발생
프로세스는 계산한 주소가 배열의 범위 안에 있는지 검사하지 않는다.
배열은 연속된 메모리 공간을 점유하며, 공간의 크기는 개수*자료형 크기
array[n]
: n개의 요소를 가지는 배열
sizeof(array)
=sizeof(element)*n
&array[k]
=array
+sizeof(element)*k
docs
와secret_code
모두 스택에 할당되어 있으므로,docs
에 대한 OOB를 이용하면
secret code
의 값을 쉽게 읽을 수 있다.
read_secret
함수가 실행된 후, 전역 배열secret
에 secret.txt의 내용이 들어갔다.
포인터 변수 secret_code가 지역변수로 선언되어 있으므로, 스택에 포함되어 있다.
docs 바로 위에 적재되어 있음 → -1번째 인덱스를 출력하면 secret의 내용이 출력된다.
24바이트짜리 구조체
Student
10개를 포함하는 배열stu
→ 크기는 240bytes
전역변수isAdmin
과의 주소 차이가 240바이트이므로,
10번째 인덱스를 참조하면isAdmin
을 조작할 수 있다.