반환 지향형 프로그래밍
반환 지향 프로그래밍은 스택 스매싱의 진화된 버전이다. 일반적으로 공격들의 이러한 종류들은 상대방이 프로그램의 버그(주로 버퍼 오버런)를 이용함으로써 콜 스택을 조작할 때 발생한다. 버퍼 오버런 시에 사용자가 제공하는 데이터를 적절한 경계 검사 없이 메모리에 저장하는 함수는 적정한 양보다 더 많은 데이터를 받아들일 수 있다. 데이터가 스택에 겹쳐써지면 초과된 데이터는 함수의 변수에 할당된 공간을 넘치게 되고 반환 주소도 겹쳐쓰게 된다. 이 주소는 이후에 함수에 의해서 제어 흐름을 다시 호출자로 넘겨줄 때 사용된다. 만약 겹쳐써졌다면 제어 흐름은 새로운 반환 주소로 넘겨지게 된다.
반환 지향형 프로그래밍
이후에는 버퍼 오버런 취약점을 익스플로잇하려는 간단한 공격들을 방어하는 기계에서, 전체 함수들 자체 대신에 라이브러리 함수들의 청크들 즉, 부분들을 사용하는 형태의 공격으로 진화되었다. 이 기법은 스택에서 레지스터로 값을 pop 하는 명령어 열들을 갖는 함수를 찾는다. 이러한 코드열들의 신중한 선택은 공격자가 새로운 호출 규약 하에서 함수 호출을 수행하기 위해 적절한 값들을 적절한 레지스터에 넣게 한다. 공격의 나머지는 return-into-library 공격과 같다.