반환 지향형 프로그래밍
반환 지향 프로그래밍은 스택 스매싱의 진화된 버전이다. 일반적으로 공격들의 이러한 종류들은 상대방이 프로그램의 버그(주로 버퍼 오버런)를 이용함으로써 콜 스택을 조작할 때 발생한다. 버퍼 오버런 시에 사용자가 제공하는 데이터를 적절한 경계 검사 없이 메모리에 저장하는 함수는 적정한 양보다 더 많은 데이터를 받아들일 수 있다. 데이터가 스택에 겹쳐써지면 초과된 데이터는 함수의 변수에 할당된 공간을 넘치게 되고 반환 주소도 겹쳐쓰게 된다. 이 주소는 이후에 함수에 의해서 제어 흐름을 다시 호출자로 넘겨줄 때 사용된다. 만약 겹쳐써졌다면 제어 흐름은 새로운 반환 주소로 넘겨지게 된다.
리스코프 치환 원칙
리스코프의 원칙은 새로운 객체 지향 프로그래밍 언어에 채용된 시그니처에 관한 몇 가지 표준적인 요구사항을 강제한다.여기에 더하여 하위형이 만족해야하는 행동 조건 몇 가지가 있다. 이것은 계약이 상속에 대해 어떻게 상호작용하는지에 대한 제약조건을 유도하는 계약에 의한 설계 방법론과 유사한 용어로 자세히 설명되어있다.사전 및 사후 조건에 관한 규칙은 베르트랑 메이어가 1988년의 저서에서 도입한 개념과 동일하다. 메이어와 이후에 '행동의 하위형'이라는 용어를 처음 사용한 피에르 아메리카 모두 임의의 행동의 하위형 개념에 대한 증명 이론적 정의를 제공했으나, 참조나 포인터를 지원하는 프로그래밍 언어에서 일어날 수 있는 에 대한 고려는 없었다. 1994년 리스코프와 윙이 만든 중요한 개선점은 별칭에 대한 고려였고 핵심 요소는 이력 제약 조건이다. 메이어와 아메라카의 정의에서는 LSP에서 허용하지 않는 변경 가능 지점은 변경 불가 지점의 행동의 하위형이어야 했다.