반환 지향형 프로그래밍
반환 지향 프로그래밍은 스택 스매싱의 진화된 버전이다. 일반적으로 공격들의 이러한 종류들은 상대방이 프로그램의 버그(주로 버퍼 오버런)를 이용함으로써 콜 스택을 조작할 때 발생한다. 버퍼 오버런 시에 사용자가 제공하는 데이터를 적절한 경계 검사 없이 메모리에 저장하는 함수는 적정한 양보다 더 많은 데이터를 받아들일 수 있다. 데이터가 스택에 겹쳐써지면 초과된 데이터는 함수의 변수에 할당된 공간을 넘치게 되고 반환 주소도 겹쳐쓰게 된다. 이 주소는 이후에 함수에 의해서 제어 흐름을 다시 호출자로 넘겨줄 때 사용된다. 만약 겹쳐써졌다면 제어 흐름은 새로운 반환 주소로 넘겨지게 된다.
스택 추적
스택 추적 (stack trace, stack backtrace 또는 stack traceback)은 프로그램 실행 중 특정한 시점에서의 스택 프레임에 대한 리포트이다. 프로그램 실행 중 메모리는 보통 두 곳에 동적으로 할당되는데, 스택과 힙이 그것이다. 메모리는 이름에서 보이듯이 스택에서는 인접하여 할당되지만 힙은 그렇지 않다. 스택은 또한 프로그래밍 구조로도 여겨지며 프로그램의 런타임 스택으로 불린다. 기술적으로 메모리 블록이 스택에 할당되면, 이것은 그 이전에 할당된 블록같이 쉽게 제거되지 않는다. 프로그램에서 함수가 호출될 때마다 메모리 블록은 활성 레코드 (activation record)라고 불리는 런타임 스택의 위에 할당된다. 높은 수준에서는, 활성 레코드가 함수의 파라미터와 내부에 선언된 지역변수를 위해서 메모리를 할당한다.