KR102298403B1 - 제어 전송 인스트럭션으로의 리턴 - Google Patents

제어 전송 인스트럭션으로의 리턴 Download PDF

Info

Publication number
KR102298403B1
KR102298403B1 KR1020177003687A KR20177003687A KR102298403B1 KR 102298403 B1 KR102298403 B1 KR 102298403B1 KR 1020177003687 A KR1020177003687 A KR 1020177003687A KR 20177003687 A KR20177003687 A KR 20177003687A KR 102298403 B1 KR102298403 B1 KR 102298403B1
Authority
KR
South Korea
Prior art keywords
instruction
processor
call
mode
state
Prior art date
Application number
KR1020177003687A
Other languages
English (en)
Other versions
KR20170031728A (ko
Inventor
바이주 파텔
베드비야스 샨보구에
라비 사히타
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20170031728A publication Critical patent/KR20170031728A/ko
Application granted granted Critical
Publication of KR102298403B1 publication Critical patent/KR102298403B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/74Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information operating in dual or compartmented mode, i.e. at least one secure mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Abstract

실시예에서, 본 발명은 디코드 유닛 및 실행 유닛을 갖는 프로세서를 포함한다. 디코드 유닛은 제어 전송 인스트럭션을 디코딩하고, 실행 유닛은 제어 전송 인스트럭션을 실행하며, 제어 전송 인스트럭션은 호출 인스트럭션 및 리턴 인스트럭션을 포함한다. 프로세서는, 리턴 인스트럭션 직후에 실행될 다음 인스트럭션이 호출 인스트럭션이 아닌 경우에, 프로세서가 오류를 발생시키는 제1 모드에서 동작한다.

Description

제어 전송 인스트럭션으로의 리턴{RETURNING TO A CONTROL TRANSFER INSTRUCTION}
ROP(Return-oriented programming)는 공격자가 머신 인스트럭션들의 공격자-선택 시퀀스(attacker-chosen sequence)를 실행하기 위해 호출 스택(call stack)의 소프트웨어 제어를 이용하는 컴퓨터 보안 익스플로잇 기술(computer security exploit technique)이다. 전형적으로, 이들 인스트럭션들의 클러스터는 기존 프로그램 코드 내의 프로그래머-의도된 또는 비의도된(programmer-intended or unintended) 리턴(RET) 인스트럭션으로 종료된다. 의도된 또는 비의도된 RET 인스트럭션은 실행을 스택 상의 공격자-선택 리턴 어드레스로 전송하여, 공격자가 프로그램 코드를 통해 실행 제어를 유지하도록 허용하고, 실행을 인스트럭션들의 선택된 시퀀스의 다음 세트로 유도하여, 공격자의 의도를 달성하도록 한다. 공격자-선택 인스트럭션 시퀀스의 클러스터는 가젯(gadgets) 이라고 지칭된다. 일부 가젯은 프로그램 또는 라이브러리 내로 컴파일링된 함수에서 공격자에 의해 발견되며, 다른 것들은 가젯으로 디코딩되는 단지 임의의 바이트 시퀀스이다.
때때로 실행된 가젯은 잘 정의된 동작(well-defined operation)을 수행할 수 있는 RET 인스트럭션에 의해 뒤따르는 단지 몇 개의 어셈블러 인스트럭션을 포함한다. RET 인스트럭션이 하나의 가젯으로부터 다음 가젯으로 랜딩하는 등으로 되도록 이들 가젯의 세트를 함께 체인화함으로써, 멀웨어 라이터(malware writer)는, 어떠한 코드도 프로그램 내로 주입하지 않고서도, 공격자가 원하는 인스트럭션들의 보다 긴 시퀀스를 실행할 수 있다.
ROP 기술은 스택 버퍼 오버플로우와 같은 취약성을 이용하여, 포인터들의 체인화된 리스트를 포함하는 페이로드를 가젯으로 전달한 후, 스택 버퍼 오버플로우를 수행하는데 이용되었던 함수의 리턴 어드레스를 시퀀스에서의 제1 가젯에 대한 포인트에 오버라이팅한다. 이러한 함수가 RET 인스트럭션을 실행할 때, 제어는 함수 호출자가 아니라 제1 가젯에게 전송된다. 그 다음, 이러한 가젯은 스택 상의 페이로드로부터 하나 이상의 데이터 요소를 소모할 수 있다. 이러한 익스플로잇 기술을 이용함으로써, 멀웨어 라이터는 프로그램의 제어 흐름을 변경하고, (예를 들면, 인스트럭션의 중간에 대한) 프로그램에서의 비프로그래머 의도 위치(non-programmer intended location)로의 제어 전달을 초래할 수 있다.
도 1은 본 발명의 실시예에 따른 프로세서의 일부분의 블록도이다.
도 2는 본 발명의 실시예에 따른 상태 머신의 블록도이다.
도 3은 본 발명의 실시예에 따른 방법의 흐름도이다.
도 4는 본 발명의 일 실시예에 따른 프로세서 코어의 블록도이다.
도 5는 본 발명의 실시예에 따른 멀티코어 프로세서의 블록도이다.
도 6은 본 발명의 실시예에 따른 다수의 코어를 포함하는 프로세서의 실시예이다.
도 7은 본 발명의 실시예에 따른 시스템의 블록도이다.
본 발명의 실시예는 리턴(RET) 인스트럭션이 호출(CALL) 인스트럭션으로 리턴되고 있는지의 여부를 판정하고, 만약 리턴되고 있지 않다면, 리턴 인스트럭션을 벗어나는 인스트럭션이 프로세서의 아키텍쳐 상태로 커미팅(committing)되는 것을 방지하기 위한 액션을 취하도록 인에이블링될 프로세서를 제공한다. 이러한 방식으로, 프로그램 내에서의 적어도 특정한 비의도된 제어 전송이 제거될 수 있어, 멀웨어 라이터가 이용할 수 있는 가젯의 수를 제한하게 된다. 보다 구체적으로, 실시예는 리턴 인스트럭션이 상태 머신을 아밍(arming)하여, 하드웨어가 리턴 인스트럭션이 단지 호출(CALL) 인스트럭션으로만 리턴하도록 강제할 수 있게 하는 프로세서 모드를 제공할 수 있다. 이러한 제어 흐름 실행은 프로그램에서의 악의적인 가젯에 대한 취약성을 감소시킬 수 있다.
본 발명의 실시예는 보호된 코드가 리컴파일링(recompiling)될 것을 요구하지 않고서, ROP 공격에 대해 보호하도록 요망될 수 있다. 본 발명의 실시예는 (기능적으로 동등하지만 보다 큰 보다 복잡한 시퀀스를 이용함으로써 RET의 모든 경우들을 제거하도록 바이너리(binary)를 리라이팅(rewriting)하는 것과 같이) ROP에 대하여 완화시키기 위한 소프트웨어 전용 기술이 일반적으로 훨씬 더 큰 바이너리를 초래하고, 프로그램의 실행 시간을 증가시킴으로써, 전력 효율성이 기본 관심사인 모바일 애플리케이션에 대해 적합하지 않게 된다는 점에서, 모바일 및 다른 휴대용 저전력 시스템에 특히 적용가능할 수 있다. 또한, 본 발명의 실시예는 긍정 오류(false positives)를 초래할 수 있는 CALL/RET 카운터, 통계(statistics) 및/또는 휴리스틱(heuristics)의 이용을 회피하는 것을 요망할 수 있다.
보다 많은 컴퓨터 시스템이 인터넷, 텍스트 및 멀티미디어 애플리케이션에서 이용됨에 따라, 추가적인 프로세서 지원이 시간에 걸쳐 도입되어 왔다. 일 실시예에서, 인스트럭션 세트는, 데이터 타입, 인스트럭션, 레지스터 아키텍쳐, 어드레싱 모드, 메모리 아키텍쳐, 인터럽트 및 예외 처리(interrupt and exception handling), 및 외부 입력 및 출력(I/O)을 포함하는 하나 이상의 컴퓨터 아키텍쳐와 관련될 수 있다.
실시예에서, ISA(instruction set architecture)는 하나 이상의 인스트럭션 세트를 구현하는데 이용된 프로세서 로직 및 회로를 포함하는 하나 이상의 마이크로-아키텍쳐에 의해 구현될 수 있다. 따라서, 상이한 마이크로-아키텍쳐들을 갖는 프로세서들이 공통 인스트럭션 세트의 적어도 일부분을 공유할 수 있다. 예를 들어, 캘리포니아 산타 클라라의 Intel Corp.로부터의 Intel® Pentium 4 프로세서, Intel® Core™ 및 Intel® Atom™ 프로세서, 및 캘리포니아 서니베일의 Advanced Micro Devices, Inc.로부터의 프로세서들은 상이한 내부 설계를 갖지만, (보다 새로운 버젼으로 추가된 일부 확장을 갖는) x86 인스트럭션 세트의 거의 동일한 버젼을 구현한다. 유사하게, ARM Holdings, Ltd., MIPS 또는 그들의 라이센스(licensees) 또는 어답터(adopters)와 같은 다른 프로세서 개발 회사에 의해 설계된 프로세서들이 공통 인스트럭션 세트의 적어도 일부분을 공유할 수 있지만, 상이한 프로세서 설계를 포함할 수 있다. 예를 들어, ISA의 동일한 레지스터 아키텍쳐가 전용의 물리적 레지스터, 레지스터 리네이밍 메카니즘을 이용(예를 들면, RAT(register alias table), ROB(reorder buffer) 및 리타이어먼트 레지스터 파일(retirement register file)을 이용)하는 동적으로 할당된 물리적 레지스터를 포함하는 새롭거나 또는 잘 알려진 기술을 이용하는 상이한 마이크로-아키텍쳐에서 상이한 방식으로 구현될 수 있다. 일 실시예에서, 레지스터는 하나 이상의 레지스터, 레지스터 아키텍쳐, 레지스터 파일, 또는 소프트웨어 프로그래머에 의해 어드레싱 가능하거나 또는 가능하지 않을 수 있는 다른 레지스터 세트를 포함할 수 있다.
인스트럭션 세트는 하나 이상의 인스트럭션 포맷을 포함할 수 있다. 그러한 인스트럭션 포맷은, 다른 것들 중에서, 수행될 동작 및 그 동작이 수행될 오퍼랜드(들)을 지정하기 위한 다양한 필드(비트수, 비트 위치 등)을 나타낼 수 있다. 일부 인스트럭션 포맷은 인스트럭션 템플릿(template)(또는 서브 포맷)에 의해 더 분할되어 정의될 수 있다. 예를 들어, 주어진 인스트럭션 포맷의 인스트럭션 템플릿은 인스트럭션 포맷의 필드들의 상이한 서브세트를 갖도록 정의 및/또는 상이하게 해석된 주어진 필드를 갖도록 정의될 수 있다. 일 실시예에서, 인스트럭션은 인스트럭션 포맷을 이용하여(및, 만약 정의되는 경우, 해당 인스트럭션 포맷의 인스트럭션 템플릿들 중 주어진 하나에서) 표현되고, 동작 및 그 동작이 동작할 오퍼랜드를 지정하거나 또는 나타낸다.
실시예에서, ISA는 CALL을 실행하는 프로세서가 제1 프로그램에서의 CALL 이후의 (예를 들면, 어드레스 순서에서) 순차적으로 다음 인스트럭션이 아닌 인스트럭션을 실행하게 함으로써, 제어를 제1 프로그램, 절차, 함수, 루틴, 모듈 또는 다른 그룹의 코드 또는 인스트럭션(일반적으로 프로그램로서 지칭됨)으로부터 제2 프로그램으로 전송하는데 이용되는, 본 명세서에서 CALL 인스트럭션으로서 지칭되는, 제1 제어 전송 인스트럭션을 포함할 수 있다. 전형적으로, 프로세서의 실행 제어는 프로세서가 호출이 만들어지는 제2 프로그램의 해당 부분을 실행한 이후에 호출 프로그램으로 리턴하기 위한 것이다. 호출 프로그램으로 리턴하기 위한 실행 제어를 제공하기 위해, CALL의 실행은 프로세서에 의해 어드레싱가능한 호출 스택 또는 다른 데이터 구조 상에, 다음 인스트럭션의 어드레스를 푸싱(pushing), 라이팅(writing), 또는 그렇지 않은 경우 저장하는 것을 포함할 수 있다. 그 다음, 본 명세서에서 RET 인스트럭션으로서 지칭되는 제2 제어 전송 인스트럭션이, 실행된 제2 프로그램의 원하는 부분 이후의 제1 프로그램에서의 해당 어드레스로 제어를 전송하기 위한 제2 프로그램에 의해 이용될 수 있다.
본 발명의 실시예에서, CALL 인스트럭션의 거동(behavior) 및 RET 인스트럭션의 거동이 수정되는 프로세서 모드(본 명세서에서 RET_TO_CALL 모드로서 지칭됨)가 제공될 수 있다.
RET_TO_CALL 모드에 있지 않을 때, 프로세서에 의한 CALL 인스트럭션의 실행은 CALL 이후의 순차적으로 다음 인스트럭션의 어드레스를 스택 상으로 푸싱하는 것을 포함한다. RET_TO_CALL 모드에 있을 때, 프로세서에 의한 CALL 인스트럭션의 실행은 CALL 인스트럭션의 어드레스를 스택 상으로 푸싱하는 것을 포함한다.
RET_TO_CALL 모드에 있을 때, 프로세서에 의한 RET 인스트럭션의 실행은 프로세서가 RET 인스트럭션이 제어를 리턴하는 위치가 유효한 호출 사이트(valid callsite)(예를 들면, CALL 오피코드(opcode)를 포함함)인지를 체크하는 것을 포함한다. 만약 그렇다면, 실행 제어가 유효 호출 사이트로 전송되고, CALL은 NOP(no-operation) 인스트럭션으로서 실행되고, 그 다음 실행 제어는 CALL 이후의 (어드레스 순서에서) 순차적으로 다음 인스트럭션으로 전송된다. 그 위치가 유효 호출 사이트가 아닌 경우, 프로세서는 제어 흐름 위반(control flow violation)을 생성하고, 그에 따라 제어를 유효 호출 사이트를 바로 뒤따르지 않는 인스트럭션으로 리턴하고자 시도하는 가젯의 실행을 차단하게 된다.
실시예에서, RET 인스트럭션을 실행 및 제어를 유효 호출 사이트로 리턴하는 프로세서와 관련하여, 소프트웨어 기반 정책 체크(software-based policy chech)를 이용하여 RET 인스트럭션을 호출 사이트로 매칭, 예를 들면, 호출 사이트가 실행 제어가 해당 특정 RET 인스트럭션으로 이끄는 인스트럭션들의 시퀀스로 전송되었던 특정 호출 사이트인지를 체크할 수 있다.
이제 도 1을 참조하면, 본 발명의 실시예에 따른 프로세서의 일부분의 블록도가 도시된다. 도 1에 도시된 바와 같이, 프로세서의 부분(100)은 순차(in-order) 또는 비순차(out-of-order) 프로세서와 같은 파이프라이닝된 프로세서의 다양한 부분들을 포함한다. 볼 수 있듯이, 주어진 ISA의 매크로-인스트럭션일 수 있는 입력되는 인스트럭션이, 인스트럭션을 예를 들면, μops(micro-operations)와 같은 하나 이상의 보다 작은 인스트럭션으로 디코딩하도록 구성되는 디코드 유닛(110)에 제공된다.
도시된 바와 같이, 디코드 유닛(110)은 본 발명의 실시예에 따른 CTI 로직(115)을 포함한다. 일반적으로, CTI 로직(115)은 각각의 입력되는 인스트럭션을 분석하고, 인스트럭션이 제어 전송과 관련되는지의 여부를 판정할 수 있다. 만약 그렇다면, CTI 로직(115)은 특정 상태 정보를 하나 이상의 μops와 관련시킬 수 있다. 이러한 상태는 적어도 특정 제어 전송 인스트럭션의 디코딩에 의해 수정되는 상태 머신(116)의 상태를 나타낸다. 만약, 그 대신에, 인스트럭션이 제어 전송과 관련되지 않는다면, 상이한 상태가 하나 이상의 μops와 관련될 수 있다.
보다 구체적으로, 그리고 이하에 도 2를 참조하여 기술되는 바와 같이, 입력되는 인스트럭션이 제2 제어 전송 인스트럭션(예를 들면, RET)일 때, CTI 로직(115) 내의 상태 머신(116)의 전이가 아이들 상태로부터 주어진 대기 상태로 패스되도록 발생될 수 있다. 더욱이, 이러한 대기 상태를 반영하기 위해, 주어진 인코딩이 제2 제어 전송 인스트럭션으로부터 디코딩된 하나 이상의 μops와 관련될 수 있다. 만약, 다음 입력되는 인스트럭션이 제2 제어 전송 인스트럭션을 바로 뒤따르는 제1 제어 전송 인스트럭션(예를 들면, CALL)인 경우, 상태 머신(116)은 아이들 상태로 리턴되고, 주어진 인코딩을 디코딩된 하나 이상의 μops와 관련시킬 수 있다. 기술되는 바와 같이, 만약 제2 제어 전송 인스트럭션(예를 들면, RET) 이후에 제1 제어 전송 인스트럭션(예를 들면, CALL)이 바로 뒤따르지 않는 경우, CTI 로직(115)은 오류(fault) 또는 예외(exception)를 프로세서 파이프라인 내로 삽입할 수 있다(그리고, 상태 머신은 대기 상태로 남아 있을 수 있음). 오류 또는 예외는 이전에 정의된 오류 또는 예외(예를 들면, #GP)이거나 또는 새롭게 정의된 오류 또는 예외일 수 있으며, 어떠한 경우도, 본 명세서에서는 오류로서 지칭될 수 있다.
그러지 않은 경우, 만약 상태 머신(116)이 아이들 상태에 있고, 입력되는 인스트럭션이 제어 전송과 관련되지 않는다면, 아이들 상태 정보의 인코딩은 하나 이상의 μops와 관련되어, 상태 머신(116)이 아이들 상태로 유지됨을 나타낼 수 있다.
따라서, 도 1에서 볼 수 있듯이, 디코드 유닛(110)은 μops 및 관련 상태 정보의 스트림을 출력하여, CTI 로직(115) 내의 상태 머신(116)의 상태를 나타낸다. 이들 μops 및 상태 정보는 μops의 스트림에 의해 지시된 동작을 실행하는 ALU(arithmetic logic unit), 부동 소수점 유닛(floating point unit) 등을 포함하는 다양한 타입의 유닛을 포함할 수 있는 실행 로직(120)으로 제공될 수 있다. 실시예에서, 제1 제어 전송 인스트럭션(예를 들면, CALL)은, 제2 제어 전송 인스트럭션(예를 들면, RET)을 바로 뒤따를 때, 단지 상태 머신(200)에서의 상태 전이를 제어하며, 프로세서의 실행 로직에서 이러한 제1 제어 전송 인스트럭션(예를 들면, CALL)은 NOP로서 실행되고, 프로그램 의미(program semantics)에서의 어떠한 변경도 초래하지 않는다.
다음, μops의 결과는 주어진 동작이 성공적으로 수행되었는지 여부를 판정하고, 만약 그렇다면 그것을 리타이어링하고, 그렇지 않은 경우 실행의 결과로서 원하지 않는 상태가 발생되는 경우 오류 또는 예외를 발생시키도록 구성된 리타이어먼트 유닛(130)에 제공된다. 비순차 프로세서에서, 리타이어먼트 유닛(130)은 임의의 순서로 실행될 수 있는 인스트럭션들을 다시 프로그램 순서로 재정렬(reorder)하도록 더 동작할 수 있다. 인스트럭션이 적절하게 리타이어링될 때, 그것은 메모리 서브시스템과 같은 프로세서의 다른 부분들에 제공될 수 있다.
도 1에 도시되는 바와 같이, 리타이어먼트 유닛(130)은 제어 전송 인스트럭션에 관하여 적절한 거동이 발생되는지의 여부를 판정하도록 구성될 수 있는 CTI 오류 로직(135)을 포함한다. 보다 구체적으로, 본 명세서에 기술된 바와 같이, CTI 오류 로직(135)은 리타이어링될 주어진 제2 제어 전송 인스트럭션(예를 들면, RET) 이후에 적절한 제1 제어 전송 인스트럭션(예를 들면, CALL)이 바로 뒤따르지 않을 때에 오류를 발생시키도록 동작할 수 있다. 실시예에서, 이러한 판정은 디코드 유닛(110)으로부터 나온 μops와 통신된 삽입된 오류 및 상태 정보에 적어도 부분적으로 기초할 수 있다. CTI 오류가 검출된다면, 오류는 오류 거동을 해결하기 위해 주어진 처리기에 따른 다양한 액션을 취할 수 있는 오류 처리기(140)로 통신된다. 따라서, 실시예에서, 다음 인스트럭션이, 제어 전송 인스트럭션이 적절한 제어 전송 인스트럭션이 아닌 이후에 리타이어링하도록 제공될 때, 리타이어먼트 유닛(140)은 인스트럭션이 리타이어링하지 않도록 오류-클래스 예외(fault-class exception)(예를 들면, 일반 보호 오류(general protection fault))를 전달함으로써 이러한 CTI 오류에 응답한 오류를 전달할 수 있다.
여전히 도 1을 참조하면, 예측 실패(misprediction)이 발생되고, 인스트럭션이 올바른 브랜치(branch)에 따라 재실행되는 경우, 리타이어먼트 유닛(130)은 피드백 경로를 통해 디코드 유닛(110)과 통신함으로써, 취해질 적절한 브랜치 또는 다른 코드 흐름의 표시를 제공할 수 있다. 더욱이, 이러한 피드백 경로를 통해, 상태 머신 복원 신호가, CTI 로직(115)의 상태 머신(116)이 프로그램 흐름에서의 이러한 변경을 반영하도록 적절한 상태에 놓일 수 있도록 통신될 수 있다. 다른 방식으로 기술하면, 오류가 예측 실패된 경로에 제공될 때, 이러한 예측 실패로 인한 오류는 발생되지 않고, 그에 따라 상태 머신 복원 신호는 상태 머신(116)이 대기 상태로부터 다시 아이들 상태 또는 대기 상태로 패스하도록 할 수 있으며, 또한 마지막 성공적인 인스트럭션이 리타이어링하도록 나타냄으로써, 디코드 유닛(110)이 올바른 브랜치의 인스트럭션을 디코딩할 수 있도록 한다. 도 1의 실시예에서의 이러한 상위 레벨에서 도시되지만, 본 발명의 영역은 이와 관련하여 제한되지 않음을 이해해야 한다.
이제 도 2를 참조하면, 본 발명의 실시예에 따른 상태 머신의 블록도가 도시된다. 도 2에 도시된 바와 같이, 상태 머신(200)은 도 1의 CTI 상태 머신(116)에 대응할 수 있다. 상태 머신(200)은 상태 머신이 프로세서의 리셋 이후에 놓이게 되는 IDLE 상태(210)에서의 동작 시작한다.
RET 인스트럭션이 디코딩될 때, 상태 머신은 WAIT_FOR_CALL 상태(220)로 진입한다. 만약 디코딩되는 다음 인스트럭션이 CALL 인스트럭션이 아니라면, 상태 머신(200)은 오류의 생성을 초래하는 DELIVER_FAULT 동작(230)을 수행한다(그리고, 상태 머신(200)은 WAIT_FOR_CALL 상태(220)로 유지될 수 있음). 만약, 그 대신에, 제어 전송 인스트럭션을 뒤따르는 디코딩될 다음 인스트럭션이 CALL 인스트럭션이면, 상태 머신(200)은 다시 IDLE 상태(210)로 전이하고, CALL 인스트럭션은 NOP 인스트럭션으로서 실행된다. 따라서, 상태 머신(200)은 다음의 두 부분의 규칙, 즉, 첫째, RET 인스트럭션의 타겟에서의 인스트럭션은 CALL 인스트럭션이어야 한다; 및 둘째, 인스트럭션이 실제로 CALL인 경우, CALL을 NOP로서 취급한다 라는 규칙을 시행한다. 만약, 이러한 규칙의 제1 부분이 위반된다면, 위반 인스트럭션(RET 인스트럭션의 타겟에서의 인스트럭션)은 오류이고, 리타이어링되는 것으로부터 방지된다.
상태 머신(200)이 WAIT_FOR_CALL 상태에 있을 때에 발생되는 인터럽트/예외/트랩(trap) 및 VM 엑시트(exits)는, DELIVER_FAULT 상태 대신에 IDLE 상태로의 상태 머신의 전이를 초래할 수 있다(도 2에서의 도시의 용이성을 위해 도시되지 않음). 이것은, RET의 타겟으로 인해 전달된 오류가 타겟 인스트럭션 자체(예를 들면, 정렬 체크, 정규(canonical) 체크 등과 같은 다양한 상태로 인한 #NM, #GP)에 의해 초래된 임의의 오류보다 높은 우선순위이거나, 또는 VM 엑시트 인스트럭션(예를 들면, XGETBV, CPUID 등 상에서 나옴)인 타겟 인스트럭션으로 인해 초래된 임의의 VM 엑시트이기 때문이다. 이러한 동작은 이들 비동기적인 이벤트(asynchronous event)가 비의도된 예외를 초래하지 않도록 보장한다. 이들 이벤트는 정상 프로그램 실행에 대해 비동기적이므로, 공격자는 그것이 RET 이후에 전달되도록 사실적으로 강제할 수 없고, 따라서 그것은 공격자가 ROP 보안을 우회하기 위한 유효한 방식이 아니다. 인터럽트/예외/트랩 또는 VM 엑시트로 인한 그러한 상태 머신 전이시에, 상태 머신(200)의 이전(old) 상태(예를 들면, WAIT_FOR_CALL)가 레지스터에 보존되어, 예외 처리기가 인트럽트된 프로그램의 실행을 재개하기 전에, 상태 머신(200)을 다시 적절한 대기 상태로 놓이게 허용할 수 있다. 실시예에서, WAIT_FOR_CALL 상태(220)는 인터럽트/예외/트랩이 프로세서 특권 레벨(processor privilege level)에 대한 변경을 초래하는 경우에 보존되고, 인터럽트된 프로세스로의 리턴시에 복원될 수 있다. 실시예에서, 제1 컨텍스트 또는 프로세스와 관련된 WAIT_FOR_CALL 상태(220)는 제2 컨텍스트/프로세스로의 컨텍스트/프로세스 스위치 및/또는 프로세서 특권 레벨에 대한 다른 변경과 관련하여 운영 체제 스케쥴러에 의해 보존되고, 제1 컨텍스트/프로세스로의 리턴과 관련하여 복원될 수 있다.
따라서, 예로서, 표 1에 도시된 바와 같은 악의의 가젯 실행이, 예로서, 표 2에 도시된 바와 같은, 본 발명의 실시예에 의해 방지될 수 있다.
Figure 112017013638889-pct00001
Figure 112017013638889-pct00002
표 3은 예로서 표 2를 참조하여, 본 발명의 실시예에 따른, RET 및 CALL 인스트럭션들을 실행하는 프로세서의 거동을 요약한다. 표 3에서, 제1 열(column)은 RET_TO_CALL 모드가 인에이블링 되는지의 여부를 보여주고, 제2 열은 (예를 들면, 상태 머신(200)의 상태(220)에 관해 전술한 바와 같이) WAIT_FOR_CALL 프로세서 상태 요소가 아밍 되는지의 여부를 보여주고, 제3 열은 RET 인스트럭션을 실행하는 프로세서의 거동을 보여주고, 제4 열은 CALL 인스트럭션을 실행하는 프로세서의 거동을 보여준다.
Figure 112017013638889-pct00003
이제, 도 3을 참조하면, 본 발명의 실시예에 따른 방법의 흐름도가 도시된다. 도시된 바와 같이, 방법(300)은 본 명세서에서 기술된 바와 같이, CTI 상태 머신을 포함하는 프로세서 전단 하드웨어 및/또는 로직에 의해 수행될 수 있다. 도 3에 도시된 동작은 제어 전송-관련 인스트럭션에 대한 상태 머신 동작과 관련될 수 있음을 주지해야 한다. 다른 인스트럭션의 경우, 상태 머신이 현재 아이들 상태에 있다면, 그것은 그 곳에 유지된다.
방법(300)은 박스(310)에서, 프로세서에 의해 실행되는 프로세스를 위한 다음 인스트럭션을 페치함으로써 시작된다. 박스(312)에서, RET_TO_CALL 모드가 현재 프로세스에 대해 인에이블링 되는지의 여부가 판정된다. 만약 그렇다면, 방법(300)은 박스(320)로 계속된다. 만약 그렇지 않다면, 방법(300)은 박스(314)로 계속되고, 여기서 임의의 이전에 알려진 방안에 따라 인스트럭션이 실행되고, 그 다음 박스(310)로 다시 되돌아간다.
박스(320)에서, 프로세서가 WAIT_FOR_CALL 상태에 있는지의 여부가 판정된다. 만약 그렇다면, 방법(300)은 박스(330)로 계속된다. 만약 그렇지 않다면, 방법(300)은 박스(322)로 계속되고, 여기서 인스트럭션이 CALL, RET 또는 다른 인스트럭션인지의 여부가 판정된다. 인스트럭션이 CALL 또는 RET가 아니라면, 방법(300)은 박스(314)로 계속된다. 인스트럭션이 CALL이면, 방법(300)은 박스(324)로 계속되고, 여기서 CALL 인스트럭션의 어드레스가 스택으로 푸싱되고, CALL이 실행되며, 그 다음 박스(310)로 다시 되돌아간다. 인스트럭션이 RET이면, 방법(300)은 박스(326)로 계속되고, 여기서 프로세서가 WAIT_FOR_CALL 상태로 놓이게 되고, 그 다음 박스(328)로 계속되고, 여기서 RET가 임의의 (스택으로부터 어드레스를 팝핑(popping)하고, 제어를 해당 어드레스로 전송하는 것을 포함하는) 이전에 알려진 방안에 따라 실행되며, 그 다음 박스(310)로 다시 되돌아간다.
박스(330)에서, 인스트럭션이 CALL 인지의 여부가 판정된다. 만약 그렇다면, 방법(300)은 박스(340)로 계속된다. 만약 그렇지 않다면, 방법(300)은 박스(332)로 계속되고, 여기서 제어 흐름 위반이 생성된다.
박스(340)에서, CALL이 NOP로서 실행된다. 박스(342)에서, WAIT_FOR_CALL 상태가 디스아밍된다.
이제 도 4를 참조하면, 본 발명의 일 실시예에 따른 프로세서 코어의 블록도가 도시된다. 도 4에 도시된 바와 같이, 프로세서 코어(600)는 멀티-스테이지 파이프라이닝된 비순차 프로세서(multi-stage pipelined out-of-order processor)일 수 있다. 코어(600)는 하나 이상의 인스트럭션 세트(예를 들면, 보다 새로운 버젼으로 추가된 일부 확장을 갖는 x86 인스트럭션 세트); 캘리포니아 서니베일의 MIPS Technologies의 MIPS 인스트럭션 세트; 캘리포니아 서니베일의 ARM Holdings의 (NEON과 같은 옵션의 추가적인 확장을 갖는) ARM 인스트럭션 세트를 지원할 수 있다. 코어는 (동작들 또는 스레드들의 둘 이상의 병렬 세트를 실행하는) 멀티스레딩(multithreading)을 지원할 수 있고, 타임 슬라이스드 멀티스레딩, 동시 멀티스레딩(단일의 물리적 코어가, 물리적 코어가 동시에 멀티스레딩하는 스레드들 각각에 대한 논리적 코어를 제공함), 또는 그들의 조합(예를 들면, Intel® Hyperthreading 기술에서와 같은, 타임 슬라이스드 페칭 및 디코딩 및 그 후의 동시 멀티스레딩)을 포함하는 다양한 방식을 그렇게 할 수 있다.
코어(600)를 포함하는 프로세서는 Intel Corporation으로부터 이용가능한 Core™ i3, i5, i7, 2 Duo and Quad, Xeon™, Itanium™, XScale™ 또는 StrongARM™ 프로세서와 같은, 범용 프로세서일 수 있다. 대안적으로, 프로세서는 ARM Holdings, Ltd, MIPS 등으로부터의 설계와 같은, 다른 회사로부터의 것일 수 있다. 프로세서는 예를 들면, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, 코-프로세서, 임베디드 프로세서 등과 같은 특수 목적 프로세서일 수 있다. 프로세서는 하나 이상의 칩 상에서 구현될 수 있고, 예를 들면, BiCMOS, CMOS 또는 NMOS와 같은 다수의 프로세스 기술들 중 임의의 것을 이용하여, 하나 이상의 기판의 일부이고/이거나 그 위에 구현될 수 있다.
도 4에 도시된 바와 같이, 코어(600)는 통합된 전압 레귤레이터(609)의 결과로서 다양한 전압 및 주파수에서 동작할 수 있다. 도 4에 도시된 바와 같이, 코어(600)는 실행될 인스트럭션을 페치하고, 프로세서에서의 이후의 이용을 위해 그것을 준비하는데 이용될 수 있는 전단 유닛(610)을 포함한다. 예를 들어, 전단 유닛(610)은 페치 유닛(601), 인스트럭션 캐시(603) 및 인스트럭션 디코더(605)를 포함할 수 있다. 인스트럭션 디코더(605)는 본 명세서에서 기술된 바와 같은 CTI 동작을 수행하기 위한 관련된 CTI 상태 머신을 갖는, 본 발명의 실시예에 따른 CTI 로직(606)을 포함한다. 일부 구현에서, 전단 유닛(610)은 마이크로-동작 저장부 뿐만 아니라 마이크로코드 저장부와 더불어, 트레이스 캐시(trace cache)를 더 포함할 수 있다. 페치 유닛(601)은 예를 들면, 메모리 또는 인스트럭션 캐시(603)로부터 매크로-인스트럭션을 페치하고, 그것을 인스트럭션 디코더(605)로 공급하여 그것을 프리미티브(primitive), 즉, 프로세서에 의한 실행을 위한 마이크로-동작으로 디코딩할 수 있다.
전단 유닛(610)과 실행 유닛(620) 사이에는, 마이크로-인스트럭션을 수신하고, 실행을 위해 그것을 준비하는데 이용될 수 있는 비순차 (OOO) 엔진(615)이 연결된다. 보다 구체적으로, OOO 엔진(615)은 마이크로-인스트럭션 흐름을 재정렬하고, 실행을 위해 요구되는 다양한 자원을 할당할 뿐만 아니라, 논리적 레지스터(logical register)의 리네이밍(renaming)을 레지스터 파일(630) 및 확장된 레지스터 파일(635)과 같은 다양한 레지스터 파일 내의 저장 위치 상으로 제공하기 위한 다양한 버퍼를 포함할 수 있다. 레지스터 파일(630)은 정수 및 부동 소수점 연산을 위한 분리된 레지스터 파일을 포함할 수 있다. 확장된 레지스터 파일(635)은 벡터 크기 유닛(vector-sized unit), 예를 들면, 레지스터당 256 또는 512 비트를 위한 저장부를 제공할 수 있다.
다양한 자원이 다른 전문화된 하드웨어 중에서, 예를 들면, 다양한 정수, 부동 소수점, 및 SIMD(single instruction multiple data) 로직 유닛을 포함하는 실행 유닛(620)에 제공될 수 있다. 예를 들어, 그러한 실행 유닛은 다른 그러한 실행 유닛들 중에서, 하나 이상의 ALU(arithmetic logic unit)(622)를 포함할 수 있다.
실행 유닛으로부터의 결과는 ROB(reorder buffer)를 포함하는 리타이어먼트 유닛(640)에 제공될 수 있다. 이러한 ROB는 실행되는 인스트럭션과 관련된 정보를 수신하기 위한 다양한 어레이 및 로직을 포함할 수 있다. 그 다음, 이러한 정보는 인스트럭션이 유효하게 리타이어링되고, 결과 데이터가 프로세서의 아키텍쳐 상태로 커미팅되는지의 여부, 또는 인스트럭션의 적절한 리타이어먼트를 방지하는 하나 이상의 예외가 발생되는지의 여부를 판정하기 위해 리타이어먼트 유닛(640)에 의해 검사된다. 물론, 리타이어먼트 유닛(640)은 리타이어먼트와 관련된 다른 동작을 처리할 수 있다. 여기서의 리타이어먼트 동작을 위해, 리타이어먼트 유닛의 CTI 로직(645)은 입력되는 인스트럭션과 함께 수신된 CTI 상태 머신 상태를 저장하고, 예측 실패에 응답하여 이러한 정보를 피드백할 수 있다.
도 4에 도시된 바와 같이, 리타이어먼트 유닛(640)은 캐시(650)에 연결되고, 캐시(650)는, 본 발명의 영역이 이와 관련하여 제한되는 것은 아니지만, 일 실시예에서 하위 레벨 캐시(예를 들면, L1 캐시)일 수 있다. 또한, 실행 유닛(620)은 캐시(650)에 직접 연결될 수 있다. 캐시(650)로부터, 상위 레벨 캐시, 시스템 메모리 등과의 데이터 통신이 발생될 수 있다. 도 4의 실시예에서 이러한 상위 레벨로 도시되지만, 본 발명의 영역은 이와 관련하여 제한되지 않음을 이해해야 한다. 예를 들어, 도 4의 구현은 ISA와 같은 비순차 머신에 관한 것이지만, 본 발명의 영역은 이와 관련하여 제한되지 않는다. 즉, 다른 실시예가 순차 프로세서, ARM 기반 프로세서와 같은 RISC(reduced instruction set computing) 프로세서, 또는 에뮬레이션 엔진 및 관련된 로직 회로를 통해 상이한 ISA의 인스트럭션 및 동작을 에뮬레이팅할 수 있는 다른 타입의 ISA의 프로세서에서 구현될 수 있다.
이제 도 5를 참조하면, 본 발명의 실시예에 따른 멀티코어 프로세서의 블록도가 도시된다. 도 5의 실시예에 도시된 바와 같이, 프로세서(700)는 다수의 영역(domain)을 포함한다. 구체적으로, 코어 영역(710)은 복수의 코어(7100-710n)를 포함할 수 있고, 그래픽 영역(720)은 하나 이상의 그래픽 엔진을 포함할 수 있고, 시스템 에이전트 영역(750)이 더 제공될 수 있다. 다양한 실시예에서, 시스템 에이전트 영역(750)은 전력 제어 이벤트 및 전력 관리를 처리하여, 코어 및/또는 그래픽 엔진과 같은 영역(710, 720)의 개별적인 유닛이, 주어진 유닛에서 발생되는 활동성 (또는 비활동성)의 관점에서 적절한 터보 모드 주파수에서 독립적으로 동적으로 동작하도록 제어될 수 있게 할 수 있다. 영역(710, 720) 각각은 상이한 전압 및/또는 전력에서 동작할 수 있고, 더욱이 영역 내의 개별적인 유닛들 각각은 독립적인 주파수 및 전압에서 동작할 수 있다. 단지 3개의 영역으로 도시되지만, 본 발명의 영역은 이와 관련하여 제한되지 않으며, 다른 실시예에서 추가적인 영역이 제공될 수 있음을 이해해야 한다.
일반적으로, 각각의 코어(710)는 본 명세서에서 기술된 바와 같은 CTI 로직을 포함하는, 다양한 실행 유닛 및 추가적인 처리 요소 이외에, 하위 레벨 캐시를 더 포함할 수 있다. 다음, 다양한 코어들이 서로 간에 및 LLC(last level cache)(7400-740n)의 복수의 유닛으로 형성된 공유 캐시 메모리에 연결될 수 있다. 다양한 실시에에서, LLC(740)는 코어들 및 그래픽 엔진 뿐만 아니라, 다양한 매체 처리 회로 사이에서 공유될 수 있다. 볼 수 있듯이, 링 상호접속(ring interconnect)(730)은 코어들을 서로 연결하고, 코어들, 그래픽 영역(720) 및 시스템 에이전트 회로(750) 사이에 상호접속을 제공한다. 일 실시예에서, 상호접속(730)은 코어 영역의 일부일 수 있다. 그러나, 다른 실시예에서, 링 상호접속은 그 자신의 영역의 것일 수 있다.
또한 볼 수 있듯이, 시스템 에이전트 영역(750)은 관련된 디스플레이의 제어 및 그에 대한 인터페이스를 제공할 수 있는 디스플레이 제어기(752)를 포함할 수 있다. 또한 볼 수 있듯이, 시스템 에이전트 영역(750)은 전력 제어 유닛(755)을 포함할 수 있다.
도 5에서 또한 볼 수 있듯이, 프로세서(700)는 DRAM(dynamic random access memory)와 같은 시스템 메모리에 대한 인터페이스를 제공할 수 있는 IMC(integrated memory controller)(770)를 더 포함할 수 있다. 다수의 인터페이스(7800-780n)가 제공되어 프로세서와 다른 회로 사이의 상호접속을 가능하게 할 수 있다. 예를 들어, 일 실시예에서, 하나 이상의 PCIe™(Peripheral Component Interconnect Express) 뿐만 아니라, 적어도 하나의 DMI(direct media interface) 인터페이스가 제공될 수 있다. 또한, 추가적인 프로세서 또는 다른 회로와 같은 다른 에이전트들 사이의 통신을 제공하기 위해, Intel® Quick Path Interconnect (QPI) 프로토콜에 따른 하나 이상의 인터페이스가 또한 제공될 수 있다. 도 5의 실시예에서는 이러한 상위 레벨에서 도시되지만, 본 발명의 영역은 이와 관련하여 제한되지 않음을 이해해야 한다.
도 6을 참조하면, 다수의 코어를 포함하는 프로세서의 실시예가 도시된다. 프로세서(1100)는 마이크로프로세서, 임베디드 프로세서, DSP(digital signal processor), 네트워크 프로세서, 핸드헬드 프로세서, 애플리케이션 프로세서, 코-프로세서, SOC(system on a chip), 또는 코드를 실행하는 다른 디바이스와 같은 임의의 프로세서 또는 처리 디바이스를 포함한다. 일 실시예에서, 프로세서(1100)는 비대칭 코어 또는 대칭 코어(예시된 실시예)를 포함할 수 있는 적어도 2개의 코어(코어(1101) 및 코어(1102))를 포함한다. 그러나, 프로세서(1100)는 대칭 또는 비대칭일 수 있는 임의의 수의 처리 요소를 포함할 수 있다.
일 실시예에서, 처리 요소는 소프트웨어 스레드를 지원하기 위한 하드웨어 또는 로직을 지칭한다. 하드웨어 처리 요소의 예는, 스레드 유닛, 스레드 슬롯, 스레드, 처리 유닛, 컨텍스트, 컨텍스트 유닛, 논리적 프로세서, 하드웨어 스레드, 코어, 및/또는 실행 상태 또는 아키텍쳐 상태와 같은 프로세서에 대한 상태를 유지할 수 있는 임의의 다른 요소를 포함한다. 즉, 처리 요소는, 일 실시예에서, 소프트웨어 스레드, 운영 체제, 애플리케이션 또는 다른 코드와 같은 코드와 독립적으로 관련될 수 있는 임의의 하드웨어를 지칭한다. 전형적으로, 물리적 프로세서는, 코어 또는 하드웨어 스레드와 같은 임의의 수의 다른 처리 요소를 잠재적으로 포함하는 집적 회로를 지칭한다.
코어는 때로는 독립적인 아키텍쳐 상태를 유지할 수 있는 집적 회로 상에 위치된 로직을 지칭하고, 각각의 독립적으로 유지된 아키텍쳐 상태는 적어도 일부 전용 실행 자원과 관련된다. 코어와는 반대로, 하드웨어 스레드는 전형적으로, 독립적인 아키텍쳐 상태를 관리할 수 있는 집적 회로 상에 위치된 임의의 로직을 지칭하고, 독립적으로 유지된 아키텍쳐 상태는 실행 자원에 대한 액세스를 공유한다. 볼 수 있듯이, 특정 자원이 공유되고, 다른 것들은 아키텍쳐 상태에 전용될 때, 하드웨어 스레드와 코어의 명명법(nomenclature) 사이의 라인이 중첩된다. 때때로, 코어 및 하드웨어 스레드는 운영 체제에 의해 개별적인 논리적 프로세서로서 보여지며, 운영 체제는 각각의 논리적 프로세서 상에서의 동작들을 개별적으로 스케쥴링할 수 있다.
도 6에 도시된 바와 같이, 물리적 프로세서(1100)는 2개의 코어, 즉, 코어(1101, 1102)를 포함한다. 여기서, 코어(1101, 1102)는 대칭 코어, 즉, 동일한 구성, 기능 유닛 및/또는 로직을 갖는 코어인 것으로 고려된다. 다른 실시예에서, 코어(1101)는 비순차 프로세서 코어를 포함하고, 코어(1102)는 순차 프로세서 코어를 포함한다. 그러나, 코어(1101, 1102)는 네이티브 코어, 소프트웨어 관리된 코어, 본 명세서에서 기술된 바와 같은 CT 인스트럭션을 포함하는 네이티브 ISA를 실행하도록 적응된 코어, 트랜스레이트된 ISA를 실행하도록 적응된 코어, 공동 설계된 코어, 또는 다른 알려진 코어와 같은 임의의 타입의 코어로부터 개별적으로 선택될 수 있다. 추가의 설명을 위해, 코어(1102)에서의 유닛은 유사한 방식으로 동작하므로, 코어(1101)에 도시된 기능 유닛이 이하에 보다 상세히 기술된다.
도시된 바와 같이, 코어(1101)는 하드웨어 스레드 슬롯(1101a, 1101b)으로서 지칭될 수도 있는 2개의 하드웨어 스레드(1101a, 1101b)를 포함한다. 따라서, 운영 체제와 같은 소프트웨어 엔티티는, 일 실시예에서, 잠재적으로 프로세서(1100)를 4개의 분리된 프로세서, 즉, 4개의 소프트웨어 스레드를 동시에 실행할 수 있는 4개의 논리적 프로세서 또는 처리 요소로서 여긴다. 전술한 바와 같이, 제1 스레드는 아키텍쳐 상태 레지스터(1101a)와 관련되고, 제2 스레드는 아키텍쳐 상태 레지스터(1101b)와 관련되고, 제3 스레드는 아키텍쳐 상태 레지스터(1102a)와 관련될 수 있고, 제4 스레드는 아키텍쳐 상태 레지스터(1102b)와 관련될 수 있다. 여기서, 아키텍쳐 상태 레지스터(1101a, 1101b, 1102a, 1102b) 각각은 전술한 바와 같이, 처리 요소, 스레드 슬롯, 또는 스레드 유닛으로서 지칭될 수 있다. 도시된 바와 같이, 아키텍쳐 상태 레지스터(1101a)는 아키텍쳐 상태 레지스터(1101b)에서 복제되어, 개별적인 아키텍쳐 상태/컨텍스트가 논리적 프로세서(1101a) 및 논리적 프로세서(1101b)에 대해 저장될 수 있다. 코어(1101)에서, 할당기 및 리네이머 블록(1130)에서의 인스트럭션 포인터 및 리네이밍 로직과 같은 다른 보다 작은 자원이 또한 스레드(1101a, 1101b)에 대해 복제될 수 있다. 재정렬/리타이어먼트 유닛(1135)에서의 재정렬 버퍼, ILTB(1120), 로드/저장 버퍼 및 큐와 같은 일부 자원이 파티셔닝을 통해 공유될 수 있다. 범용 내부 레지스터, 페이지-테이블 베이스 레지스터(들), 하위-레벨 데이터-캐시 및 데이터-TLB(1115), 실행 유닛(들)(1140) 및 비순차 유닛(1135)의 부분과 같은 다른 자원이 잠재적으로 완전히 공유된다.
프로세서(1100)는 때때로, 완전히 공유되고, 파티셔닝을 통해 공유되거나, 또는 처리 요소에 의해/처리 요소에 전용될 수 있는 다른 자원을 포함한다. 도 6에서, 프로세서의 예시적인 논리적 유닛/자원을 갖는 순수하게 예시적인 프로세서의 실시예가 예시된다. 프로세서는 이들 기능 유닛들 중 임의의 것을 포함하거나 또는 생략할 뿐만 아니라, 도시되지 않은 임의의 다른 알려진 기능 유닛, 로직 또는 펌웨어를 포함할 수 있음을 주지해야 한다. 도시된 바와 같이, 코어(1101)는 간략화된 대표적인 비순차 (OOO) 프로세서 코어를 포함한다. 그러나, 다른 실시예에서 순차 프로세서가 이용될 수 있다. O00 코어는 실행/취해질 브랜치를 예측하기 위한 브랜치 타겟 버퍼(1120) 및 인스트럭션을 위한 어드레스 트랜스레이션 엔트리를 저장하기 위한 I-TLB(instruction-translation buffer)(1120)를 포함한다.
코어(1101)는 페치된 요소를 디코딩하기 위해 페치 유닛(1120)에 연결된 디코드 모듈(1125)을 더 포함한다. 페치 로직은, 일 실시예에서, 스레드 슬롯(1101a, 1101b) 각각과 관련된 개별적인 시퀀서를 포함한다. 통상적으로, 코어(1101)는 프로세서(1100) 상에서 실행가능한 CT 인스트럭션을 포함하는 인스트럭션을 정의/지정하는 제1 ISA와 관련된다. 때때로, 제1 ISA의 일부인 머신 코드 인스트럭션이, 수행될 인스트럭션 또는 동작을 참조/지정하는 인스트럭션의 부분(오피코드로서 지칭됨)을 포함한다. 디코드 로직(1125)은 그들의 오피코드로부터 이들 인스트럭션을 인식하고, 디코딩된 인스트럭션을 제1 ISA에 의해 정의된 처리를 위해 파이프라인 상에 전달하는 회로를 포함한다. 예를 들어, 디코더(1125)는, 일 실시예에서, 트랜잭션 인스트럭션과 같은 특정 인스트럭션을 인식하도록 설계 또는 적응된 로직을 포함한다. 디코더(1125)에 의한 인식의 결과로서, 아키텍쳐 또는 코어(1101)가 적절한 인스트럭션과 관련된 작업을 수행하기 위한 특정한 미리정의된 액션을 취한다. 본 명세서에서 기술된 작업, 블록, 동작 및 방법 중 임의의 것이, 그 일부가 새롭거나 또는 오래된 인스트럭션일 수 있는 단일의 또는 다수의 인스트럭션에 응답하여 수행될 수 있음을 주지하는 것이 중요하다.
하나의 예에서, 할당기 및 리네이머 블록(1130)은 인스트럭션 처리 결과를 저장하기 위한 레지스터 파일과 같은 자원을 예비하기 위한 할당기를 포함한다. 그러나, 스레드(1101a, 1101b)는 잠재적으로 비순차 실행이 가능하며, 여기서 할당기 및 리네이머 블록(1130)은 인스트럭션 결과를 추적하기 위한 재정렬 버퍼와 같은 다른 자원을 또한 예비한다. 유닛(1130)은 또한 프로그램/인스트럭션 참조 레지스터를 프로세서(1100) 내부의 다른 레지스터로 리네이밍하기 위한 레지스터 리네이머를 포함할 수 있다. 재정렬/리타이어먼트 유닛(1135)은 비순차 실행 및 이후의 비순차 실행된 인스트럭션의 순차 리타이어먼트를 지원하기 위한, 전술한 재정렬 버퍼, 로드 버퍼, 및 저장 버퍼와 같은 구성요소를 포함한다.
스케쥴러 및 실행 유닛(들) 블록(1140)은, 일 실시예에서, 실행 유닛 상의 인스트럭션/동작을 스케쥴링하기 위한 스케쥴러 유닛을 포함한다. 예를 들어, 부동 소수점 인스트럭션이 가용한 부동 소수점 실행 유닛을 갖는 실행 유닛의 포트 상에 스케쥴링된다. 실행 유닛과 관련된 레지스터 파일이 또한 정보 인스트럭션 처리 결과를 저장하기 위해 포함된다. 예시적인 실행 유닛은 부동 소수점 실행 유닛, 정수 실행 유닛, 점프 실행 유닛, 로드 실행 유닛, 저장 실행 유닛 및 다른 알려진 실행 유닛을 포함한다.
하위 레벨 데이터 캐시 및 데이터 트랜스레이션 버퍼(D-TLB)(1150)가 실행 유닛(들)(1140)에 연결된다. 데이터 캐시는 잠재적으로 메모리 코히어런시 상태로 유지되는 데이터 오퍼랜드와 같은 요소 상에서 최근에 이용/동작된 것을 저장하는 것이다. D-TLB는 물리적 어드레스 트랜스레이션에 대한 최근의 가상/선형을 저장하는 것이다. 특정 예로서, 프로세서는 물리적 메모리를 복수의 가상 페이지로 분할하는 페이지 테이블 구조를 포함할 수 있다.
여기서, 코어(1101, 1102)는 최근에 페치된 요소를 캐싱하는 상위 레벨 또는 극단적인(further-out) 캐시(1110)에 대한 액세스를 공유한다. 상위 레벨 또는 극단적이라는 것은 실행 유닛(들)로부터 증가하거나 또는 더 높아지는 캐시 레벨을 지칭함을 주지해야 한다. 일 실시예에서, 상위 레벨 캐시(1110)는 제2 또는 제3 레벨 데이터 캐시와 같은 최종 레벨 데이터 캐시(즉, 프로세서(1100) 상에서의 메모리 계층구조에서의 최종 캐시)이다. 그러나, 상위 레벨 캐시(1110)는, 그것이 인스트럭션 캐시와 관련되거나 또는 인스트럭션 캐시를 포함할 수 있으므로, 그렇게 제한되지 않는다. 트레이스 캐시(인스트럭션 캐시의 타입)는 대신에 디코더(1125) 이후에 연결되어, 최근에 디코딩된 트레이스를 저장할 수 있다.
도시된 구성에서, 프로세서(1100)는 본 발명의 실시예에 따른 전력 공유 제어를 수행할 수 있는, 버스 인터페이스 모듈(1105) 및 전력 제어기(1160)를 또한 포함한다. 역사적으로, 제어기(1170)는 프로세서(1100) 외부의 컴퓨팅 시스템에 포함되어 왔다. 이러한 시나리오에서, 버스 인터페이스(1105)는 시스템 메모리(1175), 칩셋(때로는 메모리(1175)에 접속하기 위한 메모리 제어기 허브 및 주변 디바이스에 접속하기 위한 I/O 제어기 허브를 포함함), 메모리 제어기 허브, 노스브리지(northbridge), 또는 다른 집적 회로와 같은, 프로세서(1100) 외부의 디바이스와 통신한다. 그리고, 이러한 시나리오에서, 버스(1105)는 멀티-드롭 버스, 점대점 상호접속, 직렬 상호접속, 병렬 버스, 코히어런트(예를 들면, 캐시 코히어런트) 버스, 층형 프로토콜 아키텍쳐, 차동 버스 및 GTL 버스와 같은, 임의의 알려진 상호접속을 포함할 수 있다.
메모리(1175)는 프로세서(1100)에 전용되거나 또는 시스템에서의 다른 디바이스들과 공유될 수 있다. 메모리(1175)의 타입들의 일반적인 예는, DRAM, SRAM, NV 메모리(non-volatile memory), 및 다른 알려진 저장 디바이스를 포함한다. 디바이스(1180)는 그래픽 가속기, 프로세서 또는 메모리 제어기 허브에 연결된 카드, I/O 제어기 허브에 연결된 데이터 저장부, 무선 트랜시버, 플래시 디바이스, 오디오 제어기, 네트워크 제어기, 또는 다른 알려진 디바이스를 포함할 수 있음을 주지해야 한다.
그러나, 도시된 실시예에서, 제어기(1170)는 프로세서(1100)의 일부로서 도시됨을 주지해야 한다. 최근, 보다 많은 로직 및 디바이스가 SOC와 같은 단일의 다이 상에 통합됨에 따라, 이들 디바이스 각각은 프로세서(1100) 상에 통합될 수 있다. 예를 들어, 일 실시예에서, 메모리 제어기 허브(1170)는 동일한 패키지 및/또는 다이 상에서 프로세서(1100)와 함께 존재한다. 여기서, 코어의 일부분(온코어(on-core) 부분)은 메모리(1175) 또는 그래픽 디바이스(1180)와 같은 다른 디바이스와 인터페이스하기 위한 하나 이상의 제어기(들)(1170)을 포함한다. 그러한 디바이스와 인터페이스하기 위한 상호접속 및 제어기를 포함하는 구성은 때때로 온코어(또는 언코어(un-core) 구성)으로서 지칭된다. 예로서, 버스 인터페이스(1105)는 메모리(1175)와 인터페이스하기 위한 메모리 제어기 및 그래픽 프로세서(1180)와 인터페이스하기 위한 그래픽 제어기를 갖는 링 상호접속을 포함한다. 그러나, SOC 환경에서, 네트워크 인터페이스, 코-프로세서, 메모리(1175), 그래픽 프로세서(1180), 및 임의의 다른 알려진 컴퓨터 디바이스/인터페이스와 같은 보다 많은 디바이스가 단일의 다이 또는 집적 회로 상에 통합되어, 높은 기능 및 낮은 전력 소모를 갖는 작은 폼 팩터(form factor)를 제공한다.
실시예는 많은 상이한 시스템 타입으로 구현될 수 있다. 이제 도 7을 참조하면, 본 발명의 실시예에 따른 시스템의 블록도가 도시된다. 도 7에 도시된 바와 같이, 멀티프로세서 시스템(800)은 점대점 상호접속 시스템이며, 점대점 상호접속(850)을 통해 연결된 제1 프로세서(870) 및 제2 프로세서(880)를 포함한다. 도 7에 도시된 바와 같이, 프로세서들(870, 880) 각각은, 비록 잠재적으로 보다 많은 코어가 프로세서에 존재할 수 있지만, 제1 및 제2 프로세서 코어(즉, 프로세서 코어(874a, 874b) 및 프로세서 코어(884a, 884b)를 포함하는 멀티코어 프로세서일 수 있다. 프로세서들 각각은 사용자 레벨 및 관리자 레벨 인스트럭션을 포함하는 CT 인스트럭션을 이용하여 ROP 및 다른 보안 공격에 대하여 방어하기 위한 CTI 기반 로직을 포함할 수 있다.
여전히 도 7을 참조하면, 제1 프로세서(870)는 메모리 제어기 허브(MCH)(872) 및 점대점(P-P) 인터페이스(876, 878)를 더 포함한다. 유사하게, 제2 프로세서(880)는 MCH(882) 및 P-P 인터페이스(886, 888)를 포함한다. 도 7에 도시된 바와 같이, MCH(872, 882)는 프로세서를, 각각의 프로세서에 국부적으로 부착된 시스템 메모리(예를 들면, DRAM)의 부분들일 수 있는 각각의 메모리, 즉, 메모리(832) 및 메모리(834)에 연결한다. 제1 프로세서(870) 및 제2 프로세서(880)는 P-P 상호접속(852, 854) 각각을 통해 칩셋(890)에 연결될 수 있다. 도 7에 도시된 바와 같이, 칩셋(890)은 P-P 인터페이스(894, 898)를 포함한다.
더욱이, 칩셋(89)은 P-P 상호접속(839)에 의해 칩셋(890)을 고성능 그래픽 엔진(838)과 연결하기 위한 인터페이스(892)를 포함한다. 다음, 칩셋(890)은 인터페이스(896)를 통해 제1 버스(816)에 연결될 수 있다. 도 7에 도시된 바와 같이, 다양한 입력/출력(I/O) 디바이스(814)가, 제1 버스(816)를 제2 버스(820)에 연결하는 버스 브리지(818)와 더불어, 제1 버스(816)에 연결될 수 있다. 일 실시예에서, 다양한 디바이스가, 예를 들면, 키보드/마우스(822), 통신 디바이스(826), 및 디스크 드라이브 또는 코드(830)를 포함할 수 있는 다른 대용량 저장 디바이스와 같은 데이터 저장 유닛(828)을 포함하는 제2 버스(820)에 연결될 수 있다. 더욱이, 오디오 I/O(824)는 제2 버스(820)에 연결될 수 있다. 실시예는 스마트 셀룰라 전화, 태블릿 컴퓨터, 넷북, 울트라북TM 등과 같은 모바일 디바이스를 포함하는 다른 타입의 시스템 내로 통합될 수 있다.
본 발명은 제한된 수의 실시예에 대하여 기술되었지만, 본 기술 분야의 당업자라면 그로부터의 다양한 수정 및 변경을 이해할 것이다. 첨부된 청구항은 모든 그러한 수정 및 변경을 본 발명의 진정한 사상 및 영역 내에 속하는 것으로서 커버하는 것으로 의도된다.

Claims (20)

  1. 제 1 모드 및 제 2 모드에서 실행되는 프로세서로서,
    복수의 제어 전송 인스트럭션을 디코딩하는 디코드 유닛 - 상기 복수의 제어 전송 인스트럭션은 호출 인스트럭션 및 리턴 인스트럭션을 포함함 - 과,
    상기 리턴 인스트럭션 직후에 실행될 다음 인스트럭션이 상기 호출 인스트럭션이 아닌 경우, 상기 제 1 모드에서 오류를 발생시키는 상태 머신을 포함하는
    프로세서.
  2. 제1항에 있어서,
    상기 제1 모드에서, 상기 호출 인스트럭션의 실행은 스택 상에 상기 호출 인스트럭션의 어드레스를 푸싱하는 것을 포함하는
    프로세서.
  3. 제2항에 있어서,
    상기 프로세서는 또한, 상기 제 2 모드에서 상기 호출 인스트럭션의 실행은 상기 스택 상에 상기 호출 인스트럭션을 바로 뒤따르는 인스트럭션의 어드레스를 푸싱하는 것을 포함하는
    프로세서.
  4. 제1항에 있어서,
    상기 제1 모드에서, 상기 리턴 인스트럭션의 실행은, 상기 리턴 인스트럭션 직후에 실행될 다음 인스트럭션이 상기 호출 인스트럭션인 경우 상기 다음 인스트럭션이 비동작 인스트럭션(no-operation instruction)으로서 실행되게 하도록 상기 상태 머신의 상태를 아밍(arming)하는 것을 포함하는
    프로세서.
  5. 제4항에 있어서,
    상기 제1 모드에서, 상기 상태가 아밍될 때 상기 리턴 인스트럭션의 실행에 의해 스택으로부터 상기 호출 인스트럭션을 팝핑(popping)하는 것에 응답하여, 상기 상태가 디스아밍(disarming)되는
    프로세서.

  6. 제4항에 있어서,
    상기 상태는 컨텍스트 스위치와 관련하여 보존되는
    프로세서.
  7. 제4항에 있어서,
    상기 상태는 프로세서 특권 레벨에 대한 변경과 관련하여 보존되는
    프로세서.
  8. 방법으로서,
    프로세서에 의해, 리턴 인스트럭션을 디코딩하는 단계와,
    상기 프로세서에 의해 제1 모드에서, 상기 리턴 인스트럭션 직후의 다음 인스트럭션이 호출 인스트럭션이 아닌지의 여부를 판정하는 단계와,
    상기 제1 모드에서, 상기 다음 인스트럭션이 호출 인스트럭션이 아니라고 판정하는 것에 응답하여 오류를 발생시키는 단계를 포함하는
    방법.

  9. 제8항에 있어서,
    상기 프로세서에 의해, 상기 리턴 인스트럭션을 디코딩하기 전에 호출 인스트럭션을 디코딩하는 단계와,
    상기 제1 모드에서, 스택 상에 상기 호출 인스트럭션의 어드레스를 푸싱하는 것을 포함하는, 상기 호출 인스트럭션을 실행하는 단계를 더 포함하는
    방법.
  10. 제9항에 있어서,
    제2 모드에서, 상기 스택 상에 상기 호출 인스트럭션을 바로 뒤따르는 인스트럭션의 어드레스를 푸싱하는 것을 포함하는, 상기 호출 인스트럭션을 실행하는 단계를 더 포함하는
    방법.
  11. 제8항에 있어서,
    상기 제1 모드에서, 상기 리턴 인스트럭션 직후에 실행될 다음 인스트럭션이 상기 호출 인스트럭션인 경우 상기 다음 인스트럭션이 비동작 인스트럭션으로서 실행되게 하도록 상태를 아밍하는 것을 포함하는, 상기 리턴 인스트럭션을 실행하는 단계를 더 포함하는
    방법.
  12. 제11항에 있어서,
    상기 제1 모드에서, 상기 상태가 아밍될 때 상기 리턴 인스트럭션의 실행에 의해 스택으로부터 상기 호출 인스트럭션을 팝핑하는 것에 응답하여, 상기 상태를 디스아밍하는 단계를 더 포함하는
    방법.
  13. 제11항에 있어서,
    컨텍스트 스위치와 관련하여 상기 상태를 보존하는 단계를 더 포함하는
    방법.
  14. 제11항에 있어서,
    프로세서 특권 레벨에 대한 변경과 관련하여 상기 상태를 보존하는 단계를 더 포함하는
    방법.
  15. 제11항에 있어서,
    상기 프로세서 상에서 실행되는 소프트웨어에 의해, 상기 리턴 인스트럭션을 상기 호출 인스트럭션에 매칭시키는 단계를 더 포함하는
    방법.
  16. 시스템으로서,
    프로세서에 의해 실행될 인스트럭션들의 시퀀스를 포함하는 메모리 - 상기 인스트럭션들의 시퀀스는 호출 인스트럭션 및 리턴 인스트럭션을 포함함 - 와,
    상기 프로세서를 포함하되,
    상기 프로세서는 제 1 모드 및 제 2 모드에서 동작하며,
    상기 프로세서는,
    상기 인스트럭션들의 시퀀스를 디코딩하는 디코드 유닛과,
    상기 리턴 인스트럭션 직후에 실행될 다음 인스트럭션이 상기 호출 인스트럭션이 아닌 경우, 상기 제 1 모드에서 오류를 발생시키는 상태 머신을 포함하는
    시스템.
  17. 제16항에 있어서,
    상기 제1 모드에서, 상기 호출 인스트럭션의 실행은 스택 상에 상기 호출 인스트럭션의 메모리 어드레스를 푸싱하는 것을 포함하는
    시스템.
  18. 제17항에 있어서,
    상기 프로세서는 또한, 상기 제 2 모드에서 상기 호출 인스트럭션의 실행은 상기 스택 상에 상기 호출 인스트럭션을 바로 뒤따르는 인스트럭션의 메모리 어드레스를 푸싱하는 것을 포함하는
    시스템.
  19. 제16항에 있어서,
    상기 제1 모드에서, 상기 리턴 인스트럭션의 실행은, 상기 리턴 인스트럭션 직후에 실행될 다음 인스트럭션이 상기 호출 인스트럭션인 경우 상기 다음 인스트럭션이 비동작 인스트럭션으로서 실행되게 하도록 상기 상태 머신의 상태를 아밍하는 것을 포함하는
    시스템.
  20. 제19항에 있어서,
    상기 제1 모드에서, 상기 상태가 아밍될 때 상기 리턴 인스트럭션의 실행에 의해 스택으로부터 상기 호출 인스트럭션을 팝핑하는 것에 응답하여, 상기 상태가 디스아밍되는
    시스템.
KR1020177003687A 2014-09-12 2015-09-02 제어 전송 인스트럭션으로의 리턴 KR102298403B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/484,751 2014-09-12
US14/484,751 US9519773B2 (en) 2014-09-12 2014-09-12 Returning to a control transfer instruction
PCT/US2015/048124 WO2016040071A1 (en) 2014-09-12 2015-09-02 Returning to a control transfer instruction

Publications (2)

Publication Number Publication Date
KR20170031728A KR20170031728A (ko) 2017-03-21
KR102298403B1 true KR102298403B1 (ko) 2021-09-03

Family

ID=55455011

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177003687A KR102298403B1 (ko) 2014-09-12 2015-09-02 제어 전송 인스트럭션으로의 리턴

Country Status (6)

Country Link
US (1) US9519773B2 (ko)
EP (1) EP3191937A4 (ko)
KR (1) KR102298403B1 (ko)
CN (1) CN106575335B (ko)
TW (1) TWI582635B (ko)
WO (1) WO2016040071A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9519773B2 (en) 2014-09-12 2016-12-13 Intel Corporation Returning to a control transfer instruction
US10423792B2 (en) 2016-09-23 2019-09-24 Red Hat, Inc. Identifying exploitable code sequences
JP2022522863A (ja) * 2019-03-05 2022-04-20 シー2エー‐セック,リミテッド リターン指向プログラミング攻撃保護
US11928472B2 (en) 2020-09-26 2024-03-12 Intel Corporation Branch prefetch mechanisms for mitigating frontend branch resteers
US20230057623A1 (en) * 2021-08-23 2023-02-23 Intel Corporation Issue, execution, and backend driven frontend translation control for performant and secure data-space guided micro-sequencing

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100228952A1 (en) * 2009-03-04 2010-09-09 Via Technologies, Inc. Apparatus and method for fast correct resolution of call and return instructions using multiple call/return stacks in the presence of speculative conditional instruction execution in a pipelined microprocessor

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4866599A (en) 1985-06-27 1989-09-12 Bull Hn Information Systems Inc. Call instruction, return instruction and trap procedure for ring crossing architecture
JP3566982B2 (ja) 1993-06-02 2004-09-15 川崎マイクロエレクトロニクス株式会社 データフロー制御装置およびメモリ装置
US20040168078A1 (en) * 2002-12-04 2004-08-26 Brodley Carla E. Apparatus, system and method for protecting function return address
US7178010B2 (en) 2003-01-16 2007-02-13 Ip-First, Llc Method and apparatus for correcting an internal call/return stack in a microprocessor that detects from multiple pipeline stages incorrect speculative update of the call/return stack
US7552477B1 (en) * 2005-02-23 2009-06-23 Symantec Corporation Detecting return-to-LIBC buffer overflows via dynamic disassembly of offsets
US20070281796A1 (en) * 2006-05-31 2007-12-06 Gilbert Peter J Muscle-back iron golf clubs with higher moment of intertia and lower center of gravity
KR100869514B1 (ko) * 2007-03-14 2008-11-19 한국 한의학 연구원 허맥 및 실맥 진단 시스템
US8261065B2 (en) 2007-05-07 2012-09-04 Intel Corporation Protecting caller function from undesired access by callee function
JP2010198183A (ja) 2009-02-24 2010-09-09 Mitsubishi Electric Corp プログラム実行装置
US10338928B2 (en) 2011-05-20 2019-07-02 Oracle International Corporation Utilizing a stack head register with a call return stack for each instruction fetch
US8839429B2 (en) 2011-11-07 2014-09-16 Qualcomm Incorporated Methods, devices, and systems for detecting return-oriented programming exploits
CN102663312B (zh) * 2012-03-20 2014-10-01 中国科学院信息工程研究所 一种基于虚拟机的rop攻击检测方法及系统
US9703567B2 (en) * 2012-11-30 2017-07-11 Intel Corporation Control transfer termination instructions of an instruction set architecture (ISA)
US9442729B2 (en) * 2013-05-09 2016-09-13 Intel Corporation Minimizing bandwidth to track return targets by an instruction tracing system
US9519773B2 (en) 2014-09-12 2016-12-13 Intel Corporation Returning to a control transfer instruction

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100228952A1 (en) * 2009-03-04 2010-09-09 Via Technologies, Inc. Apparatus and method for fast correct resolution of call and return instructions using multiple call/return stacks in the presence of speculative conditional instruction execution in a pipelined microprocessor

Also Published As

Publication number Publication date
KR20170031728A (ko) 2017-03-21
US9519773B2 (en) 2016-12-13
CN106575335A (zh) 2017-04-19
EP3191937A1 (en) 2017-07-19
WO2016040071A1 (en) 2016-03-17
TW201629825A (zh) 2016-08-16
US20160078222A1 (en) 2016-03-17
CN106575335B (zh) 2019-08-09
EP3191937A4 (en) 2018-04-11
TWI582635B (zh) 2017-05-11

Similar Documents

Publication Publication Date Title
US11789735B2 (en) Control transfer termination instructions of an instruction set architecture (ISA)
US10445494B2 (en) Attack protection for valid gadget control transfers
US9697142B2 (en) Execution-aware memory protection
US9684511B2 (en) Using software having control transfer termination instructions with software not having control transfer termination instructions
US9116729B2 (en) Handling of binary translated self modifying code and cross modifying code
KR102298403B1 (ko) 제어 전송 인스트럭션으로의 리턴
JP2016207231A (ja) 命令エミュレーションプロセッサ、方法、およびシステム
US11650818B2 (en) Mode-specific endbranch for control flow termination
US10621353B2 (en) Firmware loading for exploit resistance
US9785800B2 (en) Non-tracked control transfers within control transfer enforcement
US8996923B2 (en) Apparatus and method to obtain information regarding suppressed faults

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant