KR101706496B1 - 비인가 스택 피봇팅을 방지하기 위한 시스템들 및 방법들 - Google Patents

비인가 스택 피봇팅을 방지하기 위한 시스템들 및 방법들 Download PDF

Info

Publication number
KR101706496B1
KR101706496B1 KR1020157029415A KR20157029415A KR101706496B1 KR 101706496 B1 KR101706496 B1 KR 101706496B1 KR 1020157029415 A KR1020157029415 A KR 1020157029415A KR 20157029415 A KR20157029415 A KR 20157029415A KR 101706496 B1 KR101706496 B1 KR 101706496B1
Authority
KR
South Korea
Prior art keywords
stack
memory address
register
memory
limit
Prior art date
Application number
KR1020157029415A
Other languages
English (en)
Other versions
KR20150130536A (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 KR20150130536A publication Critical patent/KR20150130536A/ko
Application granted granted Critical
Publication of KR101706496B1 publication Critical patent/KR101706496B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/145Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being virtual, e.g. for virtual blocks or segments before a translation mechanism
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • G06F8/434Pointers; Aliasing
    • 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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers

Abstract

예시적인 처리 시스템은, 제1 메모리 어드레스를 저장하도록 구성된 하부 스택 한계 레지스터 - 제1 메모리 어드레스는 스택 세그먼트를 통해 어드레싱가능한 메모리의 하부 한계를 식별함 -; 제2 메모리 어드레스를 저장하도록 구성된 상부 스택 한계 레지스터 - 제2 메모리 어드레스는 스택 세그먼트를 통해 어드레싱가능한 메모리의 상부 한계를 식별함 -; 및 제1 메모리 어드레스 및 제2 메모리 어드레스 중 적어도 하나의 메모리 어드레스와 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스를 비교함으로써, 비인가 스택 피봇팅을 검출하도록 구성된 스택 한계 체킹 로직을 포함할 수 있다.

Description

비인가 스택 피봇팅을 방지하기 위한 시스템들 및 방법들{SYSTEMS AND METHODS FOR PREVENTING UNAUTHORIZED STACK PIVOTING}
본 개시물은 일반적으로 컴퓨터 시스템들에 관한 것이며, 구체적으로는 비인가 스택 피봇팅(unauthorized stack pivoting)을 방지하기 위한 시스템들 및 방법들에 관한 것이다.
스택 피봇팅은 복귀 지향 프로그래밍(ROP: return-oriented programming) 공격들에서 종종 이용된다. ROP는, 많은 프로세서 아키텍처에서, 호출 루틴 내의 다음의 실행가능한 명령어의 어드레스를 스택의 상부로부터 검색하는 복귀 명령어(return instruction)를 이용함으로써 현재의 프로세스의 실행 흐름을 하이재킹하는 방법이다. 따라서, 스택 상의 복귀 어드레스를 수정함으로써, 공격자는 현재의 프로세스의 실행 흐름을 임의의 메모리 위치로 전환할 수 있다.
실행 흐름을 하이재킹하면, 공격자는 예를 들어 인수들을 초기화하고, 라이브러리 함수 호출을 수행할 수 있다. 이 기술은 "라이브러리로의 복귀(return-into-library)"로 알려져 있다. 다른 예에서, 공격자는 실행될 수개의 명령어 시퀀스를 코드 세그먼트 내에 위치시킬 수 있다. 이러한 접근법은 "차용 코드 청크 기술(borrowed code chunks technique)"로 알려져 있다.
본 개시물은 제한이 아니라 예로서 예시되어 있으며, 도면들과 관련하여 고려될 때 다음의 상세한 설명을 참조하여 더 충분히 이해될 수 있다.
도 1은 본 개시물의 하나 이상의 양태에 따른 예시적인 컴퓨터 시스템의 하이 레벨 컴포넌트 도면을 도시한다.
도 2는 본 개시물의 하나 이상의 양태에 따른 프로세서의 블록도를 도시한다.
도 3a 및 도 3b는 본 개시물의 하나 이상의 양태에 따른 프로세서 마이크로 아키텍처의 요소들을 개략적으로 도시한다.
도 4는 본 개시물의 하나 이상의 양태에 따른 도 1의 예시적인 컴퓨터 시스템(100)의 예시적인 프로세서 및 다른 컴포넌트들의 수개의 양태를 개략적으로 도시한다.
도 5는 본 개시물의 하나 이상의 양태에 따른 도 1의 예시적인 컴퓨터 시스템(100)의 프로세서(102)에 의해 이용되는 메모리 세그먼테이션 메커니즘을 개략적으로 도시한다.
도 6은 본 개시물의 하나 이상의 양태에 따른 프로세서의 메모리 보호 메커니즘의 특권 레벨들을 개략적으로 도시한다.
도 7은 본 개시물의 하나 이상의 양태에 따른 도 1의 컴퓨터 시스템(100)의 스택 세그먼트에 의해 액세스가능한 메모리의 레이아웃을 개략적으로 도시한다.
도 8a 및 도 8b는 본 개시물의 하나 이상의 양태에 따른 스택 한계 체킹 로직(stack bounds checking logic)에 의해 평가될 조건들을 개략적으로 도시한다.
도 9는 본 개시물의 하나 이상의 양태에 따라 비인가 스택 피봇팅을 검출하기 위한 예시적인 방법의 흐름도를 도시한다.
비인가 스택 피봇팅을 검출하기 위한 컴퓨터 시스템들 및 관련 방법들이 본 명세서에 기재되어 있다. 비인가 스택 수정 또는 피봇팅은 복귀 지향 프로그래밍(ROP) 공격의 시도 시에 잠재적인 공격자에 의해 이용될 수 있다. 후자는 현재의 프로세스의 실행 흐름을 임의의 메모리 위치로 전환하기 위해서 스택 상에 저장된 절차 복귀 어드레스의 비인가 수정을 수반할 수 있다. 비인가 스택 수정을 위해 공격자에 의해 각종 방법들이 이용될 수 있다. 예를 들어, 버퍼 오버플로우 방법은, 입력 버퍼가 스택 상에 위치한다는 가정 하에서, 루틴이 수신할 것으로 기대하고 있는 것보다 더 많은 입력 데이터를 공급하는 것을 수반한다.
비인가 스택 수정을 방지하기 위해서, 한 쌍의 스택 한계 레지스터가 스택 한계들을 저장하기 위해 프로세서 내에 제공될 수 있다. 본 명세서에서 "스택 한계들"은, 스택 세그먼트를 통해 어드레싱가능한 메모리의 허용 범위의 하한 및 상한을 나타내는 스택 세그먼트에서의 미리 정의된 메모리 어드레스들을 지칭할 것이다.
프로세서는, 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스와 스택 한계 레지스터들에 저장된 값들을 비교함으로써 스택 한계 체킹 로직을 구현할 수 있다. 메모리 어드레스가 스택 한계 레지스터들의 값들에 의해 설정된 허용 범위의 외부에 있는 경우, 프로세서는 스택 세그먼트를 통해 액세스되고 있는 어드레스를 스택 상태 레지스터에 저장하고, 스택 장애 예외(stack fault exception)를 발생시킬 수 있다.
특정 구현들에서, 프로세서는, 32 비트 사용자 모드, 64 비트 사용자 모드 및 감시자 모드 각각을 위한 별개의 스택 한계 레지스터들을 가질 수 있다. 스택 한계 레지스터들의 값들은 프로세서 상태 세이브/복구 커맨드들(processor state save/restore commands)(예를 들어, XSAVE/XRSTOR)을 이용하여 콘텍스트 스위칭가능할 수 있다.
위에서 언급된 방법들 및 시스템들의 다양한 양태들은 본 명세서에서 제한이 아니라 예로서 상세하게 후술된다.
다음의 설명에서, 본 개시물의 철저한 이해를 제공하기 위해서, 특정 타입의 프로세서들 및 시스템 구성들, 특정 하드웨어 구조들, 특정 아키텍처 및 마이크로아키텍처 상세들, 특정 레지스터 구성들, 특정 명령어 타입들, 특정 시스템 컴포넌트들, 특정 측정들/높이들, 특정 프로세서 파이프라인 스테이지들 및 연산의 예들과 같은 다수의 특정 상세가 제시된다. 그러나, 이들 특정 상세는 본 명세서에 개시된 방법들을 실시하는데 이용될 필요는 없다는 것이 관련 기술분야의 통상의 기술자에게 명백할 것이다. 다른 경우에, 본 개시물을 불필요하게 모호하게 하는 것을 회피하기 위해서, 잘 알려진 컴포넌트들 또는 방법들, 예컨대 특정의 그리고 대안의 프로세서 아키텍처들, 설명된 알고리즘들을 위한 특정 로직 회로들/코드, 특정 펌웨어 코드, 특정 상호접속 동작, 특정 로직 구성들, 특정 제조 기술들 및 재료들, 특정 컴파일러 구현들, 코드에서의 알고리즘들의 특정 표현, 특정 파워 다운 및 게이팅 기술들/로직, 및 컴퓨터 시스템의 다른 특정 동작 상세들은 상세하게 설명되지 않았다.
다음의 실시예들은 프로세서를 참조하여 설명되지만, 다른 실시예들이 다른 타입의 집적 회로들 및 로직 디바이스들에 적용가능하다. 본 명세서에 설명된 실시예들의 유사한 기술들 및 교시들은 더 높은 파이프라인 스루풋 및 개선된 성능으로부터 이익을 얻을 수 있는 다른 타입의 회로들 또는 반도체 디바이스들에 적용될 수 있다. 본 명세서에 설명된 실시예들의 교시들은 데이터 조작들을 수행하는 임의의 프로세서 또는 머신에 적용가능하다. 그러나, 본 개시물은, 512 비트, 256 비트, 128 비트, 64 비트, 32 비트 또는 16 비트 데이터 연산들을 수행하는 프로세서들 또는 머신들에 제한되지는 않으며, 데이터의 조작 또는 관리가 수행되는 임의의 프로세서 및 머신에 적용될 수 있다. 또한, 다음의 설명은 예들을 제공하고, 첨부 도면들은 예시를 목적으로 다양한 예들을 도시한다. 그러나, 이들 예들은 제한적인 의미로 해석되어서는 안 되는데, 그 이유는 그것들이 본 명세서에 설명된 실시예들의 모든 가능한 구현의 완전 목록을 제공하는 것보다는 본 명세서에 설명된 실시예들의 예들을 제공하는 것으로 의도될 뿐이기 때문이다.
이하의 예들은 실행 유닛들 및 로직 회로들의 콘텍스트에서 명령어 핸들링 및 분산을 설명하지만, 본 명세서에 설명된 시스템들 및 방법들의 다른 실시예들은, 머신에 의해 수행될 때 이 머신으로 하여금 본 명세서에 설명된 적어도 하나의 실시예에 따른 기능들을 수행하게 하는 머신 판독가능한 유형의(tangible) 매체 상에 저장된 데이터 또는 명령어들에 의해 달성될 수 있다. 일 실시예에서, 본 명세서에 설명된 실시예들과 연관된 기능들은 머신 실행가능한 명령어들로 구현된다. 명령어들은, 명령어들로 프로그램되는 범용 또는 특수 목적 프로세서로 하여금 본 명세서에 설명된 방법들을 수행하게 하는데 이용될 수 있다. 본 명세서에 설명된 실시예들은, 본 명세서에 설명된 실시예들에 따른 하나 이상의 동작을 수행하도록 컴퓨터(또는 다른 전자 디바이스들)를 프로그램하는데 이용될 수 있는 명령어들이 저장되어 있는 머신 또는 컴퓨터 판독가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품 또는 소프트웨어로서 제공될 수 있다. 대안적으로, 본 명세서에 설명된 실시예의 동작들은 이 동작들을 수행하기 위한 고정 기능 로직(fixed- function logic)을 포함하는 특정 하드웨어 컴포넌트들에 의해 수행되거나, 프로그램된 컴퓨터 컴포넌트들과 고정 기능 하드웨어 컴포넌트들의 임의의 조합에 의해 수행될 수 있다.
본 명세서에 설명된 방법들을 수행하도록 로직을 프로그램하는데 이용된 명령어들은 시스템에서의 메모리, 예컨대 DRAM, 캐시, 플래시 메모리 또는 다른 스토리지 내에 저장될 수 있다. 또한, 이들 명령어들은 네트워크를 통해 또는 다른 컴퓨터 판독가능 매체에 의해 분산될 수 있다. 따라서, 머신 판독가능 매체는 머신(예를 들어, 컴퓨터)에 의해 판독가능한 형태로 정보를 저장하거나 전송하기 위한 임의의 메커니즘을 포함할 수 있지만, 플로피 디스켓, 광학 디스크, CD-ROM(Compact Disc, Read-Only Memory), 광자기 디스크, 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), EPROM(Erasable Programmable Read-Only Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory), 자기 또는 광학 카드, 플래시 메모리, 또는 전기, 광학, 음향 또는 다른 형태의 전파 신호들(예를 들어, 반송파들, 적외선 신호들, 디지털 신호들 등)을 통해 인터넷을 경유하여 정보를 전송하는데 이용되는 유형의 머신 판독가능 스토리지에 제한되지는 않는다. 따라서, 컴퓨터 판독가능 매체는, 머신(예를 들어, 컴퓨터)에 의해 판독가능한 형태로 전자 명령어들 또는 정보를 저장하거나 전송하기에 적합한 임의의 타입의 유형의 머신 판독가능 매체를 포함한다.
본 명세서에서 "프로세서"는 산술, 논리 또는 I/O 연산들을 인코딩하는 명령어들을 실행할 수 있는 디바이스를 지칭할 것이다. 하나의 예시적인 예에서, 프로세서는, 폰 노이만(Von Neumann) 아키텍처 모델을 따를 수 있고, 산술 로직 유닛(ALU: arithmetic logic unit), 제어 유닛 및 복수의 레지스터를 포함할 수 있다. 추가 양태에서, 프로세서는 하나 이상의 프로세서 코어를 포함할 수 있고, 따라서 단일의 명령어 파이프라인을 통상적으로 처리할 수 있는 싱글 코어 프로세서이거나, 다수의 명령어 파이프라인을 동시에 처리할 수 있는 멀티 코어 프로세서일 수 있다. 다른 양태에서, 프로세서는, 단일의 집적 회로, 2개 이상의 집적 회로로서 구현될 수 있거나, 또는 (예를 들어, 개별적인 마이크로프로세서 다이들이 단일의 집적 회로 패키지에 포함되어, 단일의 소켓을 공유하는) 멀티칩 모듈의 컴포넌트일 수 있다.
도 1은 본 개시물의 하나 이상의 양태에 따른 컴퓨터 시스템의 일례의 하이 레벨 컴포넌트 도면을 도시한다. 컴퓨터 시스템(100)은, 본 명세서에 설명된 실시예에 따라 데이터를 처리하기 위한 알고리즘들을 수행하기 위해 로직을 비롯한 실행 유닛들을 이용하는 프로세서(102)를 포함할 수 있다. 시스템(100)은 캘리포니아주 산타 클라라에 있는 인텔 코포레이션으로부터 입수가능한 PENTIUM Ⅲ™, PENTIUM 4™, Xeon™, Itanium, XScale™ 및/또는 StrongARM™ 마이크로프로세서들에 기초한 처리 시스템들을 나타내지만, 다른 시스템들(다른 마이크로프로세서들을 갖는 PC들, 엔지니어링 워크스테이션들, 셋톱 박스들 등을 포함함)도 또한 사용될 수 있다. 일 실시예에서, 예시적인 시스템(100)은, 워싱턴주 레드몬드에 있는 마이크로소프트 코포레이션으로부터 입수가능한 WINDOWS™ 운영 체제의 버전을 실행하지만, 다른 운영 체제들(예를 들어, UNIX 및 Linux), 임베디드 소프트웨어 및/또는 그래픽 사용자 인터페이스들도 또한 이용될 수 있다. 따라서, 본 명세서에 설명된 실시예들은 하드웨어 회로와 소프트웨어의 임의의 특정 조합에 제한되지는 않는다.
실시예들은 컴퓨터 시스템들에 제한되지는 않는다. 본 명세서에 설명된 시스템들 및 방법들의 대안적인 실시예들은 다른 디바이스들, 예컨대 핸드헬드 디바이스들, 및 임베디드 애플리케이션들에서 이용될 수 있다. 핸드헬드 디바이스들의 일부 예들은 셀룰러 전화기, 인터넷 프로토콜 디바이스, 디지털 카메라, PDA(personal digital assistant) 및 핸드헬드 PC를 포함한다. 임베디드 애플리케이션들은, 마이크로컨트롤러, 디지털 신호 프로세서(DSP), 시스템 온 칩, 네트워크 컴퓨터(NetPC), 셋톱 박스, 네트워크 허브, WAN(wide area network) 스위치, 또는 적어도 하나의 실시예에 따라 하나 이상의 명령어를 수행할 수 있는 임의의 다른 시스템을 포함할 수 있다.
이러한 예시된 실시예에서, 프로세서(102)는 적어도 하나의 명령어를 수행하는 알고리즘을 구현하기 위한 하나 이상의 실행 유닛(108)을 포함한다. 일 실시예는 단일의 프로세서 데스크톱 또는 서버 시스템의 콘텍스트에서 설명될 수 있지만, 대안적인 실시예들은 멀티프로세서 시스템에 포함될 수 있다. 시스템(100)은 '허브' 시스템 아키텍처의 예이다. 컴퓨터 시스템(100)은 데이터 신호들을 처리하는 프로세서(102)를 포함한다. 프로세서(102)는, 하나의 예시적인 예로서, 예를 들어, CISC(complex instruction set computer) 마이크로프로세서, RISC(reduced instruction set computing) 마이크로프로세서, VLIW(very long instruction word) 마이크로프로세서, 명령어 세트들의 조합을 구현하는 프로세서, 또는 디지털 신호 프로세서와 같은 임의의 다른 프로세서 디바이스를 포함한다. 프로세서(102)는, 프로세서(102)와 시스템(100)에서의 다른 컴포넌트들 사이에 데이터 신호들을 전송하는 프로세서 버스(110)에 연결된다. 시스템(100)의 요소들(예를 들어, 그래픽 가속기(112), 메모리 제어기 허브(116), 메모리(120), I/O 제어기 허브(124), 무선 송수신기(126), 플래시 BIOS(128), 네트워크 제어기(134), 오디오 제어기(136), 직렬 확장 포트(138), I/O 제어기(140) 등)은 관련 기술분야의 통상의 기술자에게 잘 알려져 있는 그들의 통상적인 기능들을 수행한다.
일 실시예에서, 프로세서(102)는 레벨 1(L1) 내부 캐시(104)를 포함한다. 아키텍처에 따라, 프로세서(102)는 단일의 내부 캐시 또는 다중 레벨의 내부 캐시들을 가질 수 있다. 다른 실시예들은 특정 구현 및 니즈에 따라 내부 캐시와 외부 캐시 양쪽 모두의 조합을 포함한다. 레지스터 파일(106)은, 정수 레지스터, 부동 소수점 레지스터, 벡터 레지스터, 뱅크형 레지스터(banked registers), 섀도우 레지스터, 체크포인트 레지스터, 상태 레지스터 및 명령어 포인터 레지스터를 비롯한 다양한 레지스터들에 상이한 타입의 데이터를 저장하기 위한 것이다.
정수 및 부동 소수점 연산들을 수행하는 로직을 포함하는 실행 유닛(108)도 또한 프로세서(102)에 존재한다. 프로세서(102)는, 일 실시예에서, 실행될 때, 특정 매크로명령어들에 대한 알고리즘들을 수행하거나 또는 복잡한 시나리오들을 핸들링하는 마이크로코드를 저장하는 마이크로코드(ucode) ROM을 포함한다. 여기서, 마이크로코드는 프로세서(102)에 대한 로직 버그들(bugs)/픽스들(fixes)을 핸들링하도록 잠재적으로 업데이트될 수 있다. 일 실시예에 있어서, 실행 유닛(108)은 패킹된 명령어 세트(109)를 핸들링하는 로직을 포함한다. 명령어들을 실행하는 연관 회로와 함께, 범용 프로세서(102)의 명령어 세트에 패킹된 명령어 세트(109)를 포함함으로써, 많은 멀티미디어 애플리케이션에 의해 이용되는 연산들은 범용 프로세서(102)에서 패킹된 데이터를 이용하여 수행될 수 있다. 따라서, 많은 멀티미디어 애플리케이션은 패킹된 데이터에 대한 연산들을 수행하기 위해 프로세서의 데이터 버스의 전체 폭(full width)을 이용함으로써 보다 효율적으로 실행되고 가속화된다. 이는, 한번에 하나의 데이터 요소씩, 하나 이상의 연산을 수행하기 위해 프로세서의 데이터 버스에 걸쳐 데이터의 더 작은 유닛들을 전송할 필요성을 잠재적으로 제거한다. 실행 유닛(108)의 대안적인 실시예들도 또한 마이크로컨트롤러들, 임베디드 프로세서들, 그래픽 디바이스들, DSP들 및 다른 타입의 로직 회로들에서 이용될 수 있다.
특정 구현들에서, 프로세서(102)는 하부 스택 한계 레지스터(421), 상부 스택 한계 레지스터(423) 및 스택 한계 체킹 로직(150)을 더 포함할 수 있다. 하나의 예시적인 예에서, 프로세서(102)는 2개 이상의 동작 모드, 예를 들어 32 비트 사용자 모드, 64 비트 사용자 모드 및 감시자 모드 각각을 위한 한 쌍의 스택 한계 레지스터를 포함할 수 있다. 스택 한계 체킹 로직의 기능은 본 명세서에서 상세하게 후술된다.
시스템(100)은 메모리(120)를 포함한다. 메모리(120)는 동적 랜덤 액세스 메모리(DRAM) 디바이스, 정적 랜덤 액세스 메모리(SRAM) 디바이스, 플래시 메모리 디바이스 또는 다른 메모리 디바이스를 포함한다. 메모리(120)는 프로세서(102)에 의해 실행될 데이터 신호들에 의해 표현되는 명령어들(121) 및/또는 데이터(123)를 저장한다. 특정 구현들에서, 명령어들(121)은, 본 명세서에서 보다 상세하게 후술되는 바와 같이, 시도된 스택 한계 위반(attempted stack bounds violation)을 검출하기 위해 스택 한계 체킹 로직(150)을 이용하는 명령어들을 포함할 수 있다.
시스템 로직 칩(116)은 프로세서 버스(110) 및 메모리(120)에 연결된다. 도시된 실시예에서의 시스템 로직 칩(116)은 메모리 제어기 허브(MCH)이다. 프로세서(102)는 프로세서 버스(110)를 통해 MCH(116)와 통신할 수 있다. MCH(116)는 명령어 및 데이터 저장을 위해 그리고 그래픽 커맨드들, 데이터 및 텍스처들의 저장을 위해 메모리(120)에 대한 고대역폭 메모리 경로(118)를 제공한다. MCH(116)는, 프로세서(102), 메모리(120) 및 시스템(100)에서의 다른 컴포넌트들 사이에 데이터 신호들을 안내하고, 이들 데이터 신호들을 프로세서 버스(110), 메모리(120) 및 시스템 I/O(122) 사이에 브리징하기 위한 것이다. 일부 실시예들에서, 시스템 로직 칩(116)은 그래픽 제어기(112)에 연결하기 위한 그래픽 포트를 제공할 수 있다. MCH(116)는 메모리 인터페이스(118)를 통해 메모리(120)에 연결된다. 그래픽 카드(112)는 가속화된 그래픽 포트(AGP: Accelerated Graphics Port) 상호접속부(114)를 통해 MCH(116)에 연결된다.
시스템(100)은 사유 허브 인터페이스 버스(proprietary hub interface bus)(122)를 이용하여, MCH(116)를 I/O 제어기 허브(ICH)(130)에 연결한다. ICH(130)는 로컬 I/O 버스를 통해 일부 I/O 디바이스들에 대한 직접 접속들을 제공한다. 로컬 I/O 버스는 주변 장치들을 메모리(120), 칩셋 및 프로세서(102)에 접속하기 위한 고속 I/O 버스이다. 일부 예들은 오디오 제어기, 펌웨어 허브(플래시 BIOS)(128), 무선 송수신기(126), 데이터 스토리지(124), 사용자 입력과 키보드 인터페이스들을 포함하는 레거시 I/O 제어기, USB(Universal Serial Bus)와 같은 직렬 확장 포트, 및 네트워크 제어기(134)이다. 데이터 스토리지 디바이스(124)는 하드 디스크 드라이브, 플로피 디스크 드라이브, CD-ROM 디바이스, 플래시 메모리 디바이스 또는 다른 대용량 스토리지 디바이스를 포함할 수 있다.
시스템의 다른 실시예에 있어서, 일 실시예에 따른 명령어는 시스템 온 칩과 함께 이용될 수 있다. 시스템 온 칩의 일 실시예는 프로세서 및 메모리를 포함한다. 하나의 이러한 시스템을 위한 메모리는 플래시 메모리이다. 플래시 메모리는, 프로세서 및 다른 시스템 컴포넌트들과 동일한 다이 상에 위치될 수 있다. 부가적으로, 메모리 제어기 또는 그래픽 제어기와 같은 다른 로직 블록들도 또한 시스템 온 칩 상에 위치될 수 있다.
도 2는 본 개시물의 하나 이상의 양태에 따른 명령어들을 수행하는 로직 회로들을 포함하는 프로세서(200)에 대한 마이크로아키텍처의 블록도이다. 일부 실시예들에서, 일 실시예에 따른 명령어는, 단정도(single precision) 및 배정도(double precision) 정수 및 부동 소수점 데이터타입들과 같은 데이터타입들뿐만 아니라, 바이트, 워드, 더블워드, 쿼드워드 등의 크기들을 갖는 데이터 요소들에 대해 연산하도록 구현될 수 있다. 일 실시예에서, 순차(in-order) 프론트 엔드(201)는, 실행될 명령어들을 페치하여, 이들을 프로세서 파이프라인에서 나중에 이용되도록 준비하는 프로세서(200)의 일부이다. 프론트 엔드(201)는 수개의 유닛을 포함할 수 있다. 일 실시예에서, 명령어 프리페처(instruction prefetcher)(226)는 메모리로부터 명령어들을 페치하고 이들을 명령어 디코더(228)에 피딩하고, 다음에 명령어 디코더는 명령어들을 디코딩하거나 해석한다. 예를 들어, 일 실시예에서, 디코더는, 수신된 명령어를, 머신이 실행할 수 있는 "마이크로명령어들" 또는 "마이크로연산들"(uop들로 또한 지칭됨)이라고 불리는 하나 이상의 연산으로 디코딩한다. 다른 실시예들에서, 디코더는, 명령어를, 일 실시예에 따른 연산들을 수행하기 위해서 마이크로아키텍처에 의해 이용되는 오피코드 및 대응하는 데이터 및 제어 필드들로 파싱한다. 일 실시예에서, 트레이스 캐시(230)는 디코딩된 uop들을 취하여, 이들을 실행을 위해 uop 큐(234)에서 프로그램 정렬된 시퀀스들 또는 트레이스들로 어셈블링한다. 트레이스 캐시(230)가 복합 명령어를 만날 때, 마이크로코드 ROM(232)은 연산을 완료하는데 필요한 uop들을 제공한다.
일부 명령어들은 단일의 마이크로연산으로 변환되는 한편, 다른 것들은 전체 연산(full operation)을 완료하는데 수개의 마이크로연산을 필요로 한다. 일 실시예에서, 명령어를 완료하는데 4개보다 많은 마이크로연산이 필요한 경우, 디코더(228)는 이 명령어를 행하기 위해 마이크로코드 ROM(232)에 액세스한다. 일 실시예에 있어서, 명령어는 명령어 디코더(228)에서 처리하기 위한 작은 수의 마이크로연산들로 디코딩될 수 있다. 다른 실시예에서, 연산을 달성하는데 다수의 마이크로연산이 필요한 경우, 명령어는 마이크로코드 ROM(232) 내에 저장될 수 있다. 트레이스 캐시(230)는, 마이크로코드 ROM(232)으로부터 일 실시예에 따른 하나 이상의 명령어를 완료하기 위한 마이크로코드 시퀀스들을 판독하기 위해 올바른 마이크로명령어 포인터를 결정하기 위해서 엔트리 포인트 프로그램가능 로직 어레이(PLA: programmable logic array)를 참조한다. 마이크로코드 ROM(232)이 명령어에 대한 마이크로연산들의 시퀀싱을 완료한 이후에, 머신의 프론트 엔드(201)는 트레이스 캐시(230)로부터 마이크로연산들을 페치하는 것을 재개한다.
비순차(out-of-order) 실행 엔진(203)은 명령어들이 실행을 위해 준비되는 곳이다. 비순차 실행 로직은, 명령어들이 파이프라인으로 가서(go down) 실행을 위해 스케줄링됨에 따라 성능을 최적화하기 위해서 명령어들의 흐름을 평활화하고 재정렬하는 다수의 버퍼를 갖는다. 할당자 로직은 실행을 위해 각각의 uop가 필요로 하는 머신 버퍼들 및 리소스들을 할당한다. 레지스터 에일리어싱 로직은 논리적 레지스터들을 레지스터 파일에서의 엔트리들 상에 매핑한다. 또한, 할당자는, 명령어 스케줄러들: 메모리 스케줄러, 고속 스케줄러(202), 저속/일반 부동 소수점 스케줄러(204) 및 단순 부동 소수점 스케줄러(206)의 앞에, 2개의 uop 큐들(메모리 연산들에 대한 하나 및 비메모리 연산들에 대한 하나) 중 하나에서 각각의 uop에 대한 엔트리를 할당한다. uop 스케줄러들(202, 204, 206)은, uop들이 그들의 연산을 완료하는데 필요로 하는 실행 리소스들의 이용가능성, 및 그들의 종속 입력 레지스터 피연산자 소스들(dependent input register operand sources)의 준비성(readiness)에 기초하여, uop가 실행될 준비가 된 때를 결정한다. 일 실시예의 고속 스케줄러(202)는 메인 클록 사이클의 각각의 절반마다 스케줄링할 수 있는 한편, 다른 스케줄러들은 메인 프로세서 클록 사이클마다 한번 스케줄링할 수 있다. 스케줄러들은 디스패치 포트들이 실행을 위해 uop들을 스케줄링하는 것을 중재한다.
물리적 레지스터 파일들(208, 210)은 실행 블록(211)에서의 실행 유닛들(212, 214, 216, 218, 220, 222, 224)과 스케줄러들(202, 204, 206) 사이에 있다. 정수 연산 및 부동 소수점 연산 각각을 위한 별개의 레지스터 파일(208, 210)이 존재한다. 일 실시예의 각각의 레지스터 파일(208, 210)은, 레지스터 파일에 아직 기입되지 않은 막 완료된 결과들을 새로운 종속 uop들에 포워딩하거나 바이패스할 수 있는 바이패스 네트워크를 또한 포함한다. 정수 레지스터 파일(208) 및 부동 소수점 레지스터 파일(210)은 또한 다른 것과 데이터를 통신할 수 있다. 일 실시예에 있어서, 정수 레지스터 파일(208)은 2개의 별개의 레지스터 파일, 즉 데이터의 하위 32 비트에 대한 하나의 레지스터 파일 및 데이터의 상위 32 비트에 대한 제2 레지스터 파일로 분리된다. 일 실시예의 부동 소수점 레지스터 파일(210)은 128 비트 폭의 엔트리들을 갖는데, 그 이유는 부동 소수점 명령어들이 통상적으로 폭이 64 내지 128 비트인 피연산자들을 갖기 때문이다.
실행 블록(211)은 명령어들이 실제로 실행되는 실행 유닛들(212, 214, 216, 218, 220, 222, 224)을 포함한다. 이 섹션은, 마이크로명령어들이 실행하는데 필요로 하는 정수 및 부동 소수점 데이터 피연산자 값들을 저장하는 레지스터 파일들(208, 210)을 포함한다. 일 실시예의 프로세서(200)는 다수의 실행 유닛: 어드레스 발생 유닛(AGU: address generation unit)(212), AGU(214), 고속 ALU(216), 고속 ALU(218), 저속 ALU(220), 부동 소수점 ALU(222), 부동 소수점 이동 유닛(224)으로 구성된다. 일 실시예에 있어서, 부동 소수점 실행 블록들(222, 224)은 부동 소수점, MMX, SIMD 및 SSE, 또는 다른 연산들을 실행한다. 일 실시예의 부동 소수점 ALU(222)는, 제산, 제곱근 및 나머지 마이크로연산들을 실행하는 64 비트 x 64 비트 부동 소수점 제산기(divider)를 포함한다. 본 명세서에 설명된 시스템들 및 방법들에 있어서, 부동 소수점 값을 수반하는 명령어들은 부동 소수점 하드웨어로 핸들링될 수 있다. 일 실시예에서, ALU 연산들은 고속 ALU 실행 유닛들(216, 218)로 간다. 일 실시예의 고속 ALU들(216, 218)은 클록 사이클의 절반의 유효 레이턴시로 고속 연산들을 실행할 수 있다. 일 실시예에 있어서, 가장 복잡한 정수 연산들은 저속 ALU(220)로 가는데, 그 이유는 저속 ALU(220)가, 승산기(multiplier), 시프트, 플래그 로직 및 분기 처리와 같이, 긴 레이턴시 타입의 연산들을 위한 정수 실행 하드웨어를 포함하기 때문이다. 메모리 로드/스토어 연산들이 AGU들(212, 214)에 의해 실행된다. 일 실시예에 있어서, 정수 ALU들(216, 218, 220)은 64 비트 데이터 피연산자들에 대해 정수 연산들을 수행하는 콘텍스트에서 설명된다. 대안적인 실시예들에서, ALU들(216, 218, 220)은, 16, 32, 128, 256 등을 비롯한 각종 데이터 비트를 지원하도록 구현될 수 있다. 유사하게, 부동 소수점 유닛들(222, 224)은 다양한 폭들의 비트들을 갖는 피연산자들의 범위를 지원하도록 구현될 수 있다. 일 실시예에 있어서, 부동 소수점 유닛들(222, 224)은, SIMD 및 멀티미디어 명령어들과 관련하여 128 비트 폭의 패킹된 데이터 피연산자들에 대해 연산할 수 있다.
일 실시예에서, uop들 스케줄러들(202, 204, 206)은, 페어런트 로드(parent load)가 실행을 종료하기 이전에 종속 연산들을 디스패치한다. uop들이 추측적으로 프로세서(200)에서 스케줄링되고 실행되므로, 프로세서(200)는 메모리 부적중(memory misses)을 핸들링하는 로직을 또한 포함한다. 데이터 로드가 데이터 캐시에서 부적중되는 경우, 일시적으로 부정확한 데이터를 갖는 스케줄러를 떠난, 파이프라인에서 인 플라이트(in flight)인 종속 연산들이 존재할 수 있다. 리플레이 메커니즘이 부정확한 데이터를 이용하는 명령어들을 추적하여 재실행한다. 종속 연산들은 리플레이되어야 하고, 독립 연산들은 완료되는 것이 허용된다. 프로세서의 일 실시예의 스케줄러들 및 리플레이 메커니즘은 텍스트 스트링 비교 연산들을 위한 명령어 시퀀스들을 캐치하도록 또한 설계된다.
"레지스터들"이라는 용어는, 피연산자들을 식별하기 위해 명령어들의 일부로서 이용되는 온-보드 프로세서 스토리지 위치들을 지칭할 수 있다. 다시 말하면, 레지스터들은 (프로그래머의 관점에서) 프로세서의 외부로부터 이용가능한 것들일 수 있다. 그러나, 실시예의 레지스터들은 의미에 있어서 특정 타입의 회로에 제한되어서는 안 된다. 오히려, 실시예의 레지스터는 데이터를 저장 및 제공할 수 있고, 본 명세서에 설명된 기능들을 수행할 수 있다. 본 명세서에 설명된 레지스터들은, 전용 물리적 레지스터들, 레지스터 에일리어싱을 이용하여 동적으로 할당된 물리적 레지스터들, 전용 물리적 레지스터들과 동적으로 할당된 물리적 레지스터들의 조합 등과 같이, 임의의 개수의 상이한 기술들을 이용하여 프로세서 내의 회로에 의해 구현될 수 있다. 일 실시예에서, 정수 레지스터들은 32 비트 정수 데이터를 저장한다. 일 실시예의 레지스터 파일은 패킹된 데이터에 대한 8개의 멀티미디어 SIMD 레지스터를 또한 포함한다. 이하의 논의에 있어서, 레지스터들은, 캘리포니아주 산타 클라라에 있는 인텔 코포레이션으로부터의 MMX™ 기술로 인에이블된 마이크로프로세서들에서의 64 비트 폭의 MMX 레지스터들(일부 경우에 'mm' 레지스터들로 또한 지칭됨)과 같이, 패킹된 데이터를 유지하도록 설계된 데이터 레지스터들인 것으로 이해된다. 정수 형태 및 부동 소수점 형태 양쪽 모두로 이용가능한 이들 MMX 레지스터들은 SIMD 및 SSE 명령어들을 동반하는 패킹된 데이터 요소들로 연산될 수 있다. 유사하게, SSE2, SSE3, SSE4 또는 그 이상의(일반적으로, "SSEx"로 지칭됨) 기술에 관한 128 비트 폭의 XMM 레지스터들도 또한 이러한 패킹된 데이터 피연산자들을 유지하는데 이용될 수 있다. 일 실시예에서, 패킹된 데이터 및 정수 데이터를 저장하는데 있어서, 레지스터들은 2개의 데이터 타입을 구별할 필요는 없다. 일 실시예에서, 정수 및 부동 소수점은 동일한 레지스터 파일 또는 상이한 레지스터 파일들에 포함된다. 또한, 일 실시예에서, 부동 소수점 및 정수 데이터는 상이한 레지스터들 또는 동일한 레지스터들에 저장될 수 있다.
도 3a 및 도 3b는 본 개시물의 하나 이상의 양태에 따른 프로세서 마이크로 아키텍처의 요소들을 개략적으로 도시한다. 도 3a에서, 프로세서 파이프라인(400)은 페치 스테이지(402), 길이 디코드 스테이지(404), 디코드 스테이지(406), 할당 스테이지(408), 리네이밍 스테이지(410), 스케줄링(디스패치 또는 발행으로도 알려져 있음) 스테이지(412), 레지스터 판독/메모리 판독 스테이지(414), 실행 스테이지(416), 후기입(write back)/메모리 기입 스테이지(418), 예외 핸들링 스테이지(422) 및 커미트 스테이지(424)를 포함한다.
도 3b에서, 화살표들은 2개 이상의 유닛들 사이의 연결을 표시하고, 화살표의 방향은 이들 유닛들 사이의 데이터 흐름의 방향을 나타낸다. 도 3b는 실행 엔진 유닛(450)에 연결된 프론트 엔드 유닛(430) - 이들 양자는 메모리 유닛(470)에 연결됨 - 을 포함하는 프로세서 코어(490)를 도시한다.
코어(490)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 하이브리드 또는 대안적인 코어 타입일 수 있다. 다른 옵션으로서, 코어(490)는, 예를 들어, 네트워크 또는 통신 코어, 압축 엔진, 그래픽 코어 등과 같은 특수 목적 코어일 수 있다.
프론트 엔드 유닛(430)은 명령어 캐시 유닛(434)에 연결된 분기 예측 유닛(432)을 포함하고, 이 명령어 캐시 유닛은 명령어 변환 색인 버퍼(TLB: translation lookaside buffer)(436)에 연결되고, 이 명령어 변환 색인 버퍼는 명령어 페치 유닛(438)에 연결되고, 이 명령어 페치 유닛은 디코드 유닛(440)에 연결된다. 디코드 유닛 또는 디코더는 명령어들을 디코딩하고, 출력으로서 하나 이상의 마이크로연산들, 마이크로코드 엔트리 포인트들, 마이크로명령어들, 다른 명령어들, 또는 다른 제어 신호들을 발생시킬 수 있는데, 이들은 오리지널 명령어들로부터 디코딩되거나, 또는 다른 방식으로 오리지널 명령어들을 반영하거나 오리지널 명령어들로부터 도출된다. 디코더는 다양한 상이한 메커니즘들을 이용하여 구현될 수 있다. 적합한 메커니즘들의 예들은 룩업 테이블들, 하드웨어 구현들, 프로그램가능 로직 어레이들(PLA들), 마이크로코드 판독 전용 메모리들(ROM들) 등을 포함하지만, 이에 제한되지는 않는다. 명령어 캐시 유닛(434)은 메모리 유닛(470)에서의 레벨 2(L2) 캐시 유닛(476)에 또한 연결된다. 디코드 유닛(440)은 실행 엔진 유닛(450)에서의 리네임/할당자 유닛(452)에 연결된다.
실행 엔진 유닛(450)은, 하나 이상의 스케줄러 유닛(들)(456)의 세트 및 리타이어먼트 유닛(454)에 연결된 리네임/할당자 유닛(452)을 포함한다. 스케줄러 유닛(들)(456)은, 예약 스테이션들, 중앙 명령어 윈도우 등을 비롯한 임의의 개수의 상이한 스케줄러들을 나타낸다. 스케줄러 유닛(들)(456)은 물리적 레지스터 파일(들) 유닛(들)(458)에 연결된다. 물리적 레지스터 파일(들) 유닛들(458) 각각은 하나 이상의 물리적 레지스터 파일을 나타내고, 이들 중 상이한 물리적 레지스터 파일들은 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점, 상태(예를 들어, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등과 같은 하나 이상의 상이한 데이터 타입을 저장한다. 물리적 레지스터 파일(들) 유닛(들)(458)은, (예를 들어, 재정렬 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 이용하여; 미래 파일(들), 이력 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 이용하여; 레지스터 맵들 및 레지스터들의 풀을 이용하거나 하여) 레지스터 에일리어싱 및 비순차 실행이 구현될 수 있는 다양한 방식들을 예시하기 위해서 리타이어먼트 유닛(454)에 의해 중첩된다. 일반적으로, 아키텍처 레지스터들은 프로세서의 외부로부터 또는 프로그래머의 관점으로부터 보인다. 레지스터들은 임의의 공지된 특정 타입의 회로에 제한되지는 않는다. 다양한 타입의 레지스터들은, 이들이 본 명세서에 설명된 바와 같이 데이터를 저장하고 제공할 수 있는 한, 적합하다. 적합한 레지스터들의 예들은 전용 물리적 레지스터들, 레지스터 에일리어싱을 이용하여 동적으로 할당된 물리적 레지스터들, 전용 물리적 레지스터들과 동적으로 할당된 물리적 레지스터들의 조합 등을 포함하지만, 이에 제한되지는 않는다. 리타이어먼트 유닛(454) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 실행 클러스터(들)(460)에 연결된다. 실행 클러스터(들)(460)는 하나 이상의 실행 유닛들(162)의 세트 및 하나 이상의 메모리 액세스 유닛들(464)의 세트를 포함한다. 실행 유닛들(462)은 다양한 타입의 데이터(예를 들어, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예를 들어, 시프트, 가산, 감산, 승산)을 수행할 수 있다. 일부 실시예들은 특정 기능들이나 기능들의 세트들에 전용인 다수의 실행 유닛을 포함할 수 있지만, 다른 실시예들은 하나의 실행 유닛, 또는 모두가 모든 기능을 수행하는 다수의 실행 유닛을 포함할 수 있다. 스케줄러 유닛(들)(456), 물리적 레지스터 파일(들) 유닛(들)(458) 및 실행 클러스터(들)(460)는 가능하게는 복수개인 것으로 도시되어 있는데, 그 이유는 특정 실시예들이 특정 타입의 데이터/연산들에 대해 별개의 파이프라인들(예를 들어, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛 및/또는 실행 클러스터를 각각 갖는 메모리 액세스 파이프라인 - 별개의 메모리 액세스 파이프라인의 경우에, 이 파이프라인의 실행 클러스터가 메모리 액세스 유닛(들)(464)을 갖는 특정 실시예들이 구현됨)을 생성하기 때문이다. 또한, 별개의 파이프라인들이 이용되는 경우, 이들 파이프라인들 중 하나 이상은 비순차 발행/실행일 수 있고, 나머지는 순차적일 수 있다는 것이 이해되어야 한다.
메모리 액세스 유닛들(464)의 세트는 메모리 유닛(470)에 연결되고, 이 메모리 유닛은 레벨 2(L2) 캐시 유닛(476)에 연결된 데이터 캐시 유닛(474)에 연결된 데이터 TLB 유닛(472)을 포함한다. 하나의 예시적인 실시예에서, 메모리 액세스 유닛들(464)은 로드 유닛(load unit), 스토어 어드레스 유닛(store address unit) 및 스토어 데이터 유닛(store data unit)을 포함할 수 있으며, 이들 각각은 메모리 유닛(470)에서의 데이터 TLB 유닛(472)에 연결된다. L2 캐시 유닛(476)은 하나 이상의 다른 레벨의 캐시에 그리고 궁극적으로는 메인 메모리에 연결된다.
예로서, 예시적인 레지스터 에일리어싱, 비순차 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(400)을 구현할 수 있다: 명령어 페치(438)는 페치 및 길이 디코딩 스테이지들(402 및 404)을 수행하고; 디코드 유닛(440)은 디코드 스테이지(406)를 수행하고; 리네임/할당자 유닛(452)은 할당 스테이지(408) 및 리네이밍 스테이지(410)를 수행하고; 스케줄러 유닛(들)(456)은 스케줄 스테이지(412)를 수행하고; 물리적 레지스터 파일(들) 유닛(들)(458) 및 메모리 유닛(470)은 레지스터 판독/메모리 판독 스테이지(414)를 수행하고; 실행 클러스터(460)는 실행 스테이지(416)를 수행하고; 메모리 유닛(470) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 후기입/메모리 기입 스테이지(418)를 수행하고; 다양한 유닛들이 예외 핸들링 스테이지(422)에 수반될 수 있고; 리타이어먼트 유닛(454) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 커미트 스테이지(424)를 수행한다.
코어(490)는 하나 이상의 명령어 세트(예를 들어, (더 새로운 버전들이 추가된 일부 확장들을 갖는) x86 명령어 세트; 캘리포니아주 서니베일에 있는 MIPS Technologies의 MIPS 명령어 세트; 캘리포니아주 서니베일에 있는 ARM Holdings의 (NEON과 같은 부가적인 확장들을 갖는) ARM 명령어 세트)를 지원할 수 있다.
특정 구현들에서, 코어는 (스레드들 또는 연산들의 2개 이상의 병렬 세트를 실행하는) 멀티스레딩을 지원할 수 있고, 시간 분할 멀티스레딩(time sliced multithreading), 동시적 멀티스레딩(단일의 물리적 코어는, 물리적 코어가 동시에 멀티스레딩하는 스레드들 각각에 대한 논리적 코어를 제공함), 또는 이들의 조합(예를 들어, 인텔® Hyperthreading 기술에서와 같이 시간 분할 페칭과 디코딩 및 그 이후의 동시적 멀티스레딩)을 비롯한 각종 방식들로 그렇게 할 수 있다.
프로세서의 예시된 실시예가 별개의 명령어 및 데이터 캐시 유닛들(434/474) 및 공유 L2 캐시 유닛(476)을 또한 포함하지만, 대안적인 실시예들은, 예를 들어 레벨 1(L1) 내부 캐시 또는 다중 레벨의 내부 캐시와 같이, 명령어들 및 데이터 양쪽 모두에 대한 단일의 내부 캐시를 가질 수 있다. 일부 실시예들에서, 시스템은, 코어 및/또는 프로세서의 외부에 있는 외부 캐시와 내부 캐시의 조합을 포함할 수 있다. 대안적으로, 모든 캐시는 코어 및/또는 프로세서의 외부에 있을 수 있다.
도 4는 본 개시물의 하나 이상의 양태에 따른 컴퓨터 시스템(100)의 예시적인 프로세서(102)의 블록도를 도시한다. 도 4를 참조하면, 프로세서 코어(490)는 코어(490)에 의해 실행될 명령어들을 페치하는 페치 유닛(202)을 포함할 수 있다. 명령어들은 메모리(115)와 같은 하나 이상의 스토리지 디바이스로부터 페치될 수 있다. 프로세서 코어(490)는 페치된 명령어를 하나 이상의 마이크로연산들(μop들)로 디코딩하는 디코드 유닛(440)을 더 포함할 수 있다. 프로세서 코어(490)는, 명령어가 발행될 준비가 될 때까지, 예를 들어, 디코딩된 명령어에 대한 피연산자 값들이 이용가능해질 때까지, 디코드 유닛(440)으로부터 수신되는 디코딩된 명령어를 저장하는 스케줄 유닛(446)을 더 포함할 수 있다. 스케줄 유닛(446)은 실행 유닛(450)으로 디코딩된 명령어들을 발행 및/또는 스케줄링할 수 있다.
실행 유닛(450)은 하나 이상의 ALU들(arithmetic and logic units), 하나 이상의 정수 실행 유닛들, 하나 이상의 부동 소수점 실행 유닛들 및/또는 다른 실행 유닛들을 포함할 수 있다. 특정 구현들에서, 실행 유닛(450)은 명령어들을 비순차(OOO)로 실행할 수 있다. 프로세서 코어(490)는 실행된 명령어들이 커미트된 이후에 이들을 리타이어하는 리타이어먼트 유닛(454)을 더 포함할 수 있다.
특정 구현들에서, 프로세서(102)는 하부 스택 한계 레지스터(421), 상부 스택 한계 레지스터(423) 및 스택 한계 체킹 로직(150)을 더 포함할 수 있다. 하나의 예시적인 예에서, 프로세서(102)는 각각의 동작 모드, 예를 들어 32 비트 사용자 모드, 64 비트 사용자 모드 및 감시자 모드를 위한 한 쌍의 스택 한계 레지스터를 포함할 수 있다. 스택 한계 체킹 로직의 기능은 본 명세서에서 상세하게 후술된다. 도 4에서는 로직(150)이 코어(490) 내부에 있는 것으로 도시되어 있지만, 로직(150)은 컴퓨터 시스템(100)에서 다른 곳에 제공될 수 있다. 또한, 로직(150) 및/또는 그것의 컴포넌트들 중 일부는 복수의 프로세서 코어 사이에 공유될 수 있다.
특정 구현들에서, 프로세서(102)는 메모리 세그먼테이션 및/또는 메모리 페이징을 구현할 수 있다. 세그먼테이션은, 다수의 태스크가 서로 간섭하지 않으면서 동일한 프로세서 상에서 구동될 수 있도록 개별적인 코드, 데이터 및 스택 모듈들을 격리시키기 위한 메커니즘을 제공할 수 있다. 페이징은, 태스크의 실행 환경의 섹션들이 필요에 따라 물리적 메모리로 매핑되는 요구-페이징 가상 메모리 시스템(demand-paged, virtual-memory system)을 구현하기 위한 메커니즘을 제공할 수 있다. 페이징은 다수의 태스크 간의 격리를 제공하는데 또한 이용될 수 있다.
도 5에 의해 개략적으로 도시된 바와 같이, 세그먼테이션 메커니즘은 프로세서(102)에 의해 어드레싱가능한 메모리(선형 어드레스 공간으로 또한 지칭됨)를 세그먼트들로 불리는 더 작은 보호 어드레스 공간들로 분할하기 위해 이용될 수 있다. 세그먼트들은, 태스크를 위한 스택, 데이터 및 코드를 유지하고/하거나, (태스크 상태 세그먼트(TSS: task state segment) 또는 로컬 기술자 테이블(LDT: local descriptor table)과 같은) 시스템 데이터 구조들을 유지하기 위해 이용될 수 있다. 다수의 태스크가 동시에 실행되고 있는 경우, 각각의 태스크에는 고유 세그먼트들의 세트가 할당될 수 있다. 프로세서(102)는 이들 세그먼트들 사이의 경계를 강화(enforce)하고, 하나의 태스크가 다른 태스크의 세그먼트들에 기입하는 것에 의해 다른 태스크의 실행과 간섭하지는 않는다고 보증할 수 있다.
모든 메모리 세그먼트가 프로세서의 선형 어드레스 공간에 포함될 수 있다. 특정 세그먼트에서 바이트를 위치시키기 위해서, 논리 어드레스(far 포인터로 또한 지칭됨)가 제공될 수 있다. 논리 어드레스는 세그먼트 선택자와 오프셋을 포함할 수 있다. 세그먼트 선택자는, (전역적 기술자 테이블(GDT: global descriptor table)과 같은) 기술자 테이블에 상주하는 세그먼트 기술자로 불리는 데이터 구조의 고유 식별자이다. 각각의 세그먼트는 그것과 연관된 세그먼트 기술자를 가질 수 있는데, 이는 세그먼트의 크기, 세그먼트에 대한 특권 레벨 및 액세스 권한, 세그먼트 타입, 및 (세그먼트의 베이스 어드레스로 또한 지칭되는) 선형 어드레스 공간에서의 세그먼트의 제1 바이트의 위치를 특정한다. 세그먼트 내에 바이트를 위치시키기 위해 세그먼트에 대한 베이스 어드레스에 논리 어드레스의 오프셋 부분이 부가될 수 있다. 따라서, 베이스 어드레스에 오프셋을 더한 것은 프로세서의 선형 어드레스 공간에서 선형 어드레스를 형성할 수 있다.
물리적 메모리에 동시에 모두 포함하는 것이 경제적으로 가능한 것보다 훨씬 더 큰 선형 어드레스 공간을 멀티태스킹 운영 체제가 정의할 수 있기 때문에, 선형 어드레스 공간을 "가상화"하는 소정의 방법이 필요하다. 이러한 선형 어드레스 공간의 가상화는 프로세서의 페이징 메커니즘을 통해 핸들링될 수 있다. 페이징은, 큰 선형 어드레스 공간이 랜덤 액세스 메모리(RAM) 및 소정의 디스크 스토리지의 더 작은 양으로 시뮬레이팅되는 가상 메모리 환경을 지원한다. 각각의 세그먼트는 RAM에 또는 디스크 상에 저장될 수 있는 정의된 크기(예를 들어, 4KB)의 페이지들로 분할될 수 있다. 운영 체제는 페이지들을 추적하기 위해 페이지 테이블들의 세트 및 페이지 디렉토리를 유지할 수 있다. 태스크가 선형 어드레스 공간에서의 어드레스 위치에 액세스하려고 시도할 때, 프로세서는 페이지 디렉토리 및 페이지 테이블들을 이용하여, 선형 어드레스를 물리 어드레스로 변환한 다음, 메모리 위치 상에서 요청된 연산(판독 또는 기입)을 수행한다. 액세스되고 있는 페이지가 현재 물리적 메모리에 있지 않은 경우, 프로세서는 (페이지 장애 예외를 발생시킴으로써) 프로그램의 실행을 인터럽트한다. 다음에, 운영 체제는 디스크로부터 페이지를 판독하고, 태스크의 실행을 계속할 수 있다. 페이징이 이용되지 않는 경우, 프로세서의 선형 어드레스 공간은 프로세서의 물리 어드레스 공간에 직접 매핑된다. 물리 어드레스 공간은, 프로세서가 그것의 어드레스 버스 상에서 발생시킬 수 있는 어드레스들의 범위로서 정의된다.
프로세서(102)는 세그먼테이션 메커니즘을 지원하기 위해 수개의 세그먼트 레지스터를 이용할 수 있다. 특정 구현들에서, 프로세서(102)는 특정 타입의 세그먼트에 대해 수행될 수 있는 메모리 액세스 동작들을 제약하기 위해서 세그먼트들의 타이핑(typing)을 지원할 수 있다. 세그먼트 타이핑은 메모리 타입들과 세그먼트 레지스터들을 연관시킴으로써 지원될 수 있다. 일례에서, 프로세서(102)는 적어도 하나의 코드 세그먼트 레지스터(CS로 또한 지칭될 수 있음), 2개 이상의 데이터 세그먼트 레지스터(DS, ES, FS 및 GS로 또한 지칭될 수 있음) 및 적어도 하나의 스택 세그먼트 레지스터(SS로 또한 지칭될 수 있음)를 포함할 수 있다.
특정 구현들에서, 프로세서(102)는 32 비트 사용자 모드, 64 비트 사용자 모드 또는 감시자 모드에서 동작할 수 있다. 32 비트 사용자 모드에서, 프로세서(102)는 메모리 세그먼테이션 및 선택적인 페이징을 지원할 수 있다. 64 비트 사용자 모드에서, 세그먼테이션은 플랫 64 비트 선형 어드레스 공간을 생성하기 위해 디스에이블될 수 있다. 프로세서는 CS, DS, ES 및 SS를 비롯한 세그먼트 레지스터들의 세그먼트 베이스를 제로로서 취급하여, 유효 어드레스와 동등한 선형 어드레스를 생성할 수 있다.
추가 양태에서, 프로세서의 메모리 보호 메커니즘은 수개의 특권 레벨을 인식할 수 있다. 감시자 모드는 현재 특권 레벨(CPL: current privilege level)의 값에 의해 32 비트 사용자 모드 또는 64 비트 사용자 모드로부터 구별될 수 있다. 도 6에 의해 개략적으로 도시된 일례에서, 보호 링들로 또한 지칭되는 특권 레벨들은 0 내지 3으로 넘버링될 수 있고, 더 큰 번호는 더 적은 특권을 의미할 수 있다. 보호 링 0은, 운영 체제의 커널의 것들과 같이 최대 특권 코드, 데이터 및 스택을 포함하는 세그먼트들에 대해 예약될 수 있다. 외측의 보호 링들은 애플리케이션 프로그램들을 위해 이용될 수 있다. 특정 구현들에서, 운영 체제들은 복수의 보호 링의 서브세트, 예를 들어 운영 체제 커널을 위한 링 0 및 애플리케이션들을 위한 링 3을 이용할 수 있다.
프로세서는 특권 레벨들을 이용하여, 더 작은 특권 레벨에서 동작하는 프로세스가 더 많은 특권을 갖는 세그먼트에 액세스하는 것을 방지할 수 있다. 현재 특권 레벨(CPL)은 현재 실행되고 있는 프로세스의 특권 레벨이다. CPL은 CS 및 SS 세그먼트 레지스터들의 비트 0 및 1에 저장될 수 있다. CPL은 명령어들이 페치되고 있는 코드 세그먼트의 특권 레벨과 동등할 수 있다. 프로세서는, 프로그램 제어가 상이한 특권 레벨을 갖는 코드 세그먼트로 전달될 때 CPL을 변경할 수 있다. 프로세서는, 액세스되고 있는 세그먼트 선택자에 할당된 요청 특권 레벨(RPL: requested privilege level) 및/또는 액세스되고 있는 호출 게이트 또는 세그먼트의 특권 레벨(기술자 특권 레벨(DPL: descriptor privilege level))과 CPL을 비교함으로써 특권 레벨 체크를 수행할 수 있다. 프로세서가 특권 레벨 위반을 검출할 때, 프로세서는 일반 보호 예외를 발생시킬 수 있다.
특정 구현들에서, 프로세서(102)는 감시자 모드 또는 사용자 모드에서 동작할 수 있다. 0, 1 또는 2의 CPL 값들은 감시자 모드에 대응할 수 있고; 3의 CPL 값은 사용자 모드에 대응할 수 있다. 현재 동작 모드는, 프로세서가 특정 명령어들을 실행하고/하거나 특정 메모리 페이지들에 액세스할 수 있는지 여부를 정의할 수 있다.
본 명세서에서 위에 언급된 바와 같이, 프로세서(102)는, 하부 스택 한계 레지스터 및 상부 스택 한계 레지스터를 포함하는 한 쌍의 스택 한계 레지스터를 이용함으로써 비인가 스택 피봇팅을 방지할 수 있다. 하나의 예시적인 예에서, 프로세서(102)는 32 비트 사용자 동작 모드, 64 비트 사용자 동작 모드 또는 감시자 동작 모드 각각을 위한 한 쌍의 전용 스택 한계 레지스터를 가질 수 있다.
특정 구현들에서, 프로세서(102)는, 스택 한계 레지스터들에 저장된 값들과 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스를 비교하도록 스택 한계 체킹 로직을 구현할 수 있다. 도 7은 컴퓨터 시스템(100)의 스택 세그먼트에 의해 액세스가능한 메모리의 레이아웃을 개략적으로 도시한다. 사용자 모드 어드레싱가능 메모리 공간(502)은 32 비트 사용자 모드 스택을 위해 예약된 제1 어드레스 범위(504), 및 64 비트 사용자 모드 스택을 위해 예약된 제2 어드레스 범위(506)를 포함할 수 있다. 감시자 모드 어드레싱가능 메모리 공간(520)은 스택을 위해 예약된 어드레스 범위(522)를 포함할 수 있다.
스택 세그먼트를 이용하여 어드레싱가능한 메모리의 어드레스 범위를 저장하기 위해 하부 스택 한계 레지스터 및 상부 스택 한계 레지스터가 이용될 수 있다. 도 7에 의해 개략적으로 도시된 바와 같이, STKLBS 및 STKUBS 레지스터들이 감시자 모드에서 하부 및 상부 스택 한계를 저장하기 위해 이용될 수 있고, STKLBU32 및 STKUBU32 레지스터들이 32 비트 사용자 모드에서 하부 및 상부 스택 한계를 저장하기 위해 이용될 수 있고, STKLBU64 및 STKUBU64 레지스터들이 64 비트 사용자 모드에서 하부 및 상부 스택 한계를 저장하기 위해 이용될 수 있다.
스택 한계 체킹 로직(150)은, 스택 세그먼트를 이용하는 시도된 메모리 액세스 동작의 유효 어드레스가 현재 동작 모드에 대응하는 스택 한계 레지스터들의 쌍에 의해 특정된 허용 범위 내에 있는지 여부를 확인할 수 있다. 유효 어드레스가 스택 한계 레지스터들의 값들에 의해 설정된 허용 범위의 외부에 있는 경우, 프로세서는 스택 장애 예외를 발생시킬 수 있다. 스택 세그먼트를 통해 액세스되고 있는 어드레스는, 예외 핸들링 로직에 의한 이용을 위해, 예외를 발생시키기 이전에 프로세서에 의해 스택 상태 레지스터에 저장될 수 있다.
하나의 예시적인 예에서, 스택 한계 체킹 로직은, 액세스되고 있는 메모리 어드레스와 하부 및 상부 한계 값들을 비교하기 위해 세그먼트-제한 가산기들(segment-limit adders)을 이용할 수 있다. 대안적으로, 스택 한계 체킹 로직은, 액세스되고 있는 메모리 어드레스와 하부 및 상부 한계 값들을 비교하기 위해 전용 가산기들을 이용할 수 있다.
스택 세그먼트를 이용하는 메모리 액세스를 검출하는 것에 응답하여, 스택 한계 체킹 로직은, 도 8a(사용자 동작 모드) 및 도 8b(감시자 동작 모드)에 표현된 조건들을 평가함으로써 스택 세그먼트를 이용하는 시도된 메모리 액세스 동작의 유효 어드레스가 현재 동작 모드를 위한 스택 한계 레지스터들의 쌍에 의해 특정된 허용 범위 내에 있는지 여부를 확인할 수 있다.
스택 한계 체킹 로직은, 액세스되고 있는 메모리 어드레스(도 8a 및 도 8b에서 mem_ss로 표시됨)가 현재 동작 모드를 위한 상부 한계 레지스터에 저장된 값 이하인지 그리고 현재 동작 모드를 위한 하부 한계 레지스터에 저장된 값 이상인지 여부를 확인할 수 있다. 조건이 충족되지 않는 경우, 프로세서는 스택 세그먼트를 통해 액세스되고 있는 어드레스를 스택 상태 레지스터에 저장하고, 스택 장애 예외를 발생시킬 수 있다.
추가 양태에서, 프로세서(102)는, 스택 세그먼트를 어드레싱하기 위해 이용될 수 있는 2개 이상의 레지스터, 예를 들어 베이스 포인터(BP) 레지스터 및 스택 세그먼트(SS) 레지스터를 포함할 수 있다. 프로세서(102)는, 액세스되고 있는 메모리를 어드레싱하기 위해 어느 레지스터가 이용되는지에 따라, 스택 한계 체킹 로직을 인에이블하거나 디스에이블하도록 구성될 수 있다. 하나의 예시적인 예에서, 프로세서(102)는, 액세스되고 있는 메모리 어드레스가 SP 레지스터를 이용하여 저장되는 경우에는 스택 한계 체킹 로직을 인에이블하고, 액세스되고 있는 메모리 어드레스가 BP 레지스터를 이용하여 저장되는 경우에는 스택 한계 체킹 로직을 디스에이블할 수 있다.
추가 양태에서, 스택 한계 레지스터들의 값들은 프로세서 상태 세이브/복구 커맨드들(예를 들어, XSAVE/XRSTOR)을 이용하여 콘텍스트 스위칭가능할 수 있다. 프로세서 상태 세이브 커맨드(예를 들어, XSAVE)는 피연산자에 의해 특정된 메모리 위치에 프로세서의 전체 또는 부분 상태를 세이브하는 것을 야기시킬 수 있다. 프로세서 상태 복구 커맨드(예를 들어, XRSTOR)는 피연산자에 의해 특정된 메모리 위치로부터 프로세서의 전체 또는 부분 상태를 로딩하는 것을 야기시킬 수 있다. 저장/로딩될 프로세서 상태 컴포넌트들의 서브세트는 (예를 들어, EDX:EAX 레지스터 쌍을 통해) 암시적 마스크 피연산자에 의해 특정될 수 있다. 하나의 예시적인 예에서, 프로세서는 단지 감시자 모드에서 스택 한계 레지스터들의 값들을 수정하는 것을 허용하도록 구성될 수 있다.
특정 구현들에서, XRSTOR 커맨드를 실행할 때, 프로세서는, 이전에 저장된 무결성 체크 값(integrity check value)이, 미리 정의된 키 값과 스택 한계들의 미리 정의된 해시와 동등한지 여부를 확인할 수 있는데:
Figure 112015099312914-pct00001
여기서,
Figure 112015099312914-pct00002
는 무결성 체크 값이고,
Figure 112015099312914-pct00003
는 미리 정의된 해시 함수이고,
Figure 112015099312914-pct00004
Figure 112015099312914-pct00005
는 각각 현재 동작 모드에 대한 스택 하부 및 상부 한계이고,
Figure 112015099312914-pct00006
는 현재 동작 모드에 대한 키 값이다.
무결성 체크 값이 키 값과 스택 한계 값들의 해시와 동등한 경우에는, 프로세서는 메모리로부터 스택 한계 값들을 복구하는 것을 진행할 수 있고; 무결성 체크 값이 키 값과 스택 한계 값들의 해시와 동등하지 않은 경우에는, 프로세서는 미리 정의된 한계 값들을 각각의 스택 한계 레지스터들에 할당할 수 있다. 무결성 체크 값, 키 값 및 스택 한계 값들의 초기 값들은 예를 들어 스레드 또는 프로세스의 생성 시에 운영 체제에 의해 설정될 수 있다.
추가 양태에서, 프로세서(102)는, 스택 한계 체킹 로직이 인에이블되는지 또는 디스에이블되는지를 나타내는 상태 비트, 및 스택 한계 체킹 로직을 인에이블/디스에이블하도록 한 쌍의 명령어를 또한 구현할 수 있다. 스택 체크 인에이블 명령어(STKENB)를 수신하는 것에 응답하여, 프로세서(102)는 STKENABLE 비트를 설정하고, 스택 한계 체킹 로직에 의해 시도된 비인가 스택 피봇팅을 검출하는 것을 인에이블할 수 있다. 스택 체크 디스에이블 명령어를 수신하는 것에 응답하여, 프로세서(102)는 STKENABLE 비트를 소거하고, 스택 한계 체킹 로직에 의해 스택 한계 위반을 검출하는 것을 디스에이블할 수 있다.
특정 구현들에서, 컴퓨터 시스템(100) 상에서 구동되는 운영 체제는 스택 체크 인에이블 명령어를 발행함으로써 스택 체킹 로직을 인에이블할 수 있다. 운영 체제는 각각의 구동 프로세스 및/또는 스레드를 위한 스택 한계 레지스터들의 값들을 또한 설정할 수 있다. 스택 한계 레지스터들의 값들은 스레드/프로세스 콘텍스트 레코드의 일부일 수 있고, 따라서 XSAVE/XRSTOR 명령어들을 이용한 콘텍스트 스위칭(context switching)은 스택 포인터 값과 함께 스택 한계 값들을 세이브/복구하는 것을 수반할 수 있다.
도 9는 본 개시물의 하나 이상의 양태에 따라 비인가 스택 피봇팅을 검출하기 위한 예시적인 방법의 흐름도를 도시한다. 방법(900)은, 하드웨어(예를 들어, 회로, 전용 로직 및/또는 프로그램가능 로직), 소프트웨어(예를 들어, 하드웨어 시뮬레이션을 수행하도록 컴퓨터 시스템 상에서 실행가능한 명령어들) 또는 이들의 조합을 포함할 수 있는 컴퓨터 시스템에 의해 수행될 수 있다. 방법(900) 및/또는 그것의 기능들, 루틴들, 서브루틴들 또는 동작들 각각은 방법을 실행하는 컴퓨터 시스템의 하나 이상의 물리적 프로세서에 의해 수행될 수 있다. 방법(900)의 2개 이상의 기능, 루틴, 서브루틴 또는 동작은 전술한 순서와 상이할 수 있는 순서로 또는 병행하여 수행될 수 있다. 일례에서, 도 9에 의해 도시된 바와 같이, 방법(900)은 도 1의 컴퓨터 시스템(100)에 의해 수행될 수 있다.
도 9를 참조하면, 블록(910)에서, 컴퓨터 시스템(100)의 프로세서는, 스택 세그먼트를 통해 어드레싱가능한 메모리의 하부 한계를 식별하는 메모리 어드레스를 하부 스택 한계 레지스터에 저장할 수 있다.
블록(920)에서, 프로세서는, 스택 세그먼트를 통해 어드레싱가능한 메모리의 상부 한계를 식별하는 메모리 어드레스를 상부 스택 한계 레지스터에 저장할 수 있다. 본 명세서에서 위에서 언급된 바와 같이, 특정 구현들에서, 프로세서는, 32 비트 사용자 모드, 64 비트 사용자 모드 및 감시자 모드 각각을 위해, 하부 스택 한계 레지스터 및 상부 스택 한계 레지스터를 포함하는 한 쌍의 전용 스택 한계 레지스터를 가질 수 있다.
블록(930)에서 스택 세그먼트를 통한 메모리 액세스를 검출하는 것에 응답하여, 블록(940)에서, 프로세서는, (사용자 동작 모드를 위한) 도 8a 및 (감시자 동작 모드를 위한) 도 8b에 표현된 조건들을 평가함으로써, 액세스되고 있는 메모리 어드레스가 스택 한계 레지스터들에 의해 특정된 범위 내에 있는지 여부를 확인할 수 있다.
액세스되고 있는 메모리 어드레스가 허용 범위 내에 있는 경우에는, 블록(950)에서 처리가 계속될 수 있고; 액세스되고 있는 메모리 어드레스가 허용 범위 내에 있지 않은 경우에는, 블록(960)에서, 프로세서는 액세스되고 있는 메모리 어드레스를 스택 상태 레지스터에 저장할 수 있다.
블록(970)에서, 프로세서는 스택 장애 예외를 발생시킬 수 있다.
다음의 예들은 본 개시물의 하나 이상의 양태에 따른 다양한 구현들을 나타낸다.
예 1은 처리 시스템인데, 이 처리 시스템은, 제1 메모리 어드레스를 저장하도록 구성된 하부 스택 한계 레지스터 - 제1 메모리 어드레스는 스택 세그먼트를 통해 어드레싱가능한 메모리의 하부 한계를 식별함 -; 제2 메모리 어드레스를 저장하도록 구성된 상부 스택 한계 레지스터 - 제2 메모리 어드레스는 스택 세그먼트를 통해 어드레싱가능한 메모리의 상부 한계를 식별함 -; 및 제1 메모리 어드레스 및 제2 메모리 어드레스 중 적어도 하나의 메모리 어드레스와 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스를 비교함으로써, 비인가 스택 피봇팅을 검출하도록 구성된 스택 한계 체킹 로직을 포함한다.
예 2에서, 예 1의 처리 시스템의 스택 한계 체킹 로직은, 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스와 제1 메모리 어드레스를 비교하도록 구성된 제1 가산기; 및 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스와 제2 메모리 어드레스를 비교하도록 구성된 제2 가산기를 포함할 수 있다.
예 3에서, 예 1의 처리 시스템의 스택 한계 체킹 로직은, 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스가 제1 메모리 어드레스 미만이라고 결정하는 것, 또는 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스가 제2 메모리 어드레스 초과라고 결정하는 것 중 적어도 하나에 응답하여, 스택 장애 예외를 발생시키도록 또한 구성될 수 있다.
예 4에서, 예 1의 처리 시스템은 스택 상태 레지스터를 더 포함할 수 있고, 스택 한계 체킹 로직은, 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스를 스택 상태 레지스터에 저장하도록 또한 구성될 수 있다.
예 5에서, 예 1의 처리 시스템은, 32 비트 사용자 모드, 64 비트 사용자 모드 또는 감시자 모드 중 적어도 하나에서 동작하도록 구성될 수 있고, 처리 시스템은, 32 비트 사용자 모드를 위한 제1 하부 스택 한계 레지스터와 제1 상부 스택 한계 레지스터, 64 비트 사용자 모드를 위한 제2 하부 스택 한계 레지스터와 제2 상부 스택 한계 레지스터, 및 감시자 모드를 위한 제3 하부 스택 한계 레지스터 또는 제3 상부 스택 한계 레지스터 중 적어도 하나를 더 포함할 수 있다.
예 6에서, 예 1의 처리 시스템의 스택 한계 체킹 로직은, 프로세서 상태 세이브 커맨드를 수신하는 것에 응답하여, 하부 스택 한계 레지스터 및 상부 스택 한계 레지스터의 값들을 특정 메모리 위치에 저장하도록 또한 구성될 수 있다.
예 7에서, 예 1의 처리 시스템의 스택 한계 체킹 로직은, 프로세서 상태 복구 커맨드를 수신하는 것에 응답하여, 하부 스택 한계 레지스터 및 상부 스택 한계 레지스터의 값들을 특정 메모리 위치로부터 로딩하도록 또한 구성될 수 있다.
예 8에서, 예 1의 처리 시스템의 스택 한계 체킹 로직은, 무결성 체크 값이, 미리 정의된 키 값, 상부 스택 한계 레지스터의 값 및 하부 스택 한계 레지스터의 값의 미리 정의된 해시 함수의 값과 동등한지 여부를 확인하도록 또한 구성될 수 있다.
예 9에서, 예 1의 처리 시스템은, 사용자 모드 또는 감시자 모드 중 적어도 하나에서 동작하도록 구성될 수 있고, 스택 한계 체킹 로직은, 사용자 모드에서 동작할 때에 하부 스택 한계 레지스터 및 상부 스택 한계 레지스터의 값들을 변경하는 것을 디스에이블하도록 구성될 수 있다.
예 10에서, 예 1의 처리 시스템은 베이스 포인터(BP) 레지스터; 및 스택 포인터(SP) 레지스터를 더 포함할 수 있고, 스택 한계 체킹 로직은, SP 레지스터 또는 BP 레지스터 중 하나를 이용하여, 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스를 저장하도록 구성될 수 있다.
예 11에서, 예 10의 처리 시스템의 스택 한계 체킹 로직은, 액세스되고 있는 메모리 어드레스가 SP 레지스터를 이용하여 저장되는 경우에는 비인가 스택 피봇팅을 검출하는 것을 인에이블하도록 또한 구성될 수 있고, 액세스되고 있는 메모리 어드레스가 BP 레지스터를 이용하여 저장되는 경우에는 비인가 스택 피봇팅을 검출하는 것을 디스에이블하도록 또한 구성될 수 있다.
예 12에서, 예 1의 처리 시스템의 스택 한계 체킹 로직은, 스택 체크 인에이블 명령어를 수신하는 것에 응답하여, 비인가 스택 피봇팅을 검출하는 것을 인에이블하도록 또한 구성될 수 있고, 스택 체크 디스에이블 명령어를 수신하는 것에 응답하여, 비인가 스택 피봇팅을 검출하는 것을 디스에이블하도록 또한 구성될 수 있다.
예 13은 비인가 스택 피봇팅을 검출하는 방법인데, 이 방법은, 처리 시스템에 의해, 하부 스택 한계 레지스터에 제1 메모리 어드레스를 저장하는 단계 - 제1 메모리 어드레스는 스택 세그먼트를 통해 어드레싱가능한 메모리의 하부 한계를 식별함 -; 상부 스택 한계 레지스터에 제2 메모리 어드레스를 저장하는 단계 - 제2 메모리 어드레스는 스택 세그먼트를 통해 어드레싱가능한 메모리의 상부 한계를 식별함 -; 스택 세그먼트를 통한 메모리 액세스를 검출하는 단계; 및 비인가 스택 피봇팅을 검출하기 위해서, 제1 메모리 어드레스 및 제2 메모리 어드레스 중 적어도 하나의 메모리 어드레스와 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스를 비교하는 단계를 포함한다.
예 14에서, 예 13의 방법은, 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스를 스택 상태 레지스터에 저장하는 단계를 더 포함할 수 있다.
예 15에서, 예 13의 방법은, 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스가 제1 메모리 어드레스 미만이라고 결정하는 단계; 및 스택 장애 예외를 발생시키는 단계를 더 포함할 수 있다.
예 16에서, 예 13의 방법은, 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스가 제2 메모리 어드레스 초과라고 결정하는 단계; 및 스택 장애 예외를 발생시키는 단계를 더 포함할 수 있다.
예 17에서, 예 13의 방법은, 프로세서 상태 세이브 커맨드를 수신하는 단계; 및 하부 스택 한계 레지스터의 값 및 상부 스택 한계 레지스터의 값을 메모리에 저장하는 단계를 더 포함할 수 있다.
예 18에서, 예 13의 방법은, 프로세서 상태 복구 커맨드를 수신하는 단계; 및 하부 스택 한계 레지스터의 값 및 상부 스택 한계 레지스터의 값을 메모리로부터 로딩하는 단계를 더 포함할 수 있다.
예 19에서, 예 13의 방법은, 프로세서 상태 복구 커맨드를 수신하는 단계; 무결성 체크 값이, 미리 정의된 키 값, 상부 스택 한계 레지스터의 값 및 하부 스택 한계 레지스터의 값의 미리 정의된 해시 함수의 값과 동등하다고 결정하는 단계; 및 스택 한계 값들을 하부 스택 한계 레지스터 및 상부 스택 한계 레지스터로 로딩하는 단계를 더 포함할 수 있다.
예 20은 장치인데, 이 장치는 메모리; 및 메모리에 연결된 처리 시스템을 포함하고, 처리 시스템은 예 13 내지 예 19 중 어느 하나의 방법을 수행하도록 구성된다.
예 21은 실행가능한 명령어들을 포함하는 컴퓨터 판독가능한 비일시적인 저장 매체인데, 이들 실행가능한 명령어들은, 처리 시스템에 의해 실행될 때, 처리 시스템으로 하여금, 하부 스택 한계 레지스터에 제1 메모리 어드레스를 저장하는 것 - 제1 메모리 어드레스는 스택 세그먼트를 통해 어드레싱가능한 메모리의 하부 한계를 식별함 -; 상부 스택 한계 레지스터에 제2 메모리 어드레스를 저장하는 것 - 제2 메모리 어드레스는 스택 세그먼트를 통해 어드레싱가능한 메모리의 상부 한계를 식별함 -; 스택 세그먼트를 통한 메모리 액세스를 검출하는 것; 및 시도된 스택 한계 위반을 검출하기 위해서, 제1 메모리 어드레스 및 제2 메모리 어드레스 중 적어도 하나의 메모리 어드레스와 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스를 비교하는 것을 포함하는 동작들을 수행하게 한다.
예 22에서, 예 21의 컴퓨터 판독가능한 비일시적인 저장 매체는, 컴퓨팅 시스템으로 하여금, 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스를 스택 상태 레지스터에 저장하게 하는 실행가능한 명령어들을 더 포함할 수 있다.
예 23에서, 예 21의 컴퓨터 판독가능한 비일시적인 저장 매체는, 컴퓨팅 시스템으로 하여금, 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스가 제1 메모리 어드레스 미만이라고 결정하게 하고, 스택 장애 예외를 발생시키게 하는 실행가능한 명령어들을 더 포함할 수 있다.
예 24에서, 예 21의 컴퓨터 판독가능한 비일시적인 저장 매체는, 컴퓨팅 시스템으로 하여금, 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스가 제2 메모리 어드레스 초과라고 결정하게 하고, 스택 장애 예외를 발생시키게 하는 실행가능한 명령어들을 더 포함할 수 있다.
예 25에서, 예 21의 컴퓨터 판독가능한 비일시적인 저장 매체는, 컴퓨팅 시스템으로 하여금, 프로세서 상태 세이브 커맨드를 수신하게 하고, 하부 스택 한계 레지스터의 값 및 상부 스택 한계 레지스터의 값을 메모리에 저장하게 하는 실행가능한 명령어들을 더 포함할 수 있다.
예 26에서, 예 21의 컴퓨터 판독가능한 비일시적인 저장 매체는, 컴퓨팅 시스템으로 하여금, 프로세서 상태 복구 커맨드를 수신하게 하고, 하부 스택 한계 레지스터의 값 및 상부 스택 한계 레지스터의 값을 메모리로부터 로딩하게 하는 실행가능한 명령어들을 더 포함할 수 있다.
예 27에서, 예 21의 컴퓨터 판독가능한 비일시적인 저장 매체는, 컴퓨팅 시스템으로 하여금, 프로세서 상태 복구 커맨드를 수신하게 하고, 무결성 체크 값이, 미리 정의된 키 값, 상부 스택 한계 레지스터의 값 및 하부 스택 한계 레지스터의 값의 미리 정의된 해시 함수의 값과 동등하다고 결정하게 하며, 스택 한계 값들을 하부 스택 한계 레지스터 및 상부 스택 한계 레지스터로 로딩하게 하는 실행가능한 명령어들을 더 포함할 수 있다.
상세한 설명의 일부 부분들은 컴퓨터 메모리 내의 데이터 비트들에 대한 연산들의 알고리즘들 및 심볼 표현들에 관하여 제시된다. 이들 알고리즘 설명 및 표현은, 데이터 처리 기술분야의 통상의 기술자가 그들의 작업의 본질을 관련 기술분야의 다른 통상의 기술자에게 가장 효과적으로 전달하기 위해 이용되는 수단이다. 알고리즘은 여기서 그리고 일반적으로 원하는 결과를 초래하는 자기-일관적인(self-consistent) 연산들의 시퀀스인 것으로 고려된다. 연산들은 물리적 양들의 물리적 조작을 요구하는 것들이다. 일반적으로, 반드시 그러하지는 않지만, 이들 양들은 저장되고, 전송되고, 결합되고, 비교되고, 다른 방식으로 조작될 수 있는 전기 또는 자기 신호들의 형태를 취한다. 주로 통상 사용의 이유로 이들 신호들을 비트들, 값들, 요소들, 심볼들, 문자들, 용어들, 숫자들 등으로서 지칭하는 것이 때로는 편리하다는 것이 입증되었다.
그러나, 이들 용어들 및 유사한 용어들 모두가 적절한 물리적 양들과 연관되며, 이들 양들에 적용된 편리한 라벨들일 뿐이라는 점을 명심해야 한다. 위의 논의로부터 명백한 바와 같이 구체적으로 달리 기술되지 않는 한, 본 설명 전체에 걸쳐 "암호화", "복호화", "저장", "제공", "도출", "획득", "수신", "인증", "삭제", "실행", "요청", "통신" 등과 같은 용어들을 이용하는 논의들은, 컴퓨팅 시스템의 레지스터들 및 메모리들 내의 물리적(예를 들어 전자적) 양들로서 표현되는 데이터를 조작하여, 컴퓨팅 시스템 메모리들이나 레지스터들 또는 다른 이러한 정보 저장, 전송 또는 디스플레이 디바이스들 내의 물리적 양들로서 유사하게 표현되는 다른 데이터로 변환하는 컴퓨팅 시스템 또는 유사한 전자 컴퓨팅 디바이스의 액션들 및 프로세스들을 지칭한다는 것이 인식된다.
"예(example)" 또는 "예시적인(exemplary)"이라는 단어들은 본 명세서에서 예, 사례 또는 예시의 역할을 하는 것을 의미하는데 이용된다. 본 명세서에서 "예" 또는 "예시적인" 것으로서 설명된 임의의 양태 또는 설계는 반드시 다른 양태들 또는 설계들에 비해 바람직하거나 유리한 것으로서 해석되는 것은 아니다. 오히려, "예" 또는 "예시적인"이라는 단어들의 이용은 개념들을 구체적인 방식으로 제시하는 것으로 의도된다. 본 출원에서 이용된 바와 같이, "또는"이라는 용어는 배타적 "or"가 아니라 포괄적 "or"를 의미하는 것으로 의도된다. 즉, 달리 특정되거나 콘텍스트로부터 명백하지 않은 한, "X가 A 또는 B를 포함한다"는 것은 자연적인 포괄적 치환들 중 임의의 것을 의미하는 것으로 의도된다. 즉, X가 A를 포함하거나; X가 B를 포함하거나; 또는 X가 A 및 B 양쪽 모두를 포함하는 경우, 전술한 사례들 중 임의의 것 하에서 "X가 A 또는 B를 포함한다"는 것이 만족된다. 또한, 본 출원 및 첨부 청구항들에서 이용된 바와 같은 관사들("a" 및 "an")은, 단수 형태로 지시되는 것으로 콘텍스트로부터 명백하거나 달리 특정되지 않는 한, 일반적으로 "하나 이상"을 의미하는 것으로 해석되어야 한다. 또한, 명세서 전체에 걸쳐 "실시예" 또는 "일 실시예" 또는 "구현" 또는 "일 구현"이라는 용어의 이용은 동일한 실시예 또는 구현으로서 설명되지 않는 한 동일한 실시예 또는 구현을 의미하는 것으로 의도되지는 않는다. 또한, 본 명세서에서 이용된 바와 같은 "제1", "제2", "제3", "제4" 등의 용어들은 상이한 요소들을 구별하기 위한 라벨들로서 의도되고, 반드시 그들의 수치 지정에 따라 서수 의미를 갖는 것은 아닐 수 있다.
본 명세서에 설명된 실시예들은 본 명세서에서 동작들을 수행하기 위한 장치에 또한 관한 것일 수 있다. 이러한 장치는 특별히 요구된 목적을 위해 구성될 수 있거나, 또는 컴퓨터에 저장된 컴퓨터 프로그램에 의해 선택적으로 활성화되거나 재구성되는 범용 컴퓨터를 포함할 수 있다. 이러한 컴퓨터 프로그램은, 플로피 디스크, 광학 디스크, CD-ROM 및 광자기 디스크를 포함하는 임의의 타입의 디스크, 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), EPROM, EEPROM, 자기 또는 광학 카드, 플래시 메모리, 또는 전자 명령어들을 저장하기에 적합한 임의의 타입의 매체와 같지만 이에 제한되지는 않는 비일시적인 컴퓨터 판독가능 저장 매체에 저장될 수 있다. "컴퓨터 판독가능 저장 매체"라는 용어는, 명령어들의 하나 이상의 세트를 저장하는 단일의 매체 또는 다수의 매체(예를 들어, 중앙형 또는 분산형 데이터베이스 및/또는 연관된 캐시들 및 서버들)를 포함하는 것으로 간주되어야 한다. 또한, "컴퓨터 판독가능 매체"라는 용어는, 머신에 의해 실행될 명령어들의 세트를 저장, 인코딩 또는 운반할 수 있고, 머신이 본 실시예들의 방법론들 중 임의의 하나 이상을 수행하게 하는 임의의 매체를 포함하는 것으로 간주되어야 한다. 따라서, "컴퓨터 판독가능 저장 매체"라는 용어는, 고체 상태 메모리, 광학 매체, 자기 매체, 머신에 의해 실행될 명령어들의 세트를 저장할 수 있고, 머신이 본 실시예들의 방법론들 중 임의의 하나 이상을 수행하게 하는 임의의 매체를 포함하지만 이에 제한되는 않는 것으로 간주되어야 한다.
본 명세서에 제시된 알고리즘들 및 디스플레이들은 본질적으로 임의의 특정 컴퓨터 또는 다른 장치에 관련되지는 않는다. 다양한 범용 시스템들이 본 명세서에서의 교시들에 따라 프로그램들과 함께 사용될 수 있거나, 또는 요구된 방법 동작들을 수행하도록 더 특수화된 장치를 구성하는 것이 편리한 것으로 입증될 수 있다. 각종의 이러한 시스템들에 대해 요구된 구조는 이하의 설명으로부터 나타날 것이다. 또한, 본 실시예들은 임의의 특정 프로그래밍 언어를 참조하여 설명되지는 않는다. 각종 프로그래밍 언어들이 본 명세서에 설명된 바와 같은 실시예들의 교시들을 구현하는데 이용될 수 있다는 것이 인식될 것이다.
전술한 설명은 수개의 실시예들의 양호한 이해를 제공하기 위해서 특정 시스템들, 컴포넌트들, 방법들 등의 예들과 같은 다수의 특정 상세를 제시한다. 그러나, 적어도 일부 실시예들은 이러한 특정 상세 없이 실시될 수 있다는 것이 관련 기술분야의 통상의 기술자에게 명백할 것이다. 다른 경우에, 본 실시예들을 불필요하게 모호하게 하는 것을 회피하기 위해서, 잘 알려진 컴포넌트들 또는 방법들은 상세하게 설명되지 않거나 또는 단순한 블록도 포맷으로 제시된다. 따라서, 위에 제시된 특정 상세들은 예시적일 뿐이다. 특정 구현들은 이들 예시적인 상세로부터 변경될 수 있고, 여전히 본 실시예들의 범위 내에 있는 것으로 고려된다.
전술한 설명은 제한이 아니라 예시적인 것으로 의도된다는 것이 이해되어야 한다. 전술한 설명을 읽고 이해하면, 많은 다른 실시예들이 관련 기술분야의 통상의 기술자에게 명백할 것이다. 따라서, 본 실시예들의 범위는, 첨부 청구항들에 부여되는 등가물들의 전체 범위와 함께, 이러한 청구항들을 참조하여, 결정되어야 한다.

Claims (25)

  1. 처리 시스템으로서,
    제1 메모리 어드레스를 저장하기 위한, 32 비트 사용자 모드, 64 비트 사용자 모드 또는 감시자 모드 중 적어도 하나를 위한 하부 스택 한계 레지스터(lower stack bound register) - 상기 제1 메모리 어드레스는 스택 세그먼트를 통해 어드레싱가능한 메모리의 하부 한계를 식별함 -;
    제2 메모리 어드레스를 저장하기 위한, 상기 32 비트 사용자 모드, 상기 64 비트 사용자 모드 또는 상기 감시자 모드 중 적어도 하나를 위한 상부 스택 한계 레지스터 - 상기 제2 메모리 어드레스는 상기 스택 세그먼트를 통해 어드레싱가능한 메모리의 상부 한계를 식별함 -; 및
    상기 제1 메모리 어드레스 및 상기 제2 메모리 어드레스 중 적어도 하나의 메모리 어드레스와 상기 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스를 비교함으로써, 비인가 스택 피봇팅(unauthorized stack pivoting)을 검출하도록 구성된 스택 한계 체킹 로직(stack bounds checking logic)
    을 포함하고,
    상기 처리 시스템은 상기 32 비트 사용자 모드, 상기 64 비트 사용자 모드 또는 상기 감시자 모드 중 적어도 하나에서 동작하는 처리 시스템.
  2. 제1항에 있어서,
    상기 스택 한계 체킹 로직은,
    상기 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스와 상기 제1 메모리 어드레스를 비교하도록 구성된 제1 가산기; 및
    상기 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스와 상기 제2 메모리 어드레스를 비교하도록 구성된 제2 가산기
    를 포함하는 처리 시스템.
  3. 제1항에 있어서,
    상기 스택 한계 체킹 로직은 또한, 상기 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스가 상기 제1 메모리 어드레스 미만이라고 결정하는 것, 또는 상기 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스가 상기 제2 메모리 어드레스 초과라고 결정하는 것 중 적어도 하나에 응답하여, 스택 장애 예외(stack fault exception)를 발생시키는 처리 시스템.
  4. 제1항에 있어서,
    스택 상태 레지스터를 더 포함하고,
    상기 스택 한계 체킹 로직은 또한, 상기 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스를 상기 스택 상태 레지스터에 저장하는 처리 시스템.
  5. 삭제
  6. 제1항에 있어서,
    상기 스택 한계 체킹 로직은 또한, 프로세서 상태 세이브 커맨드(processor state save command)를 수신하는 것에 응답하여, 상기 하부 스택 한계 레지스터 및 상기 상부 스택 한계 레지스터의 값들을 특정 메모리 위치에 저장하는 처리 시스템.
  7. 제1항에 있어서,
    상기 스택 한계 체킹 로직은 또한, 프로세서 상태 복구 커맨드(processor state restore command)를 수신하는 것에 응답하여, 상기 하부 스택 한계 레지스터 및 상기 상부 스택 한계 레지스터의 값들을 특정 메모리 위치로부터 로딩하는 처리 시스템.
  8. 제7항에 있어서,
    상기 스택 한계 체킹 로직은 또한, 무결성 체크 값(integrity check value)이, 미리 정의된 키 값, 상기 상부 스택 한계 레지스터의 값 및 상기 하부 스택 한계 레지스터의 값의 미리 정의된 해시 함수의 값과 동등한지 여부를 확인하는 처리 시스템.
  9. 제1항에 있어서,
    상기 스택 한계 체킹 로직은, 상기 32비트 사용자 모드 또는 상기 64비트 사용자 모드 중 하나에서 동작할 때에 상기 하부 스택 한계 레지스터 및 상기 상부 스택 한계 레지스터의 값들을 변경하는 것을 디스에이블하도록 구성되는 처리 시스템.
  10. 제1항에 있어서,
    베이스 포인터(BP) 레지스터; 및
    스택 포인터(SP) 레지스터
    를 더 포함하고,
    상기 스택 한계 체킹 로직은 또한, 상기 SP 레지스터 또는 상기 BP 레지스터 중 하나를 이용하여, 상기 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스를 저장하는 처리 시스템.
  11. 제10항에 있어서,
    상기 스택 한계 체킹 로직은 또한, 상기 액세스되고 있는 메모리 어드레스가 상기 SP 레지스터를 이용하여 저장되는 경우에는 비인가 스택 피봇팅을 검출하는 것을 인에이블하고,
    상기 스택 한계 체킹 로직은 또한, 상기 액세스되고 있는 메모리 어드레스가 상기 BP 레지스터를 이용하여 저장되는 경우에는 비인가 스택 피봇팅을 검출하는 것을 디스에이블하는 처리 시스템.
  12. 제1항에 있어서,
    상기 스택 한계 체킹 로직은 또한,
    스택 체크 인에이블 명령어를 수신하는 것에 응답하여, 비인가 스택 피봇팅을 검출하는 것을 인에이블하고,
    스택 체크 디스에이블 명령어를 수신하는 것에 응답하여, 비인가 스택 피봇팅을 검출하는 것을 디스에이블하는 처리 시스템.
  13. 방법으로서,
    32 비트 사용자 모드, 64 비트 사용자 모드 또는 감시자 모드 중 적어도 하나에서 동작하는 처리 시스템에 의해, 하부 스택 한계 레지스터에 제1 메모리 어드레스를 저장하는 단계 - 상기 하부 스택 한계 레지스터는 상기 32 비트 사용자 모드, 상기 64 비트 사용자 모드 또는 상기 감시자 모드 중 적어도 하나와 연관되고, 상기 제1 메모리 어드레스는 스택 세그먼트를 통해 어드레싱가능한 메모리의 하부 한계를 식별함 -;
    상부 스택 한계 레지스터에 제2 메모리 어드레스를 저장하는 단계 - 상기 상부 스택 한계 레지스터는 상기 32 비트 사용자 모드, 상기 64 비트 사용자 모드 또는 상기 감시자 모드 중 적어도 하나와 연관되고, 상기 제2 메모리 어드레스는 상기 스택 세그먼트를 통해 어드레싱가능한 메모리의 상부 한계를 식별함 -;
    상기 스택 세그먼트를 통한 메모리 액세스를 검출하는 단계; 및
    상기 제1 메모리 어드레스 및 상기 제2 메모리 어드레스 중 적어도 하나의 메모리 어드레스와 상기 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스를 비교함으로써 비인가 스택 피봇팅을 검출하는 단계
    를 포함하는 방법.
  14. 제13항에 있어서,
    상기 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스를 스택 상태 레지스터에 저장하는 단계를 더 포함하는 방법.
  15. 제13항에 있어서,
    상기 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스가 상기 제1 메모리 어드레스 미만이라고 결정하는 단계; 및
    스택 장애 예외를 발생시키는 단계
    를 더 포함하는 방법.
  16. 제13항에 있어서,
    상기 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스가 상기 제2 메모리 어드레스 초과라고 결정하는 단계; 및
    스택 장애 예외를 발생시키는 단계
    를 더 포함하는 방법.
  17. 제13항에 있어서,
    프로세서 상태 세이브 커맨드를 수신하는 단계; 및
    상기 하부 스택 한계 레지스터의 값 및 상기 상부 스택 한계 레지스터의 값을 메모리에 저장하는 단계
    를 더 포함하는 방법.
  18. 제13항에 있어서,
    프로세서 상태 복구 커맨드를 수신하는 단계; 및
    상기 하부 스택 한계 레지스터의 값 및 상기 상부 스택 한계 레지스터의 값을 메모리로부터 로딩하는 단계
    를 더 포함하는 방법.
  19. 제13항에 있어서,
    프로세서 상태 복구 커맨드를 수신하는 단계;
    무결성 체크 값이, 미리 정의된 키 값, 상기 상부 스택 한계 레지스터의 값 및 상기 하부 스택 한계 레지스터의 값의 미리 정의된 해시 함수의 값과 동등하다고 결정하는 단계; 및
    스택 한계 값들을 상기 하부 스택 한계 레지스터 및 상기 상부 스택 한계 레지스터로 로딩하는 단계
    를 더 포함하는 방법.
  20. 실행가능한 명령어들을 포함하는 컴퓨터 판독가능한 비일시적인 저장 매체로서,
    상기 실행가능한 명령어들은, 32 비트 사용자 모드, 64 비트 사용자 모드 또는 감시자 모드 중 적어도 하나에서 동작하는 처리 시스템에 의해 실행될 때, 상기 처리 시스템으로 하여금,
    하부 스택 한계 레지스터에 제1 메모리 어드레스를 저장하는 것 - 상기 하부 스택 한계 레지스터는 상기 32 비트 사용자 모드, 상기 64 비트 사용자 모드 또는 상기 감시자 모드 중 적어도 하나와 연관되고, 상기 제1 메모리 어드레스는 스택 세그먼트를 통해 어드레싱가능한 메모리의 하부 한계를 식별함 -;
    상부 스택 한계 레지스터에 제2 메모리 어드레스를 저장하는 것 - 상기 상부 스택 한계 레지스터는 상기 32 비트 사용자 모드, 상기 64 비트 사용자 모드 또는 상기 감시자 모드 중 적어도 하나와 연관되고, 상기 제2 메모리 어드레스는 상기 스택 세그먼트를 통해 어드레싱가능한 메모리의 상부 한계를 식별함 -;
    상기 스택 세그먼트를 통한 메모리 액세스를 검출하는 것; 및
    시도된 스택 한계 위반(attempted stack bounds violation)을 검출하기 위해서, 상기 제1 메모리 어드레스 및 상기 제2 메모리 어드레스 중 적어도 하나의 메모리 어드레스와 상기 스택 세그먼트를 통해 액세스되고 있는 메모리 어드레스를 비교하는 것
    을 포함하는 동작들을 수행하게 하는 컴퓨터 판독가능한 비일시적인 저장 매체.
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
KR1020157029415A 2013-06-05 2014-05-30 비인가 스택 피봇팅을 방지하기 위한 시스템들 및 방법들 KR101706496B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/910,333 2013-06-05
US13/910,333 US9239801B2 (en) 2013-06-05 2013-06-05 Systems and methods for preventing unauthorized stack pivoting
PCT/US2014/040209 WO2014197310A1 (en) 2013-06-05 2014-05-30 Systems and methods for preventing unauthorized stack pivoting

Publications (2)

Publication Number Publication Date
KR20150130536A KR20150130536A (ko) 2015-11-23
KR101706496B1 true KR101706496B1 (ko) 2017-02-13

Family

ID=52006500

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157029415A KR101706496B1 (ko) 2013-06-05 2014-05-30 비인가 스택 피봇팅을 방지하기 위한 시스템들 및 방법들

Country Status (7)

Country Link
US (1) US9239801B2 (ko)
EP (1) EP3005127B1 (ko)
KR (1) KR101706496B1 (ko)
CN (1) CN105190572B (ko)
BR (1) BR112015027846A2 (ko)
RU (1) RU2629442C2 (ko)
WO (1) WO2014197310A1 (ko)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104809391B (zh) * 2014-01-26 2018-08-14 华为技术有限公司 缓冲区溢出攻击检测装置、方法和安全防护系统
US9501637B2 (en) * 2014-09-26 2016-11-22 Intel Corporation Hardware shadow stack support for legacy guests
US9767272B2 (en) 2014-10-20 2017-09-19 Intel Corporation Attack Protection for valid gadget control transfers
US9946588B2 (en) * 2014-12-17 2018-04-17 International Business Machines Corporation Structure for reducing power consumption for memory device
US20160381050A1 (en) 2015-06-26 2016-12-29 Intel Corporation Processors, methods, systems, and instructions to protect shadow stacks
GB2541714B (en) * 2015-08-27 2018-02-14 Advanced Risc Mach Ltd An apparatus and method for controlling instruction execution behaviour
CN106682492B (zh) * 2015-11-06 2019-08-16 大唐移动通信设备有限公司 一种内存越界的管理方法及装置
US10394556B2 (en) 2015-12-20 2019-08-27 Intel Corporation Hardware apparatuses and methods to switch shadow stack pointers
US10430580B2 (en) 2016-02-04 2019-10-01 Intel Corporation Processor extensions to protect stacks during ring transitions
GB2547893B (en) * 2016-02-25 2018-06-06 Advanced Risc Mach Ltd Combining part of an offset with a corresponding part of a base address and comparing with a reference address
CN106919366B (zh) * 2017-02-15 2019-06-04 杭州中天微系统有限公司 实现堆栈自适应保护的处理器
US20180285559A1 (en) * 2017-03-28 2018-10-04 Rodrigo Branco Stack pivot detection systems and methods
US10795997B2 (en) * 2017-06-21 2020-10-06 Intel Corporation Hardened safe stack for return oriented programming attack mitigation
GB2564130B (en) * 2017-07-04 2020-10-07 Advanced Risc Mach Ltd An apparatus and method for controlling execution of instructions
US11055402B2 (en) 2017-09-29 2021-07-06 Qualcomm Incorporated Dynamically generated code process sandboxing using authenticated pointers
CN108509791B (zh) * 2018-02-09 2021-06-04 清华大学 检测处理器的方法、检测装置以及检测系统
US10642536B2 (en) * 2018-03-06 2020-05-05 Western Digital Technologies, Inc. Non-volatile storage system with host side command injection
US10831679B2 (en) 2018-03-23 2020-11-10 Intel Corporation Systems, methods, and apparatuses for defending against cross-privilege linear probes
CN113835645A (zh) * 2021-11-26 2021-12-24 深圳市华澜微电子有限公司 数据处理方法、装置、设备及存储介质
US20230281016A1 (en) * 2022-03-02 2023-09-07 Intel Corporation Software-controlled flag to require a stack switch during execution
CN115237475B (zh) * 2022-06-23 2023-04-07 云南大学 一种Forth多核堆栈处理器及指令集
CN117539543A (zh) * 2024-01-10 2024-02-09 北京中科昊芯科技有限公司 一种更新返回地址栈中数据的装置及应用产品

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012234556A (ja) 2005-10-20 2012-11-29 Qualcomm Inc スタックド・レジスタ・ファイルのレジスタ・セーブ・エンジンのためのバッキング記憶装置バッファ

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SU1035609A1 (ru) * 1982-03-09 1983-08-15 Калининский Ордена Трудового Красного Знамени Политехнический Институт Устройство защиты стековой пам ти
US5003466A (en) * 1987-02-06 1991-03-26 At&T Bell Laboratories Multiprocessing method and arrangement
US5109329A (en) * 1987-02-06 1992-04-28 At&T Bell Laboratories Multiprocessing method and arrangement
DE3726192A1 (de) * 1987-08-06 1989-02-16 Otto Mueller Stacksteuerung
RU2022343C1 (ru) * 1990-08-01 1994-10-30 Серпуховское высшее военное командно-инженерное училище ракетных войск им.Ленинского комсомола Устройство защиты памяти
US5469566A (en) * 1992-03-12 1995-11-21 Emc Corporation Flexible parity generation circuit for intermittently generating a parity for a plurality of data channels in a redundant array of storage units
WO1994003860A1 (en) * 1992-08-07 1994-02-17 Thinking Machines Corporation Massively parallel computer including auxiliary vector processor
US5513337A (en) * 1994-05-25 1996-04-30 Intel Corporation System for protecting unauthorized memory accesses by comparing base memory address with mask bits and having attribute bits for identifying access operational mode and type
US5953741A (en) * 1996-11-27 1999-09-14 Vlsi Technology, Inc. Stack cache for stack-based processor and method thereof
US20040168078A1 (en) 2002-12-04 2004-08-26 Brodley Carla E. Apparatus, system and method for protecting function return address
US7716495B2 (en) 2003-12-31 2010-05-11 Microsoft Corporation Protection against runtime function attacks
EP1870814B1 (en) * 2006-06-19 2014-08-13 Texas Instruments France Method and apparatus for secure demand paging for processor devices
US8176567B2 (en) 2005-12-22 2012-05-08 Pitney Bowes Inc. Apparatus and method to limit access to selected sub-program in a software system
US9183114B2 (en) * 2005-12-27 2015-11-10 International Business Machines Corporation Error detection on the stack
CN101226468A (zh) * 2008-01-30 2008-07-23 中国科学院计算技术研究所 一种risc处理器装置及其有界访存方法
US8209757B1 (en) 2008-03-06 2012-06-26 Symantec Corporation Direct call into system DLL detection system and method
US8635415B2 (en) * 2009-09-30 2014-01-21 Intel Corporation Managing and implementing metadata in central processing unit using register extensions

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012234556A (ja) 2005-10-20 2012-11-29 Qualcomm Inc スタックド・レジスタ・ファイルのレジスタ・セーブ・エンジンのためのバッキング記憶装置バッファ

Also Published As

Publication number Publication date
US20140365742A1 (en) 2014-12-11
EP3005127B1 (en) 2018-06-27
US9239801B2 (en) 2016-01-19
WO2014197310A1 (en) 2014-12-11
RU2015147646A (ru) 2017-05-11
RU2629442C2 (ru) 2017-08-29
EP3005127A1 (en) 2016-04-13
BR112015027846A2 (pt) 2018-04-10
CN105190572B (zh) 2018-07-24
EP3005127A4 (en) 2017-01-25
KR20150130536A (ko) 2015-11-23
CN105190572A (zh) 2015-12-23

Similar Documents

Publication Publication Date Title
KR101706496B1 (ko) 비인가 스택 피봇팅을 방지하기 위한 시스템들 및 방법들
US11656805B2 (en) Processors, methods, systems, and instructions to protect shadow stacks
CN108463826B (zh) 用于在环转变期间保护栈的处理器扩展
US9015835B2 (en) Systems and methods for procedure return address verification
US9703562B2 (en) Instruction emulation processors, methods, and systems
CN108351830B (zh) 用于存储器损坏检测的硬件装置和方法
US10049057B2 (en) Instruction and logic for secure instruction execution pipeline
US20140281398A1 (en) Instruction emulation processors, methods, and systems
EP3391195A1 (en) Instructions and logic for lane-based strided store operations
US10496410B2 (en) Instruction and logic for suppression of hardware prefetchers
WO2017112177A1 (en) Instructions and logic for lane-based strided scatter operations
US10394595B2 (en) Method to manage guest address space trusted by virtual machine monitor
US10007620B2 (en) System and method for cache replacement using conservative set dueling
US10445204B2 (en) Instruction and logic for interrupt and exception handling
US10095522B2 (en) Instruction and logic for register based hardware memory renaming
KR20130112909A (ko) 권한 레벨에 관계없는 세그먼트 레지스터 판독 및 기입용 시스템, 장치, 및 방법
US9965280B2 (en) Instruction and logic for processor trace information for control flow integrity
US9524170B2 (en) Instruction and logic for memory disambiguation in an out-of-order processor
EP3391237A1 (en) Instructions and logic for vector-based bit manipulation

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