배열은 같은 자료형의 요소들로 이루어져 있는데, 각 요소의 위치를 인덱스라고 한다.
배열을 사용할 때 잦은 실수가 많이 일어난다.
실수들은 운이 좋으면 아무 일도 일어나진 않지만 때에 따라 취약점이 발견될 수도 있다.
즉, 임의 인덱스에 접근할 수 있는 OOB(Out of Bounds)가 일어날 수 있다.
배열은 연속된 메모리 공간을 점유하는데 배열이 점유하는 공간의 크기는 요소의 개수와 요소 자료형의 크기를 곱한 값이 된다.
배열이 포함하는 요소의 개수는 배열의 길이라고도 부른다.
배열의 각 요소의 주소는 배열의 주소, 요소의 인덱스, 요소 자료형의 크기를 이용하여 계산한다.
OOB는 배열의 요소를 참조할 때, 인덱스 값이 음수거나 배열이 길이를 벗어날 때 발생한다. 즉, 개발자가 인덱스 값의 범위를 명시적으로 검사하지 않는다면 프로세스는 배열이 범위 안에 있는지 검사하지 않으므로 배열의 범위를 벗어나 특정 메모리 값을 참조할 수 있게 된다.
임의의 주소 값을 읽으려면 읽으려는 변수와 배열의 오프셋으 알아야한다.
배열과 변수가 같은 세그먼트에 할당되어 있으면 둘 사이의 오프셋을 항상 일정하므로 디버깅으로 확인하면 된다. 하지만 만약 같은 세그먼트가 아니라면 다른 취약점을 찾아 두 변수의 주소를 구하고 차이를 구해야한다.