반환 지향형 프로그래밍
반환 지향 프로그래밍은 스택 스매싱의 진화된 버전이다. 일반적으로 공격들의 이러한 종류들은 상대방이 프로그램의 버그(주로 버퍼 오버런)를 이용함으로써 콜 스택을 조작할 때 발생한다. 버퍼 오버런 시에 사용자가 제공하는 데이터를 적절한 경계 검사 없이 메모리에 저장하는 함수는 적정한 양보다 더 많은 데이터를 받아들일 수 있다. 데이터가 스택에 겹쳐써지면 초과된 데이터는 함수의 변수에 할당된 공간을 넘치게 되고 반환 주소도 겹쳐쓰게 된다. 이 주소는 이후에 함수에 의해서 제어 흐름을 다시 호출자로 넘겨줄 때 사용된다. 만약 겹쳐써졌다면 제어 흐름은 새로운 반환 주소로 넘겨지게 된다.
상속 (객체 지향 프로그래밍)
일부 언어에서는 클래스 선언에 특정한 클래스 한정자를 추가함으로써 그 클래스가 상속 불가하다고 선언할 수 있다. 자바의 "final" 키워드 또는 C#의 "sealed" 키워드가 그 예이다. 이러한 한정자들은 클래스 선언에서 "class" 키워드와 클래스 식별자의 선언 전에 추가된다. 봉인(sealed) 클래스는 특히 개발자들이 소스 코드에 권한이 없고 미리 컴파일된 바이너리에만 권한이 있을 때, 재사용이 제한된다.
봉인 클래스에는 서브클래스가 없다. 그래서 클래스 객체의 참조 또는 포인터가 서브클래스의 인스턴스(존재하지 않음)나 수퍼클래스의 인스턴스(참조 타입을 업캐스팅하는 것은 타입 체계에 위반됨)가 아닌 해당 클래스의 인스턴스를 참조하고 있다는 것을 컴파일 타임에 쉽게 추론할 수 있다: 서브 타입 다형성. 실행 전에 참조되는 객체의 정확한 타입을 알 수 있기 때문에, 초기 바인딩(또는 "정적 디스패치")이 후기 바인딩 ("동적 디스패치" 또는 "동적 바인딩") 대신에 사용될 수 있다. 이것은 사용되고 있는 프로그래밍 언어에서 다중 상속이 지원되는지 또는 단일 상속만이 지원되는지에 따라서 한 회 이상의 가상 메소드 테이블 조회를 필요로 한다.