KR20200128720A - 링크를 갖는 분기 명령의 분기 타겟 변종 - Google Patents

링크를 갖는 분기 명령의 분기 타겟 변종 Download PDF

Info

Publication number
KR20200128720A
KR20200128720A KR1020207028590A KR20207028590A KR20200128720A KR 20200128720 A KR20200128720 A KR 20200128720A KR 1020207028590 A KR1020207028590 A KR 1020207028590A KR 20207028590 A KR20207028590 A KR 20207028590A KR 20200128720 A KR20200128720 A KR 20200128720A
Authority
KR
South Korea
Prior art keywords
branch
instruction
target
link
address
Prior art date
Application number
KR1020207028590A
Other languages
English (en)
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 KR20200128720A publication Critical patent/KR20200128720A/ko

Links

Images

Classifications

    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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
    • G06F21/54Monitoring 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 by adding security routines or objects to programs
    • 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
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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 or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Medicines That Contain Protein Lipid Enzymes And Other Medicines (AREA)

Abstract

장치(2)는 명령 디코더(6)와 처리회로(4)를 구비한다. 명령 디코더(6)는, 프로그램 흐름의 추후의 복귀에 대해 복귀 어드레스가 설정되는 링크를 갖는 분기 명령과, 분기를 탈 때, 타겟 어드레스에 있는 명령이 적어도 한 개의 허용된 종류의 분기 타겟 명령 이외의 명령인 경우 오류처리 응답을 기동하는 적어도 한 개의 타겟 확인 종류의 분기 명령을 포함하는, 타겟 어드레스에 있는 명령으로의 프로그램 흐름의 비순차적인 변경을 일으키는 분기 명령들을 지원한다. 적어도 한 개의 타겟 확인 종류의 분기 명령의 적어도 서브셋에 대해, 링크를 갖는 분기 명령의 분기 타겟 변종은 허용된 종류의 분기 타겟 명령이다.

Description

링크를 갖는 분기 명령의 분기 타겟 변종
본 발명은 데이터 처리 분야에 관한 것이다.
분기 명령은 특정한 프로그램 코드로부터 명령들을 실행할 때 프로그램 흐름의 비순차적인 변화를 일으키는 명령이다. 일부 분기는 그것의 타겟 어드레스가 항상 고정되거나 현재의 명령 어드레스로부터 고정된 오프셋에 의해 결정되는 정적 분기이다. 그러나, 다른 분기는, (분기를 타는 경우) 분기 이후에 실행할 명령을 식별하는 타겟 어드레스가 메모리에서 판독되거나 이전 명령들에 의해 발생된 데이터에 의존하는 데이터 의존형 분기이다. 예를 들어, 데이터 의존형 분기를 사용하여, 프로그램의 이전 부분들의 결과에 따라 특정한 함수가 조건부로 실행되도록 보장할 수도 있다.
프로세서에 대한 한가지 형태의 공격은, 데이터 의존형 분기 명령들에 의한 프로그램 흐름의 방향을 제어하는 데이터를 손상시켜, 분기 명령이 프로그램 코드의 작성자에 의해 의도하지 않은 타겟 어드레스에 있는 명령으로 분기하도록 속이는 시도이다. 이와 같은 조작은, 실행할 올바른 프로그램 코드의 일부인 정당한 명령들의 부분들을 의도된 시퀀스와는 다른 시퀀스로 공격자가 연결할 수 있도록 할 수 있다. 이와 같은 취약점 공격은 프로그램이 올바르게 동작하지 못하게 하여, 프로그램을 실행하는 프로세서에 대해 다른 바람직하지 않은 영향을 일으키거나 패스워드 검사 등의 특정한 보안 조치를 우회할 수도 있다.
적어도 일부 실시예는, 명령들을 디코드하는 명령 디코더와, 상기 명령 디코더에 의해 디코드된 명령들에 응답하여 데이터 처리를 행하는 처리회로를 구비하고, 분기 명령에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여 타겟 어드레스에 있는 명령으로의 프로그램 흐름의 비순차적인 변경을 일으키도록 구성되고, 상기 프로그램 흐름의 비순차적인 변경이 링크를 갖는 분기(branch-with-link) 명령에 응답하여 일어날 때, 상기 명령 디코더는 상기 처리회로를 제어하여 프로그램 흐름의 추후의 복귀에 대한 복귀 어드레스를 설정하도록 구성되고, 상기 프로그램 흐름의 비순차적인 변경이 적어도 한 개의 타겟 확인 종류의 분기 명령에 응답하여 일어날 때, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 타겟 어드레스에 있는 명령이 적어도 한 개의 허용된 종류의 분기 타겟 명령 이외의 명령일 경우, 오류처리 응답을 기동하도록 구성되고, 상기 적어도 한 개의 타겟 확인 종류의 분기 명령의 적어도 서브셋에 대해, 상기 적어도 한 개의 허용된 종류의 분기 타겟 명령은 상기 링크를 갖는 분기 명령의 분기 타겟 변종(variant)을 포함하는 장치를 제공한다.
적어도 일부 실시예는, 분기 명령에 응답하여, 타겟 어드레스에 있는 명령으로의 프로그램 흐름의 비순차적인 변경을 일으키는 단계와, 상기 프로그램 흐름의 비순차적인 변경이 링크를 갖는 분기 명령에 응답하여 일어날 때, 프로그램 흐름의 추후의 복귀에 대한 복귀 어드레스를 설정하는 단계와, 상기 프로그램 흐름의 비순차적인 변경이 적어도 한 개의 타겟 확인 종류의 분기 명령에 응답하여 일어날 때, 상기 타겟 어드레스에 있는 명령이 적어도 한 개의 허용된 종류의 분기 타겟 명령 이외의 명령일 경우, 오류처리 응답을 기동하는 단계를 포함하고, 상기 적어도 한 개의 타겟 확인 종류의 분기 명령의 적어도 서브셋에 대해, 상기 적어도 한 개의 허용된 종류의 분기 타겟 명령은 상기 링크를 갖는 분기 명령의 분기 타겟 변종을 포함하는 데이터 처리방법을 제공한다.
적어도 일부 실시예는, 호스트 데이터 처리장치를 제어하여 타겟 프로그램 코드의 명령들의 실행을 위한 명령 실행 환경을 제공하는 컴퓨터 프로그램으로서, 상기 타겟 프로그램 코드의 명령들을 디코드하는 명령 디코드 프로그램 로직과, 상기 명령 디코드 프로그램 로직에 의해 디코드된 명령들에 응답하여 데이터 처리를 행하는 처리 프로그램 로직을 포함하고, 분기 명령에 응답하여, 상기 명령 디코드 프로그램 로직은 상기 처리 프로그램 로직을 제어하여 타겟 어드레스에 있는 명령으로의 프로그램 흐름의 비순차적인 변경을 일으키도록 구성되고, 상기 프로그램 흐름의 비순차적인 변경이 링크를 갖는 분기 명령에 응답하여 일어날 때, 상기 명령 디코드 프로그램 로직은 상기 처리 프로그램 로직을 제어하여 프로그램 흐름의 추후의 복귀에 대한 복귀 어드레스를 설정하도록 구성되고, 상기 프로그램 흐름의 비순차적인 변경이 적어도 한 개의 타겟 확인 종류의 분기 명령에 응답하여 일어날 때, 상기 명령 디코드 프로그램 로직은 상기 처리 프로그램 로직을 제어하여, 상기 타겟 어드레스에 있는 명령이 적어도 한 개의 허용된 종류의 분기 타겟 명령 이외의 명령일 경우, 오류처리 응답을 기동하도록 구성되고, 상기 적어도 한 개의 타겟 확인 종류의 분기 명령의 적어도 서브셋에 대해, 상기 적어도 한 개의 허용된 종류의 분기 타겟 명령은 상기 링크를 갖는 분기 명령의 분기 타겟 변종을 포함하는 컴퓨터 프로그램을 제공한다.
전술한 컴퓨터 프로그램을 기억하기 위해 기억매체가 제공된다. 기억매체는 비일시적인 기억매체일 수 있다.
본 발명의 또 다른 발명내용, 특징 및 이점은 다음의 첨부도면을 참조하는 이하의 실시예의 설명으로부터 명백해질 것이다:
도 1은 데이터 처리장치의 일례를 나타낸 것이다.
도 2는 링크를 갖는 분기 명령의 거동을 나타낸 것이다.
도 3은 비교를 위해 링크를 갖는 분기 명령과 이와 별개의 분기 타겟 명령을 포함하는 명령들의 시퀀스를 나타낸 것이다.
도 4는 링크를 갖는 분기 명령의 분기 타겟 변종의 사용예를 나타낸 것이다.
도 5는 타겟 확인 분기 명령의 처리방법을 나타낸 흐름도이다.
도 6은 링크를 갖는 분기 명령의 처리를 나타낸 흐름도이다.
도 7은 본 기술을 구현하는데 사용되는 시뮬레이터의 일례를 나타낸 것이다.
분기 명령에 의해 제공된 프로그램 흐름을 제어하는 데이터를 제어하는 것을 목표로 한 공격에 대비하는 한가지 기술은, 적어도 한 개의 허용된 종류의 분기 타겟 명령을 지원하는 명령 디코더를 설치하는 것이며, 이것을 사용하여 프로그램 코드의 작성자가 분기의 정당한 타겟인 것으로 의도한 프로그램의 안전한 분기 타겟 지점을 표기할 수 있다. 적어도 한 개의 타겟 확인 종류의 분기 명령에 응답하여 프로그램 흐름의 비순차적인 변경이 일어날 때, 처리회로는, 타겟 어드레스에 있는 명령이 적어도 한 개의 허용된 종류의 분기 타겟 명령인지 아닌지를 검사한다. 타겟 어드레스에 있는 명령이 적어도 한 개의 허용된 종류의 분기 타겟 명령 이외의 명령일 때, 오류처리 응답이 기동된다. 예를 들어, 오류처리 응답은, 예외 신호를 보내거나, 결함이 검출되었다는 것을 나타내는 상태 정보를 기억하는 것일 수 있다. 이에 따르면, 이 아키텍처는 언제 의도하지 않은 프로그램 흐름의 변경이 존재하였는지 검출하기 위한 메카니즘을 제공하므로, 허용된 종류의 분기 타겟 명령에 의해 표기된 지점들 이외의 프로그램 내부의 임의의 지점으로 분기하는 것이 더 이상 가능하지 않기 때문에, 전술한 형태의 공격이 상당히 더 곤란해질 수 있다.
한가지 종류의 분기 명령은 링크를 갖는 분기 명령이다. 프로그램 흐름의 비순차적인 변경이 링크를 갖는 분기 명령에 응답하여 일어날 때, 명령 디코더는 처리회로를 제어하여 프로그램 흐름의 추후의 복귀에 대한 복귀 어드레스를 설정한다. 옐을 들어, 복귀 어드레스는, 예를 들어 "링크 레지스터"로서 알려진 특정한 레지스터에 기억된다. 추후의 복귀 분기 명령이 복귀 어드레스를 판독한 후 복귀 어드레스로 표시된 어드레스로 다시 프로그램 흐름의 변경을 일으킨다. 이와 같은 기능은, 링크를 갖는 분기 명령을 사용하여 함수를 호출한 후, 함수가 완료되면 프로그램의 이전에 실행된 부분으로 처리를 복귀하는데 유용할 수 있다. 링크를 갖는 분기 명령의 사용은, 복귀 어드레스를 사용하여 함수가 호출되었던 프로그램의 부분을 효율적으로 기억할 수 있으므로, 프로그램 내부의 복수의 다른 위치에서 동일한 함수가 호출되게 할 수 있다.
링크를 갖는 분기 명령 다음에 추후의 허용된 종류의 분기 타겟 명령을 포함시킴으로써, 링크를 갖는 분기 명령에 대해 전술한 공격 형태에 대한 보호가 구현될 수 있다. 그러나, 이 경우 프로그램 내부의 명령들의 수가 증가하고, 링크를 갖는 분기 명령이 비교적 흔하기 때문에, 전체적인 코드 볼륨을 상당한 양만큼 증가시킬 수 있다. 예를 들어, 링크를 갖는 분기 명령의 평균 길이와 평균 사용량 레벨의 코드에서 각각의 링크를 갖는 분기 명령 이후에 분기 타겟 명령을 포함시키면 명령들의 수가 약 6%만큼 증가할 수 있다는 것이 전형적인 프로그램에서 추정되었다. 주어진 프로그램에 대해 필요한 코드의 사이즈를 증가시키는 것은 덜 효율적인 캐시 사용량과 파이프라인 공격을 발생할 수 있으며 이것은 성능에 영향을 미칠 수 있다.
전술한 기술에서는, 링크를 갖는 분기 명령의 분기 타겟 변종이 제공되는데, 이것은 적어도 한 개의 타겟 확인 종류의 분기 명령의 적어도 서브셋에 대한 적어도 한 개의 허용된 종류의 분기 타겟 명령 중에서 한 개로서 취급된다. 이 때문에, 링크를 갖는 분기 명령 그 자체가 허용된 종류의 분기 타겟 명령으로서 작용할 수 있으므로, 링크를 갖는 분기 명령에 이르는 프로그램 흐름의 비순차적인 변경이 진입점(entry point)으로서 취급될 수 있기 때문에, 링크를 갖는 분기 명령 이후에 별개의 분기 타겟 명령을 포함시키는 것은 불필요하다. 이것은, 링크를 갖는 분기 명령의 링크 및 복귀 거동으로 인해, 링크를 갖는 분기 명령에 뒤따르는 명령이 거의 항상 유효한 분기 타겟 지점으로 예측될 것이므로, 명시적인 분기 타겟 명령을 별개로 표시하는 것은 쓸모가 없다. 그 대신에, 링크를 갖는 분기 명령은 허용된 종류의 분기 타겟 명령 그 자체로서 암시적으로 거동할 수 있다. 이것은 전체 코드 볼륨을 줄이도록 도움으로써, 명령 캐시와 명령 처리 파이프라인의 성능을 향상시킬 수 있다.
링크를 갖는 분기 명령에 응답한 복귀 어드레스의 설정은 링크를 갖는 분기 명령이 분기 타겟 변종인지 여부에 따라 변한다. 분기 타겟 변종 이외의 링크를 갖는 분기 명령에 응답하여, 처리회로는 링크를 갖는 분기 명령에 순차적으로 뒤따르는 다음 명령의 어드레스로 복귀 어드레스를 설정한다. 이에 반해, 링크를 갖는 분기 명령의 분기 타겟 변종에 응답하여, 복귀 어드레스가 링크를 갖는 분기 명령의 분기 타겟 변종 그 자체의 어드레스로 설정된다. 이것은, 추후의 복귀 분기가 다시 동일한 링크를 갖는 분기 명령으로 분기되기 때문에, 링크를 갖는 분기 명령의 분기 타겟 변종이 분기 타겟 명령으로서의 역할을 할 수 있다는 것을 의미한다. 이와 같은 거동은, 링크를 갖는 분기 명령의 분기 타겟 변종과 비분기(non-branch) 타겟 변종이 복귀 어드레스를 다르게 설정한다는 것을 의미하지만, 실제로, 복귀 분기 그 자체 이외의 함수 내부의 명령들에 의해 복귀 어드레스가 참조되는 것은 드물다. 이것은, 함수 내부의 복귀 어드레스(함수가 링크를 갖는 분기 명령의 분기 타겟 변종에 의해 호출되었는지 또는 비분키 타겟 변종에 의해 호출되었는지에 근거하여 변동하는 어드레스)의 비확정적인(indeterminate) 정의가 상당한 문제를 일으킬 가능성이 없다는 것을 의미한다(어쨌든, 함수 본문 내에서 복귀 어드레스의 확정적인 정의를 사용할 필요가 있는 코드는 필요한 경우에는 다른 식으로 추가적인 함수 인수로서 어드레스를 전달할 수도 있다). 실제적으로는, 링크를 갖는 분기 명령의 변종이 복귀 어드레스를 그 자신의 어드레스로 설정하도록 허용하여, 그 자체가 허용된 분기 타겟 어드레스로서의 역할을 할 수 있게 함으로써, 대부분의 코드가 줄어든 코드 볼륨으로부터 이득을 얻을 수 있다.
링크를 갖는 분기 명령의 분기 타겟 변종의 거동은, 프로그램 흐름이 링크를 갖는 분기 명령으로 순차적으로 건네지는지 또는 비순차적으로 건네지는지에 따라 변경된다. 프로그램 흐름이 적어도 한 개의 타겟 확인 종류의 분기 명령으로부터 링크를 갖는 분기 명령의 분기 타겟 변종으로 비순차적으로 건네질 때에는, 링크를 갖는 분기 명령의 분기 타겟 변종과 관련된 프로그램 흐름의 비순차적인 변경이 금지됨으로써, 그 대신에 링크를 갖는 분기 명령의 분기 타겟 변종 다음에 실행된 다음 명령이 단순히 링크를 갖는 분기 명령으로부터 순차적으로 뒤따르는 다음 명령이 될 수도 있다. 이것은, 프로그램 흐름이 적어도 한 개의 타겟 확인 종류의 분기 명령으로부터 링크를 갖는 분기 명령의 분기 타겟 변종으로 비순차적으로 건네질 때, 이것은 링크를 갖는 분기 명령에 의해 표시된 분기가 보통 이미 행해졌다는 것을 의미하므로, 이제는 프로그램 흐름이 링크를 갖는 분기 명령으로 복귀하고 있으며, 링크를 갖는 분기 명령이 분기 타겟 명령으로서의 역할을 한다는 것을 인식한다.
한편, 프로그램 흐름이 링크를 갖는 분기 명령의 분기 타겟 변종으로 순차적으로 건네지면(즉, 분기를 타기 전에 링크를 갖는 분기 명령과 처음으로 마주치면), 프로그램 흐름의 비순차적인 변경이 허용된다(분기를 타는 경우, 이때 분기를 타는지 타지 않는지도 다른 조건부 정보에 의존한다). 또한, 모든 분기가 타겟 확인 종류의 분기 명령으로서 취급되지는 않는 경우, 프로그램 흐름이 타겟 확인 종류 이외의 분기 명령으로부터 링크를 갖는 분기 명령의 분기 타겟 변종으로 비순차적으로 건네질 때, 링크를 갖는 분기 명령과 관련된 프로그램 흐름의 비순차적인 변경이 여전히 허용될 수도 있다.
즉, 링크를 갖는 분기 명령의 분기 타겟 변종으로 순차적으로 건네지거나, 또는 분기 타겟 명령인지 아닌지 확인하기 위해 타겟 어드레스에서 명령의 확인을 요구하지 않는 분기로부터 링크를 갖는 분기 명령의 분기 타겟 변종으로 분기할 때, 링크를 갖는 분기 명령은 (다른 조건부 요구사항을 만족하는 경우) 프로그램 흐름의 비순차적인 변경을 일으키는 표준의 링크를 갖는 분기 명령으로 취급된다. 이에 반해, 타겟 어드레스에 있는 명령이 허용된 종류의 분기 타겟 명령인지 여부의 확인을 요구하는 분기로부터 링크를 갖는 분기 명령의 분기 타겟 변종으로 프로그램 흐름이 비순차적으로 건네질 때, 이 명령은 아키텍처 레벨에서 무연선(no-operation) 거동을 제공하는 분기 타겟 명령으로서 취급되므로, 이 명령과 관련된 분기(프로그램 흐름의 비순차적인 변경)가 금지된다. 이와 같은 동일한 명령의 이중적인 거동은 이들 2가지 용도에 대해 별개의 명령들을 제공할 필요를 없앰으로써 코드 볼륨의 축소를 가능하게 한다.
본 출원에서, 용어 "분기 명령"은 프로그램 흐름의 비순차적인 변경을 일으킬 수 있는 모든 명령을 말한다. 이것은, 예를 들어 분기 명령으로서 명령을 표기하는 명령 옵코드를 사용하여, 분기로서 명시적으로 정의되는 특정한 종류의 분기 명령을 포함해도 된다. 그러나, 분기 명령은, 다른 종류의 처리 연산을 의미하는 옵코드를 갖지만 프로그램 내에서 도달한 프로그램 흐름의 현재 지점을 제어하는 프로그램 카운터를 제공하는 레지스터를 목적지 레지스터로서 지정하는 다른 종류의 명령일 수도 있다. 예를 들어, 분기 명령은, 그것의 목적지 레지스터로서 프로그램 카운터 레지스터를 지정하는, 산술 명령, 논리 명령, 로드 명령, 또는 레지스터 이동 명령(데이터를 한 개의 레지스터로부터 다른 레지스터로 이동하는 명령)일 수도 있다.
일부 구현예에서, 모든 분기 명령들은, 분기 타겟 어드레스에서 명령의 확인이 행해지는 적어도 한 개의 타겟 확인 종류의 분기 명령으로서 취급되고, 타겟 어드레스에 있는 명령이 허용된 종류의 타겟 명령 중에서 한 개가 아닌 경우에는 오류처리 응답이 기동된다. 그러나, 다른 실시예에서는, 분기 타겟 어드레스의 명령의 확인이 특정한 타겟 확인 종류의 분기 명령들에 대해서만 필요하고, 이 확인은 다른 종류의 분기 명령에 대해서는 생략된다. 예를 들어, (고정된 절대 타겟 어드레스를 사용하거나, 프로그램의 이전 부분들로부터 유도된 데이터에 의존하지 않는 오프셋을 이용하여 분기 명령의 어드레스에 대해 정의된 상대 타겟 어드레스를 사용하여) 동일한 위치로 항상 분기하는 정적 분기는, 분기 제어 데이터의 수정을 통해 이와 같은 분기를 손상시키는 것이 불가능하기 때문에, 타겟 어드레스에서 명령의 확인을 필요로 하지 않을 수도 있다. 이 때문에, 일부 경우에는, 타겟 어드레스가 이전의 명령들로부터 유도된 데이터에 의존하는 데이터 의존형 분기에 대해서만 타겟 어드레스에서 명령의 확인이 행해진다.
링크를 갖는 분기 명령의 분기 타겟 변종은, 일부 구현예에서는, 모든 타겟 확인 종류의 분기 명령에 대해 허용된 종류의 분기 타겟 명령으로서 취급될 수도 있다. 그러나, 다른 실시예에서는, 링크를 갖는 분기 명령의 분기 타겟 변종이 타겟 확인 종류의 분기 명령의 특정한 (제한된) 서브셋에 대해 허용된 종류의 분기 타겟 명령이어도 된다. 예를 들어, 링크 레지스터에 기억된 복귀 어드레스로 분기하는데 사용될 수 있는 분기 명령들만이 링크를 갖는 분기 명령의 분기 타겟 변종으로 분기하도록 허용될 수 있으며, 타겟 어드레스에 있는 명령이 링크를 갖는 분기 명령의 분기 타겟 변종인 경우에, 복귀 어드레스로 분기하지 않는 다른 분기들은 여전히 오류처리 응답을 기동할 수도 있다.
이 때문에, 어떤 경우에, 제1의 타겟 확인 종류의 분기 명령에 대해, 링크를 갖는 분기 명령의 분기 타겟 변종이 적어도 한 개의 허용된 종류의 분기 타겟 명령 중에서 한 개인 반면에, 제2의 타겟 확인 종류의 분기 명령에 대해, 링크를 갖는 분기 명령의 분기 타겟 변종은 적어도 한가지 종류의 허용된 분기 타겟 명령 중에서 한 개가 아니다. 링크를 갖는 분기 명령의 분기 타겟 변종이 허용된 종류의 분기 타겟 명령의 유효한 종류인 타겟 확인 종류의 분기 명령의 서브셋을 제한함으로써, 코드를 작성한 프로그램 또는 컴파일러에 의도되지 않게 프로그램 흐름의 방향을 변경하기 위한 여지를 줄여, 보안을 향상시킨다.
일부 경우에, 링크를 갖는 분기 명령의 한 개보다 많은 분기 타겟 변종이 정의될 수도 있다. 링크를 갖는 분기 명령의 다양한 변종들은 타겟 확인 종류의 분기 명령들의 다양한 서브셋에 대한 허용된 종류의 분기 타겟 명령으로서 취급될 수도 있다. 예를 들어, 링크를 갖는 분기 명령의 제1의 분기 타겟 변종은 제1 서브셋의 타겟 확인 종류의 분기 명령에 대한 적어도 한가지 종류의 허용된 분기 타겟 명령 중에서 한 개이고, 링크를 갖는 분기 명령의 제2의 분기 타겟 변종은 제2(다른) 서브셋의 타겟 확인 종류의 분기 명령에 대한 허용된 종류의 분기 타겟 명령이어도 된다.
어떤 종류의 타겟 확인 종류의 분기 명령이 링크를 갖는 분기 명령의 지정된 변종으로 분기하는 것이 허용되는지에 대해 더 특정함으로써, 마찬가지로 공격자가 바람직하지 않은 거동을 일으킬 여지를 줄인다. 예를 들어, 타겟 확인 종류의 분기 명령의 한가지는 이전의 링크를 갖는 분기 명령에 의해 설정된 링크 FP 내부의 어드레스로 항상 분기하는 전용의 복귀 분기 명령이어도 된다.
일부 구현예는, 이 전용의 복귀 분기 명령에 대한 허용된 종류의 분기 타겟 명령으로서만 취급되지만 복귀 어드레스 이외의 임의의 타겟 어드레스를 수용하는 다른 더 일반적인 종류의 분기들에 대한 허용된 종류의 분기 타겟 명령 중에서 한 개가 아닌 링크를 갖는 분기 명령의 변종을 지원한다.
이에 반해, 일부 프로그램 코드는 함수의 처리후 복귀 분기를 제어하기 위해 그것의 타겟 어드레스에 대한 소스 레지스터로서 링크 레지스터를 지정하는 일반적인 종류의 분기를 사용하며, 이 경우에는, 링크를 갖는 분기 명령의 분기 타겟 변종을 이와 같은 일반적인 분기에 대한 허용된 분기 타겟 명령들 중에서 한 개가 되도록 하는 것이 바람직할 수도 있다.
복귀 분기에 대해서만 유효한 분기 타겟인 제1 분기 타겟 변종과, 복귀 분기나 더욱 일반적인 형태의 분기에 의해 대상이 되는 것으로 허용되는 제2 분기 타겟 모두를 정의함으로써, 컴파일러나 프로그래머가 필요한 보안 레벨에 따라 그들이 사용하기 원하는 변종을 선택할 수 있도록 한다. 제1 변종은 복귀 어드레스로의 분기로서 일반적인 분기를 사용하는 것이 더 이상 불가능하기 때문에 보안이 더 우수하지만 더 엄격한 프로그래밍 요구사항을 필요로 하는 반면에, 제2 변종은 더 느슨한 프로그래밍 실행을 허용하지만, 복귀를 구현하기 위해 실제로 의도되지 않은 다른 일반적인 분기가 링크를 갖는 분기 명령의 위치로 유효하게 분기될 수도 있다는 것을 의미하므로 추가적인 취약성을 갖는다. 이 때문에, 링크를 갖는 분기 명령으로 유효하게 분기하는 타겟 확인 종류의 분기 명령들의 다양한 서브셋들을 지원하는 다양한 형태의 링크를 갖는 분기 명령을 지원함으로써, 프로그래머가 보안과 프로그래밍의 용이함의 균형을 맞출 수 있는 유연성을 제공한다.
일부 구현예에서, 링크를 갖는 분기 명령의 분기 타겟 변종은 다양한 종류의 분기 명령 중에서 한 개로서 취급되지 않는 링크를 갖는 분기 명령의 또 다른 변종과 다른 인코딩을 가질 수도 있다. 또한, 전술한 링크를 갖는 분기 명령의 제1/제2 분기 타겟 변종들은 다양한 명령 인코딩을 사용하여 정의될 수도 있다.
그러나, 다른 실시예에서는, 링크를 갖는 분기 명령의 분기 타겟 변종은 허용된 종류의 분기 타겟 명령이 아닌 링크를 갖는 분기 명령의 또 다른 변종과 동일한 인코딩을 갖거나, 또는 제1/제2 분기 타겟 변종이 동일한 인코딩을 가져도 된다. 이 경우, 명령 디코더 또는 처리회로는 특정한 링크를 갖는 분기 명령의 명령 인코딩 이외의 적어도 한 개의 파라미터에 근거하여 특정한 링크를 갖는 분기 명령의 특정한 변종(예를 들어, 이것이 분기 타겟 변종인지 또는 또 다른 비분기 타겟 변종인지 또는 분기 타겟 변종이 제1 분기 타겟 변종인지 제2 분기 타겟 변종인지)을 판정할 수도 있다.
예를 들어, 적어도 한 개의 파라미터는 환경설정 레지스터에 기억된 환경설정 파라미터일 수도 있다. 이것은, 링크를 갖는 분기 명령의 분기 타겟 변종의 기능을 지원하는 아키텍처를 갖지 않는 레거시 시스템과, 전술한 것과 같이 분기 타겟 변종으로의 프로그램 흐름의 비순차적 및 순차적인 통과에 대해 다양한 복귀 어드레스 설정 거동 및 다양한 거동을 갖는 링크를 갖는 분기 명령에 응답하기 위해 기록된 더 새로운 머신 모두에서 올바르게 동작할 수 있는 코드를 작성하는 것을 더 용이하게 만들 수 있다. 링크를 갖는 분기 명령의 분기 타겟 변종 및 비분기 타겟 변종 모두에 대해 정확히 동일한 인코딩을 사용함으로써, 동일한 코드가 이들 모든 장치 상에서 실행될 수 있다. 그러나, 분기 타겟 변종(들)의 기능을 지원하는 장치는 분기 타겟 변종 기능이 활성화되었다는 것을 지정하는 파라미터를 갖는 환경설정 레지스터를 가질 수 있다. 예를 들어, 레거시 시스템에서, 디폴트로 고정값으로 미리 짜넣어져 설정된 여분 비트를 가지므로, 모든 장치들이 디폴트로 모든 링크를 갖는 분기 명령을 비분기 타겟 변종으로서 취급하는 환경설정 레지스터가 사용될 수도 있다. 그러나, 더 새로운 장치에서는, 이 환경설정 레지스터의 이 비트가 다른 값으로 설정되어, 링크를 갖는 분기 명령이 분기 타겟 변종으로 취급되므로 이들이 별도로 인코딩된 분기 타겟 명령을 필요로 하지 않고 복귀 분기에 의해 정당하게 대상이 된다는 것을 나타낼 수도 있다.
링크를 갖는 분기 명령의 변종을 결정할 수 있는 파라미터의 다른 예가 제공될 수 있다. 일례에서, 적어도 한 개의 파라미터는 링크를 갖는 분기 명령의 명령 어드레스를 포함할 수 있다. 예를 들어, 프로그램 코드의 특정한 부분에 있는 링크를 갖는 분기 명령은 분기 타겟 변종으로서 취급될 수 있는 반면에, 프로그램 코드의 다른 부분에서는, 링크를 갖는 분기 명령이 비분기 타겟 변종으로서 취급될 수 있다. 이것은 코드의 특정한 부분에 대해 필요한 보안 레벨에 따라 코드의 일부가 다른 것보다 더 제한된 세트의 허용된 분기 타겟 명령을 가질 수 있도록 할 수 있다.
또한, 링크를 갖는 분기 명령의 거동을 제어하는 파라미터는, 프로그램 흐름이 비순차적으로 특정한 링크를 갖는 분기 명령으로 통과하게 하는 특정한 타겟 확인 종류의 분기 명령의 명령 어드레스일 수도 있다. 즉, 프로그램 흐름이 다시 특정한 링크를 갖는 분기 명령으로 통과하게 하는 복귀 분기의 어드레스는, 링크를 갖는 분기 명령의 변종, 예를 들어, 명령이 (제1 서브셋의 분기 종류들에 의해 유효하게 대상이 될 수 있는) 제1 분기 타겟 변종으로서 취급되는지 또는 (제2 서브셋의 분기 종류들에 의해 유효하게 대상이 될 수 있는) 제2 분기 타겟 변종으로서 취급되는지를 결정할 수도 있다. 이것은, 예를 들어, 더 오래된 코드가 제1 어드레스 범위에 기억되고 더 새로운 코드가 제2 어드레스 범위에 기억되는 경우에 유용할 수 있다. 더 오래된 코드는 복귀 분기에 대해 더 넓은 세트의 분기 명령 종류를 사용할 수 있으므로, 더 오래된 코드의 어드레스 범위에 있는 분기 명령으로부터 분기된 링크를 갖는 분기 명령이 더 넓은 서브셋의 분기 종류들이 링크를 갖는 분기 명령을 유효하게 대상으로 하게 할 수 있는 변종이 되는 것을 선호한다. 한편, 복귀 분기를 행하기 위해 더 제한된 서브셋의 분기 종류를 사용하도록 컴파일된 더 새로운 코드에 대해서는, 링크를 갖는 분기 명령을 더 제한된 서브셋의 분기 종류에 대한 유효한 분기 타겟 명령로서의 역할을 하는 다른 변종으로서 해석함으로써 보안이 향상될 수 있다. 이 때문에, 링크를 갖는 분기 명령으로 분기하는 분기의 어드레스에 근거하여 변종을 선택함으로써, 레거시 코드와의 호환성과 더 새로운 코드에 대한 증가된 보안 사이에서 더 좋은 균형을 허용할 수 있다.
이와 같은 접근방법에 따르면, 특정한 타겟 확인 종류의 분기 명령과 마주친 직후이면서, 특정한 링크를 갖는 분기 명령의 처리 이전에 예외가 발생되는 경우, 정보가 기록되어 특정한 링크를 갖는 분기 명령의 변종을 판정하는데 도움이 된다. 예를 들어, 이와 같은 정보는, 예외를 발생할 때, 또는 한 개 이상의 비트 예외 복귀 어드레스(예를 들어, 어드레스의 최상위 또는 최하위 부분에서 사용되지 않는 비트)를 수정함으로써 캡처된 상태의 일부로서 기록될 수도 있다. 이것은, 예외로부터 복귀할 때, 예외 직전에 기동된 분기 명령의 해당 특성이 손실되지 않으므로, 예외 이후에 처리를 재개시에 링크를 갖는 분기 명령의 적절한 거동을 결정할 수 있다는 것을 의미한다.
도 1은 데이터 처리장치(2)의 일례를 개략적으로 나타낸 것이다. 이때, 이것은 단순히 장치의 구성요소들의 서브셋의 고레벨 표현이며, 장치가 도시하지 않은 다른 많은 구성요소를 포함한다는 것이 자명하다. 장치(2)는 명령 디코더(6)에 의해 디코드된 명령들에 응답하여 데이터 처리를 행하는 처리회로(4)를 구비한다. 명령 디코더(6)는 명령 캐시(8)로부터 페치된 명령들을 디코드하여, 처리회로(4)를 제어하여 명령들에 의해 표시된 대응하는 처리 연산들을 행하게 하는 제어신호들(10)을 발생한다. 처리회로(4)는 레지스터들(14)에 기억된 값들에 대해 연산을 행하여 다시 레지스터들에 기록되는 결과값들을 발생하는 한 개 이상의 실행 유닛들을 구비한다. 예를 들어, 실행 유닛은 산술 연산 또는 논리 연산을 실행하는 산술/논리 유닛(ALU), 부동소수점 피연산자들을 사용하여 연산을 실행하는 부동소수점 유닛 및/또는 복수의 독립적인 데이터 성분들을 포함하는 피연산자들에 대해 벡터 연산을 행하는 벡터 처리 유닛을 구비할 수도 있다. 처리회로는, 레지스터들(14)과 메모리 시스템 사이에서의 데이터의 전송을 제어하는 메모리 액세스 유닛(또는 로드/스토어 유닛)(15)을 더 구비한다. 본 실시예에서, 메모리 시스템은, 명령 캐시(8), 레벨 1 데이터 캐시(16), 데이터와 명령들 사이에서 공유되는 레벨 2 캐시(17)와 메인 메모리(18)를 포함한다. 이때, 다른 캐시 계층구조도 가능하며, 이것은 단지 한가지 예에 지나지 않는다는 것이 자명하다. 로드/스토어 유닛(15)에 의해 기동된 메모리 액세스를 지원하기 위해 어드레스 변환 기능을 제공하는 메모리 관리 유닛(MMU)(20)이 설치된다. MMU는 메모리 시스템 16, 17, 18에 기억된 페이지 테이블로부터 엔트리들의 서브셋을 캐시하는 변환 색인 버퍼(TLB)(22)를 갖는다. 각각의 페이지 테이블 엔트리는, 대응하는 페이지의 어드레스들에 대한 어드레스 변환 매핑을 제공하고, 페이지가 판독 전용 영역인지 또는 판독가능 및 기록가능 모두인지를 지정하는 액세스 허가, 또는 어떤 특권 레벨들이 페이지를 액세스할 수 있는지 지정하는 액세스 허가 등의 액세스 제어 파라미터들을 더 지정한다.
도 2는 링크를 갖는 분기 명령의 처리의 일례를 나타낸 것이다. 도 2에서, 링크를 갖는 분기 명령은, 분기를 탔을 때 프로그램 흐름이 향하게 될 명령의 타겟 어드레스를 나타내는 소스 레지스터 An을 지정하는 레지스터 지정 형태의 명령이다. 이때, 다른 실시예에서는, 타겟 어드레스는, 레지스터가 아니라, 링크를 갖는 분기 명령의 명령 인코딩에서 지정된 즉시값에 의해 정의될 수도 있다는 것이 명백하다. 즉시값 또는 레지스터 값은 절대값으로서, 또는 링크를 갖는 분기 명령의 어드레스에 대한 타겟 어드레스를 계산하는데 사용되는 상대값으로서 타겟 어드레스를 식별할 수도 있다. 이 때문에, 타겟 어드레스를 인코딩하는 다양한 방법이 제공될 수 있다. 도 2의 실시예와 그후의 실시예에서, 링크를 갖는 분기 명령은 타겟 어드레스에 있는 명령에서 비순차적인 프로그램 흐름의 변경을 무조건으로 일으키는 무조건 분기이다. 그러나, 본 발명은, 처리회로가 이전 명령들의 결과에 의존하는 레지스터(14)에 표시된 소스 피연산자 또는 조건 상태에 따라 분기를 탈 것인지 아닌지를 판정하는 조건부 분기에 적용될 수도 있다.
다른 종류의 분기와 달리, 링크를 갖는 분기 명령에 대해서는, 프로그램 흐름의 변경 이외에, 분기를 탈 때 레지스터들(14) 내부에 설치된 링크 레지스터가 링크를 갖는 분기 명령의 어드레스에 따라 결정된 복귀 어드레스를 사용하여 갱신된다. 도 2에 도시된 링크를 갖는 분기 명령의 비분기 타겟 변종에 대해, 링크 레지스터 내부의 복귀 어드레스는 링크를 갖는 분기 명령으로부터 순차적으로 뒤따르는 다음 명령의 어드레스로 설정된다. 예를 들어, 연속된 명령들의 어드레스들 사이의 오프셋이 4인 경우, 링크 레지스터는 그 자신의 복귀 어드레스가 #add1+4로 설정되는데, 이때 #add1은 링크를 갖는 분기 명령의 어드레스이다. 링크를 갖는 분기 명령이 실행되면, 타겟 어드레스(본 실시예에서는 #add2)에 있는 함수 코드로 분기한다. 후속하는 복귀 분기 명령(RET)과 마주치면, 이것은 링크 레지스터에 복귀 어드레스로서 표시되는 어드레스를 갖는 명령으로의 복귀 분기를 기동하는데, 본 실시예에서 이것은 링크를 갖는 분기 명령 BLR에 뒤따르는 (어드레스 #add1+4에 있는) 가산 명령으로 처리가 향하게 한다. 도 2는 전용 종류의 복귀 분기 명령 RET를 나타내지만, 분기의 타겟 어드레스를 지정하는 소스 레지스터로서 링크 레지스터를 지정함으로써, 링크 레지스터의 어드레스로 분기하기 위해 더욱 일반적인 형태의 분기 명령을 사용하는 것도 가능하다.
도 3은 복귀 어드레스를 손상시키는 것을 목표로 하는 공격에 대비하기 위한 분기 타겟 명령(BTI)의 사용을 나타낸 것이다. 예를 들어, 네스티드(nested) 함수 호출이 행해질 때, 링크를 갖는 분기 명령에 의해 설정된 복귀 어드레스가 스택 위에 놓인다. 복귀 어드레스가 스택 상에 있는 동안, 공격자가 스택 상의 데이터를 손상시켜, 프로세서를 속여서 실행되고 있는 코드를 작성하는 프로그래머 또는 컴파일러에 의해 의도하지 않은 프로그램의 다른 부분으로 분기하게 하기 위한 시도에서, 링크를 갖는 분기 명령에 의해 원래 의도된 거소가 다른 값으로 복귀 어드레스를 변경할 수 있다. 일부 분기는, 분기의 타겟 어드레스에 있는 명령이 분기 타겟 명령(BTI)인지 아닌지 프로세서가 검사하는 타겟 확인 분기 명령일 수도 있다. 이것은 프로그래머/컴파일러가 분기 타겟 명령으로 안전한 분기 타겟 지점들을 표기할 수 있도록 할 수 있으므로, 다른 잠재적으로 안전하지 않은 위치로의 분기가 오류를 갖는 것으로 검출되어, 결함이나 예외 신호를 보내는 것 등의 오류처리 응답을 기동할 수 있다. 이때, 링크를 갖는 분기 명령 그 자체와 복귀 분기 명령 모두는 모두 타겟 확인 명령으로서 취급되므로, 링크를 갖는 분기 명령의 타겟 어드레스에서 실행된 함수 코드의 제1 명령과 복귀 분기에 대한 타겟 명령으로서의 역할을 하는 링크를 갖는 분기 명령에 뒤따르는 다음 명령 모두가 오류처리 응답을 피하기 위해 분기 타겟 명령(BTI)인 것을 필요로 할 것이다.
이것은 보안 공격에 대해 보호하는데 유용할 수 있다. 그러나, 모든 링크를 갖는 분기 명령 뒤에 분기 타겟 명령이 뒤따라야만 하는 경우, 이것은 프로그램 코드에서의 명령의 총수를 증가시켜 메모리, 캐시 및 파이프라인 이용의 더 큰 요구를 발생한다.
도 4는 코드 밀도를 줄이는 것을 돕기 위해 링크를 갖는 분기 명령의 분기 타겟 변종(BLRTI)의 사용을 나타낸 것이다. 이때, BLRTI 명령은 다른 명령 인코딩(예를 들어, 다른 명령 옵코드, 또는 특정한 변종을 지정하는 명령 코딩의 또 다른 파라미터)을 갖는 것을 거쳐 도 2의 BLR 명령과 구별되거나, 환경설정 레지스터에 기억된 환경설정 파라미터 등의 일부 다른 정보를 통해, 또는 링크를 갖는 분기 명령 그 자체의 어드레스에 근거하거나, 또는 링크를 갖는 분기 명령으로 분기하는 분기의 어드레스에 근거하여, 구별될 수도 있다.
링크를 갖는 분기 명령의 분기 타겟 변종은 이중 기능을 갖는다. 링크를 갖는 분기 명령으로의 제어 흐름의 순차적인 변경시에, 또는 타겟 어드레스에 있는 명령이 분기 타겟 명령인지 아닌지의 확인을 필요로 하지 않는 분기로부터 링크를 갖는 분기 명령으로의 제어 흐름의 비순차적인 변경시에, 링크를 갖는 분기 명령의 분기 타겟 변종이 정규의 링크를 갖는 분기 명령으로서 거동하므로, 분기를 타는 경우 분기 어드레스에 있는 명령으로의 제어 흐름의 변경을 일으키고 또는 복귀 어드레스의 설정을 일으킨다. 도 2 및 도 3에 도시된 비분기 타겟 변종과 달리, 복귀 분기가 다음 명령의 어드레스 #add1+4가 아니라, 링크를 갖는 분기 명령의 어드레스 #add1으로 설정된다. 이것은, 분기를 타서 함수 코드가 완료될 때, 복귀 분기가 다음 명령이 아니라 링크를 갖는 분기 명령 그 자체로 다시 분기되게 보장한다.
데이터 의존형 분기이거나, 타겟 어드레스에 있는 명령이 분기 타겟 명령인지 여부의 확인이 필요한 다른 분기에 의해 기동된 링크를 갖는 분기 명령의 분기 타겟 변종으로의 제어 흐름의 비순차적인 변경인 이와 같은 복귀 분기시에, 링크를 갖는 분기 명령의 타겟 분기 변종이 분기 타겟 명령 BTI로서 취급된다. 이 때문에, 링크를 갖는 분기 명령과 관련된 분기가 금지되므로, 링크를 갖는 분기 명령 이후의 다음 순차 명령으로 처리가 이동한다. 따라서, 동일한 명령이 링크를 갖는 분기 명령과 유효한 분기점을 표기하는 분기 타겟 명령 모두로서 작용하게 함으로써, 링크를 갖는 분기 명령에 뒤따르는 명시적인 BTI의 필요성을 없앤다. 링크를 갖는 분기 명령은 프로그램 코드에서 매우 흔하므로, 이 기술은 상당한 수의 명령들을 제거하는데 매우 유용할 수 있는데 - 예를 들어, 일부 일반적인 처리 작업부하에 대해 추정된 6%의 명령이 제거될 수 있다.
도 5는 프로세서에 의한 타겟 확인 분기 명령의 처리를 나타낸 흐름도이다. 스텝 40에서, (링크를 갖는 분기 명령 이외의) 타겟 확인 분기 명령이 명령 디코더(6)에 의해 디코드된다. 링크를 갖는 분기 명령의 처리는 이하에서 설명하는 도 6에서 별도로 설정한다. 일부 경우에, 모든 분기 명령은 타겟 확인 종류의 분기 명령인 것으로 생각한다. 이와 달리, 특정한 종류의 분기만 타겟 확인 분기 명령인 것으로 생각해도 된다. 예를 들어, 명령 디코더(6)는, 분기 명령이 이전의 명령들에 의해 지정된 데이터에 타겟 어드레스가 의존하는 데이터 의존형 분기인 경우에 이 분기 명령이 타겟 확인 분기인 것으로 판정한다.
스텝 42에서, 처리회로(4)는 분기를 타야 하는지 여부를 판정하거나 예측한다. 분기의 결과가 실제로 알려지기 전에, 분기를 탈 것 같은지 아닌지를 판정하여, 분기의 결과가 해결되기 전에 추후의 명령들이 페치, 디코드 및 실행될 수 있도록 하기 위해 프로세서가 분기 예측기를 구비하는 것이 일반적이다. 분기 예측이 올바르지 않은 것으로 판명되면, 처리가 분기점으로 되돌아간 후 올바른 분기 결과로 재개할 수 있다. 분기를 타지 않는 것으로 판정 또는 예측되는 경우, 스텝 44에서 분기를 타지 않고 다음의 순차 명령이 처리된다. 한편, 분기를 타는 것으로 예측 또는 판정된 경우, 스텝 46에서 명령 디코더(6)가 처리회로(4)를 제어하여 분기의 타겟 어드레스에 있는 명령이 허용된 종류의 분기 타겟 명령인지 여부를 판정한다. 어떤 종류의 분기 타겟 명령이 허용되는지는 실행되고 있는 분기의 특정한 종류에 의존하거나, 프로세서의 특정한 거동을 환경설정하는 환경설정 레지스터 내부의 환경설정 값 등의 다른 파라미터에 의존할 수도 있다. 분기의 타겟 어드레스에 있는 명령이 허용된 종류의 분기 타겟 명령 둥에서 한 개가 아닌 경우에는, 스텝 48에서 오류처리 응답이 기동된다. 오류처리 응답은, 예를 들어 예외 처리기를 기동하여 결함을 처리하고 그것을 유저에게 보고하는 결함이나 예외의 신호를 보내는 것일 수 있다. 한편, 분기의 타겟 어드레스에 있는 명령이 허용된 종류의 분기 타겟 명령인 경우, 스텝 50에서 처리회로(4)는 오류처리 응답을 기동하지 않고 분기 이후의 계속된 처리를 허용한다. 이와 같은 접근방법은, 분기가 코드 내부의 특정한 소정의 위치로만 분기하여, 공격자가 의도하지 않은 방법으로 코드의 부분들을 결함하기 위해 분기 제어 데이터를 손상시키기 위한 여지를 제한할 수 있도록 보장한다.
도 6은 링크를 갖는 분기 명령의 처리를 나타낸 흐름도이다. 스텝 60에서, 명령 디코더는 링크를 갖는 분기 명령을 디코드한다. 스텝 62에서, 명령 디코더(6)는 링크를 갖는 분기 명령이 분기 타겟 변종인지 여부를 판정한다. 링크를 갖는 분기 명령의 변종은, 명령 인코딩으로부터, 예를 들어, 명령 옵코드로부터, 또는 링크를 갖는 분기 명령을 갖는 특정한 변종을 나타내는 값을 지정하는 인코딩의 다른 필드로부터 판정될 수 있다. 이와 달리, 명령 디코더(6)는 레지스터 뱅크(14) 내부의 환경설정 레지스터에 기억된 환경설정 갑으로부터 변종을 판정할 수 있다. 또한, 링크를 갖는 분기 명령의 변종은 분기 링크 명령의 어드레스 또는 링크를 갖는 분기 명령으로 분기하는 이전의 분기의 어드레스에 의존할 수도 있다. 또 다른 실시예에서, 이전의 분기가 실행된 이후에 예외가 발생하는 경우, 링크를 갖는 분기 명령의 변종을 판정하는 이전 분기의 속성을 정의하는 데이터가, 예외가 발생될 때 보존되었던 예외 상태 정보로부터, 또는 예외의 처리 후에 처리를 재개하려는 어드레스를 나타내는 예외 복귀 어드레스의 특정한 비트들(이들 비트는, 예외를 발생할 때, 추후의 링크를 갖는 분기 명령의 변종을 판정하는 이전 분기의 속성에 근거하여 수정되었다)로부터 판정되어도 된다.
링크를 갖는 분기 명령이 분기 타겟 변종이 아닌 경우, 스텝 64에서, 분기를 탈 것인지 아닌지가 판정 또는 예측된다. 분기를 타지 않는 경우, 스텝 66에서 분기를 타지 않고 링크를 갖는 분기 명령으로부터 순차적으로 뒤따르는 다음 명령으로 처리가 진행한다. 분기를 타는 경우, 스텝 68에서, 명령 디코더(6)는 처리회로(4)를 제어하여, 링크 레지스터 내부의 복귀 어드레스를 링크를 갖는 분기 명령으로부터 순차적으로 뒤따르는 다음 명령의 어드레스로 설정하게 한다. 스텝 70에서, 프로그램 흐름은 링크를 갖는 분기 명령의 타겟 어드레스에 있는 명령으로 분기하도록 제어된다. 분기 타겟 어드레스는, 링크를 갖는 분기 명령에 의해 지정된 레지스터 값으로부터 또는 즉시값으로부터 결정되거나, 또는 절대 어드레스 또는 프로그램 카운터에 대해 정의된 상대 어드레스로서 정의될 수도 있다.
스텝 72에서, 명령 디코더는 링크를 갖는 분기 명령이 타겟 확인 종류의 분기 명령인지 여부를 판정한다. 이것이 아니면, 스텝 74에서 단순히 분기 후에 처리가 계속하는 것이 허용된다. 그러나, 링크를 갖는 분기 명령이 타겟 확인 종류의 분기 명령인 경우, 스텝 76에서, 명령 디코더(6)는 처리회로(4)를 제어하여, 분기의 타겟 어드레스에 있는 명령이 허용된 종류의 분기 타겟 명령인지 여부를 판정하게 한다. 아닌 경우에는, 스텝 78에서, 도 5의 스텝 48에서와 동일하게 오류처리 응답이 기동되는 반면에, 타겟 어드레스에 있는 명령이 허용된 종류의 분기 타겟 명령인 경우, 스텝 74에서 분기 후의 처리가 계속된다. 어떤 종류의 명령이 링크를 갖는 분기 명령에 대한 허용된 종류의 분기 타겟 명령인지는 구현마다 변동한다. 일부 경우에, 일반적인 분기 타겟 명령 BTI가 모든 종류의 분기에 대한 허용된 분기 타겟 명령으로서 취급될 수도 있다. 다른 경우에, 특정한 종류의 분기들에 의해서만 유효하게 대상이 되는 특정한 분기 종류 특유의 분기 타겟 명령이 제공될 수도 있다.
스텝 62에서 링크를 갖는 분기 명령이 명령의 분기 타겟 변종인 경우, 스텝 80에서, 타겟 확인 종류의 분기 명령으로부터의 분기의 결과로써 제어 흐름이 비순차적으로 링크를 갖는 분기 명령으로 건네졌는지 여부가 판정된다. 그렇지 않은 경우, 스텝 81에서 분기를 탈 것인지 여부가 판정 또는 예측된다. 분기를 타지 않는 경우에는, 스텝 66에서 분기를 타지 않고 링크를 갖는 분기 명령으로부터 순차적으로 뒤따르는 다음 명령으로 처리가 진행한다. 분기를 타는 경우, 스텝 82에서 추후의 복귀 분기에 대한 복귀 어드레스가 링크를 갖는 분기 명령 그 자체의 어드레스와 같게 설정된 후, 스텝 70으로 처리가 진행하여, 전술한 것과 마찬가지로 스텝 70 내지 78이 행해진다. 이 때문에, 링크를 갖는 분기 명령의 분기 타겟 변종으로의 프로그램 흐름의 순차적인 변경시, 또는 타겟 확인 종류가 아닌 분기로부터의 분기 타겟 변종으로의 프로그램 흐름의 비순차적인 변경시에, 링크를 갖는 분기 거동이 일어나지만, 스텝 68에서와 같이 다음 명령의 어드레스로 복귀 어드레스를 리셋하는 것 대신에, 어드레스가 링크를 갖는 분기 명령의 어드레스와 동일하게 설정됨으로써, 추후의 복귀 분기가 링크를 갖는 분기 명령으로 처리를 복귀하여, 분기 타겟 명령으로서 기능할 수 있다.
스텝 80에서, 제어 흐름이 (복귀 분기 명령 RET 또는 링크 레지스터를 타겟 어드레스를 정의하는 그것의 소스 레지스터로서 지정하는 일반적인 형태의 분기 명령을 포함하는 데이터 의존형 분기와 같은) 타겟 확인 종류의 분기 명령으로부터 비순차적으로 링크를 갖는 분기 명령으로 건네지는 것으로 판정되는 경우, 스텝 84로 방법이 진행한다. 스텝 84에서, 명령 디코더(6) 또는 처리회로(4)는, 링크를 갖는 분기 명령의 분기 타겟 변종이 제어 흐름을 링크를 갖는 분기 명령으로 건네지게 한 분기에 대한 허용된 종류의 분기 타겟 명령인지 여부를 판정한다. 그렇지 않은 경우에는, 스텝 78에서 시동된 것과 유사하게 오류처리 응답이 스텝 86에서 시동된다. 그러나, 링크를 갖는 분기 명령이 해당 분기에 대한 허용된 종류의 분기 타겟 명령인 경우, 스텝 88에서 오류처리 응답이 금지된다. 링크를 갖는 분기 명령과 관련된 분기가 이미 한번 행해졌기 때문에 이것도 금지되고, 복귀 분기 후에 처리가 링크를 갖는 분기 명령으로부터 순차적으로 계속된다. 이 때문에, 링크를 갖는 분기 명령으로부터 순차적으로 뒤따르는 명령들로부터 계속된 처리가 허용된다. 스텝 84에서 링크를 갖는 분기 명령이 허용된 종류의 분기 타겟 명령인지 여부는 링크를 갖는 분기 명령으로 처리의 방향이 바뀌게 한 특정한 종류의 분기에 의존한다. 예를 들어, 링크를 갖는 분기 명령의 한가지 종류의 분기 타겟 변종은 정용의 분기 복귀 명령 RET에 대한 유효한 분기 타겟 명령일 수 있는 반면에, 링크를 갖는 분기 명령의 또 다른 변종은 더 일반적인 분기들에 대한 허용된 종류의 분기 타겟 명령일 수 있다.
도 7은 사용될 수 있는 시뮬레이터 구현예를 나타낸 것이다. 전술한 실시예는 해당 기술을 지원하는 특정한 처리 하드웨어를 작동하기 위한 장치 및 방법에 관해 본 발명을 구현하지만, 컴퓨터 프로그램의 사용을 통해 구현되는 본 발명에서 설명한 실시예에 따라 명령 실행 환경을 제공하는 것도 가능하다. 이와 같은 컴퓨터 프로그램은, 하드웨어 아키텍처의 소프트웨어 기반의 구현을 제공하는 한, 시뮬레이터로 부르는 경우가 많다. 다양한 시뮬레이터 컴퓨터 프로그램은 에뮬레이터, 가상머신, 모델, 및 동적 이진 변환기를 포함하는 이진 변환기를 포함한다. 보통, 시뮬레이터 구현은, 옵션으로 시뮬레이터 프로그램(110)을 지원하는 호스트 운영체계(120)를 실행하는 호스트 프로세서(130) 상에서 실행된다. 일부 구성에서는, 하드웨어와 제공된 명령 실행 환경 사이에 복수 층의 시뮬레이션이 존재하고, 및/또는 동일한 호스트 프로세서 상에서 복수의 별개의 명령 실행 환경이 제공된다. 역사적으로, 합당한 속도에서 실행되는 시뮬레이터 구현을 제공하기 위해 강력한 프로세서들이 요구되었지만, 이와 같은 접근방법은, 호환성이나 재사용 이유로 인해 다른 프로세서에 대해 네이티브한 코드를 실행하려는 요구가 있을 때 등과 같은, 특정한 상황에서 정당화된다. 예를 들어, 시뮬레이터 구현은, 호스트 프로세서 하드웨어에 의해 지원되지 않는 추가적인 기능을 갖는 명령 실행 환경을 제공하거나, 보통 다양한 하드웨어 아키텍처와 관련된 명령 실행 환경을 제공한다. 시뮬레이터의 개관에 대해서는 "Some Efficient Architecture Simulation Techniques", Robert Bedichek, Winter 1990 USENIX Conference, Pages 53-63에 기재되어 있다.
본 실시예를 특정한 하드웨어 구성 또는 특징을 참조하여 설명하였지만, 시뮬레이션된 실시예에서는, 적절한 소프트웨어 구성 또는 특징에 의해 동등한 기능이 제공된다. 예를 들어, 특정한 회로가 시뮬레이션된 실시예에서는 컴퓨터 프로그램 논리로 구현된다. 마찬가지로, 레지스터 또는 캐시 등의 메모리 하드웨어도 시뮬레이션된 실시예에서는 소프트웨어 데이터 구조로 구현된다. 전술한 실시예에서 참조한 한 개 이상의 하드웨어 구성요소들이 호스트 하드웨어(예를 들어, 호스트 프로세서(130) 상에 존재하는 구성에서는, 적절한 경우에, 일부 시뮬레이션된 실시예가 호스트 하드웨어를 이용한다.
시뮬레이터 프로그램(110)은, 컴퓨터 판독가능한 기억매체(이것은 비일시적인 매체일 수도 있다)에 기억되고, 시뮬레이터 프로그램(110)에 의해 모델링되고 있는 하드웨어 아키텍처의 응용 프로그램 인터페이스와 동일한 타겟 코드(100)(이것은 어플리케이션, 운영체계 및 하이퍼바이저를 포함한다)에 대한 프로그램 인터페이스(명령 실행 환경)를 제공한다. 따라서, 전술한 링크를 갖는 분기 명령의 분기 타겟 변종을 포함하는, 타겟 코드(100)의 프로그램 명령들은 시뮬레이터 프로그램(110)을 사용하여 명령 실행 환경 내에서 실행됨으로써, 전술한 장치(2)의 하드웨어 특징을 실제로 갖지 않는 호스트 컴퓨터(130)가 이들 특징을 에뮬레이트할 수 있다. 예를 들어, 시뮬레이터 프로그램(110)은 명령 디코더(6), 처리회로(4) 및 레지스터들(10)과 각각 기능적으로 대응하는 명령 디코딩 프로그램 로직(114)(예를 들어, 타겟 코드(100)에서 마주친 명령의 인코딩에 따라 선택된 특정한 처리 함수를 호출하는 일련의 "if-then" 문)과, 명령 디코드 프로그램 로직(114)에 의해 선택된 함수를 수행하는 시뮬레이터 프로그램(110)의 코드에 대응하는 처리 프로그램 로직(116)을 구비한다. 따라서, 처리 프로그램 로직(116)은 전술한 링크를 갖는 분기 명령의 분기 타겟 변종의 기능을 제공하는 로직을 구비한다.
본 발명에서, 단어 "하도록 구성된"은 장치의 구성요소가 정의된 동작을 행할 수 있는 구성을 갖는다는 것을 의미하기 위해 사용된다. 이와 관련하여, "구성"은 하드웨어 또는 소프트웨어의 배치 또는 상호접속 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 갖거나, 프로세서 또는 기타의 처리장치가 기능을 행하도록 프로그래밍되어도 된다. "하도록 구성된"은 이 장치의 구성요소가 정의된 동작을 제공하기 위해 어떤 식으로 변경될 필요가 있는 것을 시사하는 것은 아니다.
첨부도면을 참조하여 본 발명의 예시적인 실시예들을 상세히 설명하였지만, 본 발명은 이들 실시예에 한정되지 않으며, 첨부된 청구범위의 보호범위 및 사상을 벗어나지 않으면서 본 발명이 속한 기술분야의 당업자에 의해 다양한 변경, 부가 및 변화가 행해질 수 있다는 것은 자명하다. 예를 들면, 종속항들의 특징들의 다양한 조합이 독립항들의 특징과 행해질 수도 있다.

Claims (16)

  1. 명령들을 디코드하는 명령 디코더와,
    상기 명령 디코더에 의해 디코드된 명령들에 응답하여 데이터 처리를 행하는 처리회로를 구비하고,
    분기 명령에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여 타겟 어드레스에 있는 명령으로의 프로그램 흐름의 비순차적인 변경을 일으키도록 구성되고,
    상기 프로그램 흐름의 비순차적인 변경이 링크를 갖는 분기(branch-with-link) 명령에 응답하여 일어날 때, 상기 명령 디코더는 상기 처리회로를 제어하여 프로그램 흐름의 추후의 복귀에 대한 복귀 어드레스를 설정하도록 구성되고,
    상기 프로그램 흐름의 비순차적인 변경이 적어도 한 개의 타겟 확인 종류의 분기 명령에 응답하여 일어날 때, 상기 명령 디코더는 상기 처리회로를 제어하여, 상기 타겟 어드레스에 있는 명령이 적어도 한 개의 허용된 종류의 분기 타겟 명령 이외의 명령일 경우, 오류처리 응답을 기동하도록 구성되고,
    상기 적어도 한 개의 타겟 확인 종류의 분기 명령의 적어도 서브셋에 대해, 상기 적어도 한 개의 허용된 종류의 분기 타겟 명령은 상기 링크를 갖는 분기 명령의 분기 타겟 변종(variant)을 포함하는 장치.
  2. 제 1항에 있어서,
    상기 분기 타겟 변종 이외의 링크를 갖는 분기 명령에 응답하여, 상기 처리회로는 상기 링크를 갖는 분기 명령에 순차적으로 뒤따르는 다음 명령의 어드레스로 상기 복귀 어드레스를 설정하도록 구성된 장치.
  3. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 링크를 갖는 분기 명령의 상기 분기 타겟 변종에 응답하여, 상기 처리회로는 상기 링크를 갖는 분기 명령의 상기 분기 타겟 변종의 어드레스로 상기 복귀 어드레스를 설정하도록 구성된 장치.
  4. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 적어도 한 개의 타겟 확인 종류의 분기 명령으로부터 상기 링크를 갖는 분기 명령의 상기 분기 타겟 변종으로 프로그램 흐름이 비순차적으로 건네질 때, 상기 처리회로는 상기 링크를 갖는 분기 명령의 상기 분기 타겟 변종과 관련된 프로그램 흐름의 비순차적인 변경을 금지하도록 구성된 장치.
  5. 선행하는 청구항 중 어느 한 항에 있어서,
    제1 타겟 확인 종류의 분기 명령에 대해, 상기 링크를 갖는 분기 명령의 상기 분기 타겟 변종은 상기 적어도 한 개의 허용된 종류의 분기 타겟 명령 중에서 한 개이고,
    제2 타겟 확인 종류의 분기 명령에 대해, 상기 링크를 갖는 분기 명령의 상기 분기 타겟 변종은 상기 적어도 한 개의 허용된 종류의 분기 타겟 명령 중에서 한 개가 아닌 장치.
  6. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 링크를 갖는 분기 명령의 제1 분기 타겟 변종은 한 개 이상의 타겟 확인 종류의 분기 명령의 제1 서브셋에 대한 상기 적어도 한 개의 허용된 종류의 분기 타겟 명령 중에서 한 개이고,
    상기 링크를 갖는 분기 명령의 제2 분기 타겟 변종은 상기 제1 서브셋과 다른 한 개 이상의 타겟 확인 종류의 분기 명령의 제2 서브셋에 대한 상기 적어도 한 개의 허용된 종류의 분기 타겟 명령 중에서 한 개인 장치.
  7. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 링크를 갖는 분기 명령의 상기 분기 타겟 변종은, 상기 적어도 한 개의 허용된 종류의 분기 타겟 명령이 아닌 상기 링크를 갖는 분기 명령의 또 다른 변종과는 다른 인코딩을 갖는 장치.
  8. 제 1항 내지 제 6항 중 어느 한 항에 있어서,
    상기 링크를 갖는 분기 명령의 상기 분기 타겟 변종은, 상기 적어도 한 개의 허용된 종류의 분기 타겟 명령이 아닌 상기 링크를 갖는 분기 명령의 또 다른 변종과 동일한 인코딩을 갖는 장치.
  9. 제 1항 내지 제 6항과 제 8항 중 어느 한 항에 있어서,
    상기 명령 인코더와 상기 처리회로 중에서 적어도 한 개는 지정된 링크를 갖는 분기 명령의 명령 인코딩 이외의 적어도 한 개의 파라미터에 근거하여 상기 지정된 링크를 갖는 분기 명령의 변종을 판정하도록 구성된 장치.
  10. 제 9항에 있어서,
    상기 적어도 한 개의 파리미터는 환경설정(configuration) 레지스터에 기억된 환경설정 파라미터를 포함하는 장치.
  11. 제 9항 또는 제 10항에 있어서,
    상기 적어도 한 개의 파라미터는 상기 지정된 링크를 갖는 분기 명령의 명령 어드레스를 포함하는 장치.
  12. 제 9항 내지 제 11항 중 어느 한 항에 있어서,
    지정된 타겟 확인 종류의 분기 명령으로부터 상기 지정된 링크를 갖는 분기 명령으로 프로그램 흐름이 비순차적으로 건네질 때, 상기 적어도 한 개의 파라미터는 상기 지정된 타겟 확인 종류의 분기 명령의 명령 어드레스를 포함하는 장치.
  13. 제 12항에 있어서,
    상기 지정된 타겟 확인 종류의 분기 명령과 상기 지정된 링크를 갖는 분기 명령 사이에서 발생된 예외에 응답하여, 상기 처리회로는 상기 지정된 링크를 갖는 분기 명령의 변종을 판정하기 위한 정보를 기록하도록 구성된 장치.
  14. 분기 명령에 응답하여, 타겟 어드레스에 있는 명령으로의 프로그램 흐름의 비순차적인 변경을 일으키는 단계와,
    상기 프로그램 흐름의 비순차적인 변경이 링크를 갖는 분기 명령에 응답하여 일어날 때, 프로그램 흐름의 추후의 복귀에 대한 복귀 어드레스를 설정하는 단계와,
    상기 프로그램 흐름의 비순차적인 변경이 적어도 한 개의 타겟 확인 종류의 분기 명령에 응답하여 일어날 때, 상기 타겟 어드레스에 있는 명령이 적어도 한 개의 허용된 종류의 분기 타겟 명령 이외의 명령일 경우, 오류처리 응답을 기동하는 단계를 포함하고,
    상기 적어도 한 개의 타겟 확인 종류의 분기 명령의 적어도 서브셋에 대해, 상기 적어도 한 개의 허용된 종류의 분기 타겟 명령은 상기 링크를 갖는 분기 명령의 분기 타겟 변종을 포함하는 데이터 처리방법.
  15. 호스트 데이터 처리장치를 제어하여 타겟 프로그램 코드의 명령들의 실행을 위한 명령 실행 환경을 제공하는 컴퓨터 프로그램으로서,
    상기 타겟 프로그램 코드의 명령들을 디코드하는 명령 디코드 프로그램 로직과,
    상기 명령 디코드 프로그램 로직에 의해 디코드된 명령들에 응답하여 데이터 처리를 행하는 처리 프로그램 로직을 포함하고,
    분기 명령에 응답하여, 상기 명령 디코드 프로그램 로직은 상기 처리 프로그램 로직을 제어하여 타겟 어드레스에 있는 명령으로의 프로그램 흐름의 비순차적인 변경을 일으키도록 구성되고,
    상기 프로그램 흐름의 비순차적인 변경이 링크를 갖는 분기 명령에 응답하여 일어날 때, 상기 명령 디코드 프로그램 로직은 상기 처리 프로그램 로직을 제어하여 프로그램 흐름의 추후의 복귀에 대한 복귀 어드레스를 설정하도록 구성되고,
    상기 프로그램 흐름의 비순차적인 변경이 적어도 한 개의 타겟 확인 종류의 분기 명령에 응답하여 일어날 때, 상기 명령 디코드 프로그램 로직은 상기 처리 프로그램 로직을 제어하여, 상기 타겟 어드레스에 있는 명령이 적어도 한 개의 허용된 종류의 분기 타겟 명령 이외의 명령일 경우, 오류처리 응답을 기동하도록 구성되고,
    상기 적어도 한 개의 타겟 확인 종류의 분기 명령의 적어도 서브셋에 대해, 상기 적어도 한 개의 허용된 종류의 분기 타겟 명령은 상기 링크를 갖는 분기 명령의 분기 타겟 변종을 포함하는 컴퓨터 프로그램.
  16. 청구항 15에 기재된 컴퓨터 프로그램을 기억하는 기억매체.
KR1020207028590A 2018-03-16 2019-02-13 링크를 갖는 분기 명령의 분기 타겟 변종 KR20200128720A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1804231.7 2018-03-16
GB1804231.7A GB2571996B (en) 2018-03-16 2018-03-16 Branch target variant of branch-with-link instruction
PCT/GB2019/050379 WO2019175530A1 (en) 2018-03-16 2019-02-13 Branch target variant of branch-with-link instruction

Publications (1)

Publication Number Publication Date
KR20200128720A true KR20200128720A (ko) 2020-11-16

Family

ID=62017690

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207028590A KR20200128720A (ko) 2018-03-16 2019-02-13 링크를 갖는 분기 명령의 분기 타겟 변종

Country Status (9)

Country Link
US (1) US11307856B2 (ko)
EP (1) EP3765957B1 (ko)
JP (1) JP7377807B2 (ko)
KR (1) KR20200128720A (ko)
CN (1) CN111771188A (ko)
GB (1) GB2571996B (ko)
IL (1) IL276809B2 (ko)
TW (1) TWI801505B (ko)
WO (1) WO2019175530A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112363779A (zh) * 2020-11-25 2021-02-12 王志平 一种动态链接程序的安全控制方法
CN114528025B (zh) * 2022-02-25 2022-11-15 深圳市航顺芯片技术研发有限公司 指令处理方法、装置、微控制器及可读存储介质
US20230418608A1 (en) * 2022-06-23 2023-12-28 Intel Corporation Implicit memory corruption detection for conditional data types

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0729097A1 (en) * 1995-02-07 1996-08-28 Sun Microsystems, Inc. Method and apparatus for run-time memory access checking and memory leak detection of a multi-threaded program
JP2002259118A (ja) 2000-12-28 2002-09-13 Matsushita Electric Ind Co Ltd マイクロプロセッサ及び命令列変換装置
US6874081B2 (en) * 2001-05-17 2005-03-29 Broadcom Corporation Selection of link and fall-through address using a bit in a branch address for the selection
US7290179B2 (en) * 2003-12-01 2007-10-30 Intel Corporation System and method for soft error handling
US9176737B2 (en) * 2011-02-07 2015-11-03 Arm Limited Controlling the execution of adjacent instructions that are dependent upon a same data condition
US9798873B2 (en) * 2011-08-04 2017-10-24 Elwha Llc Processor operable to ensure code integrity
US20130024676A1 (en) * 2011-07-19 2013-01-24 Glew Andrew F Control flow integrity
US9448796B2 (en) * 2012-06-15 2016-09-20 International Business Machines Corporation Restricted instructions in transactional execution
US9384001B2 (en) * 2012-08-15 2016-07-05 Nvidia Corporation Custom chaining stubs for instruction code translation
US9411590B2 (en) * 2013-03-15 2016-08-09 Qualcomm Incorporated Method to improve speed of executing return branch instructions in a processor
GB2535514B (en) * 2015-02-19 2021-09-22 Advanced Risc Mach Ltd Processor exception handling
GB2541714B (en) * 2015-08-27 2018-02-14 Advanced Risc Mach Ltd An apparatus and method for controlling instruction execution behaviour
GB2542831B (en) * 2015-09-30 2018-05-30 Imagination Tech Ltd Fetch unit for predicting target for subroutine return instructions
US10423777B2 (en) * 2016-04-14 2019-09-24 Endgame, Inc. Preventing execution of malicious instructions based on address specified in a branch instruction

Also Published As

Publication number Publication date
JP7377807B2 (ja) 2023-11-10
EP3765957B1 (en) 2024-05-08
US11307856B2 (en) 2022-04-19
GB201804231D0 (en) 2018-05-02
JP2021517293A (ja) 2021-07-15
GB2571996A (en) 2019-09-18
CN111771188A (zh) 2020-10-13
TW201939272A (zh) 2019-10-01
EP3765957A1 (en) 2021-01-20
US20210109755A1 (en) 2021-04-15
GB2571996B (en) 2020-09-09
TWI801505B (zh) 2023-05-11
IL276809B2 (en) 2024-03-01
IL276809A (en) 2020-10-29
WO2019175530A1 (en) 2019-09-19
IL276809B1 (en) 2023-11-01

Similar Documents

Publication Publication Date Title
US10747536B2 (en) Program loop control
JP7105699B2 (ja) プログラム・ループ制御
US10768938B2 (en) Branch instruction
KR20130137591A (ko) 불법 모드 변경처리
EP3864555B1 (en) Verifying a stack pointer
KR20200128720A (ko) 링크를 갖는 분기 명령의 분기 타겟 변종
US20220366037A1 (en) Domain transition disable configuration parameter
JP2020523680A (ja) 命令セット内の変更を制御する装置及び方法
EP4073635B1 (en) Intermodal calling branch instruction
TW202407538A (zh) 無操作相容指令

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal