JP5961288B2 - プロシージャからの複数のリターンターゲット制限リターン命令、プロセッサ、方法、およびシステム - Google Patents

プロシージャからの複数のリターンターゲット制限リターン命令、プロセッサ、方法、およびシステム Download PDF

Info

Publication number
JP5961288B2
JP5961288B2 JP2015005715A JP2015005715A JP5961288B2 JP 5961288 B2 JP5961288 B2 JP 5961288B2 JP 2015005715 A JP2015005715 A JP 2015005715A JP 2015005715 A JP2015005715 A JP 2015005715A JP 5961288 B2 JP5961288 B2 JP 5961288B2
Authority
JP
Japan
Prior art keywords
return
instruction
rtr
code
processor
Prior art date
Legal status (The legal status 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 status listed.)
Expired - Fee Related
Application number
JP2015005715A
Other languages
English (en)
Other versions
JP2015191658A (ja
Inventor
カプリオリ、ポール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of JP2015191658A publication Critical patent/JP2015191658A/ja
Application granted granted Critical
Publication of JP5961288B2 publication Critical patent/JP5961288B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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/30003Arrangements for executing specific machine instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/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
    • 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
    • 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/55Detecting local intrusion or implementing counter-measures
    • G06F21/554Detecting local intrusion or implementing counter-measures involving event detection and direct action
    • 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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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
    • 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
    • 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/30181Instruction operation extension or modification
    • 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/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address
    • 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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/567Computer malware detection or handling, e.g. anti-virus arrangements using dedicated hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/034Test or assess a computer or a system

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Computing Systems (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)

Description

本明細書において説明される複数の実施形態は、概ね複数のプロセッサに関する。具体的には、本明細書において説明される複数の実施形態は、概ね、複数のリターン命令を実行する複数のプロセッサに関する。
背景情報 リターン指向プログラミング(ROP)は、複数の攻撃者が、複数のコンピュータシステムまたは他の電子デバイスを介して制御を得るべく使用し得るコンピュータセキュリティを悪用する技術である。ROPにおいて、複数の攻撃者は、プログラムの制御フローをハイジャックするべく、スタックの制御を得ることができる。
多くの場合、呼び出しスタックの制御は、バッファオーバーランの悪用または攻撃により実現される。バッファオーバーランにおいて、データをメモリ内に格納する前に境界チェックを十分に実行しない関数は、適切に格納され得るよりも多くのデータを受け取ることがある。例えば、攻撃者は、ウェブブラウザに、ウェブブラウザが適切に格納し得るよりも多くのデータを送信することがある。スタック上にデータが格納されている場合、いくつかのデータは、その関数の複数の変数に割り当てられたストレージスペースを超過し、リターンアドレスを上書きすることがある。リターンアドレスは、呼び出しプロシージャ命令によりスタック上に格納されるアドレスであり、これは、呼び出されたプロシージャが完了した後、制御フローを呼び出し関数に再度リダイレクトするべく使用されることを意図される。しかし、バッファオーバーランの攻撃または悪用において、リターンアドレスは、異なるリターンアドレスで上書きされることがある。これにより、攻撃者が異なるリターンアドレスに制御フローを移動させ、異なるリターンアドレスで開始するコードを実行し、潜在的に所望でない、および/または悪意ある複数のアクションを実行することを可能にし得る。
ROP攻撃において、攻撃者は、「ガジェット」として知られたシーケンスを合わせてチェーン化させることができる。各ガジェットは、プロシージャからのリターン命令を従える、1つまたはいくつかの命令のセットを表し得る。攻撃者は、複数の所望のガジェットの位置を突き止め、またはこれを識別するべく、コードの様々な実行可能なメモリ領域をスキャンし、または調査し得る。コードのそのような複数の実行可能なメモリ領域の例としては、例えば、アプリケーション、共有ユーザレベルのライブラリ、ドライバ、システムレベルのコード、およびシステムレベルのライブラリが挙げられる。例として、攻撃者は、インテル(登録商標)64およびIA―32 Architectures Software Developer's Manual,Volume 2,Instruction Set Reference,A−Z,Order Number 325383−041US,December 2011に記載されるようなプロシージャからのリターン(RET)命令に対応するオペコード0xC3をスキャンすることがある。各オペコードを識別した後、攻撃者は、上記の命令がガジェットとして有用かどうかを調べ得る。例として、攻撃者は、第1のガジェットとしてのリターン命令を従えるポップスタック命令、第2のガジェットとしてのリターン命令を従えるレジスタとレジスタとの間のMOVE命令等を識別し得る。いくつかの場合に、攻撃者は、複数の十分なガジェットを識別し、いわゆるチューリング完全ガジェットのカタログを形成することができ、このカタログにより、攻撃者が広範な、または潜在的にほぼあらゆる所望の悪意あるアクションを実行することを可能にし得ることがある。
図1は、例示的な3つのガジェットチェーン100のブロック図である。チェーンは、ポップeax命令102および第1のプロシージャからのリターン(RET)命令103を含む、第1のガジェット101を含む。第1のガジェットは、第2のガジェット104にリンクする。第2のガジェットは、ポップecx命令105および第2のプロシージャからのリターン命令106を含む。第1および第2のガジェットは、スタックからeaxおよびecxのレジスタへとデータをポップさせる。第2のガジェットは、第3のガジェット107にリンクする。第3のガジェットは、mov[ecx],eax命令108および第3のプロシージャからのリターン命令109を含む。第3のガジェットは、レジスタeaxにおける値を、レジスタecxにより示されるメモリ位置に格納する。これらのガジェットは、アプリケーション、ライブラリ、ドライバ、オペレーティングシステム等、潜在的に異なる複数のタイプのコード110に位置し得る。これは、ガジェットチェーンの単純な図示的一例にすぎない。
大まかではあるが図示的な類推は、ROPの複数のガジェットを、複数の異なる雑誌または新聞から切り抜かれた個々のレターに若干類似し、ランサムノートを綴るべく使用されるものとみなすことである。個々のレターが、複数の異なる雑誌または新聞から切り抜かれ、ランサムノートを綴るべく、連続的に配置されるように、個々のガジェット(例えば、各々は、リターンを従える1つまたはいくつかの命令を含む)は、潜在的に異なる複数のコードとして識別され、異なる機能性を有する新しいコードを作成するべく共にリンクされる。ガジェットのチューリング完全機能性は、類推により、ほぼいずれの機能性も実現するべく使用され得るように、任意の所望のメッセージを綴るのに必要とされる、全てのレターA〜Zを有することに若干類似し得る。
まず、バッファオーバーラン攻撃は、スタック上でリターンアドレスをハイジャックするべく使用され、それにより制御フローをハイジャックし得る。第1のガジェットの第1の命令のアドレスは、スタック上に格納され、制御フローを第1のガジェットに移動させ得る。制御フローは、呼出しプロシージャに(呼び出しプロシージャ命令を用いて)リターンするのではなく、第1のガジェットの第1の命令に移動し得る。次に、チェーンにおける第2のガジェットの第1の命令のリターンアドレスは、スタック上に格納され得る。第1のガジェットのリターン命令は、第2のガジェットに制御フローを移動させ得る。このようにして、連続した複数のガジェットの複数のリターンアドレスは、スタック上にシーケンシャルに格納され、複数のチェーン化ガジェットの複数のリターン命令によりジャンプされ得る。特定の複数の順序に複数のガジェットをチェーン化することにより、攻撃者は、既存のコードから複数の新しいプログラム機能性を作成し得ることがある。複数の攻撃者は、これを潜在的には、例えば、秘密情報を窃取し、他の複数のアプリケーションに干渉し、またはこれを攻撃し、複数の電子メールを送信し、複数のテキストメッセージを送信し、複数のツイートを発送し、カーネルの脆弱性を悪用する等、望ましくないか、または有害な目的に使用し得る。
本発明は、実施形態を図示するべく使用される以下の説明および添付の図面を参照することにより最もよく理解され得る。
例示的な3つのガジェットチェーンのブロック図である。 プロセッサの実施形態のブロック図である。 プロシージャからのリターンターゲット制限リターン命令の実施形態を実行するように動作可能なプロセッサの実施形態のブロック図である。 プロシージャからのリターンターゲット制限リターン命令およびリターンターゲット命令のオペレーションの実施形態を図示するブロック図である。 プロシージャからのリターンターゲット制限リターン命令の実施形態を実行する方法の実施形態のブロックフロー図である。 第1のタイプのコード、および第2の異なるタイプのコードをそれぞれ格納し、異なる許容し得る、または許可し得るRTR情報を示す複数のRTRリターン命令を有する、機械可読ストレージ媒体の実施形態のブロック図である。 コードを分析する方法の第1の実施形態のブロックフロー図である。 コードを分析する方法の第2の実施形態のブロックフロー図である。 インオーダパイプラインの実施形態、およびレジスタリネームアウトオブオーダ発行/実行パイプラインの実施形態を図示するブロック図である。 実行エンジンユニットに結合されたフロントエンドユニットを備え、双方がメモリユニットに結合されたプロセッサコアの実施形態のブロック図である。 オンダイ相互接続ネットワークに接続し、レベル2(L2)キャッシュのローカルサブセットを有するシングルプロセッサコアの実施形態のブロック図である。 図10Aにおけるプロセッサコアの一部の拡大図による実施形態のブロック図である。 2つ以上のコアを有し、統合メモリコントローラを有し、統合グラフィックスを有し得るプロセッサの実施形態のブロック図である。 コンピュータアーキテクチャの第1の実施形態のブロック図である。 コンピュータアーキテクチャの第2の実施形態のブロック図である。 コンピュータアーキテクチャの第3の実施形態のブロック図である。 システムオンチップアーキテクチャの実施形態のブロック図である。 本発明の複数の実施形態による、ソフトウェア命令変換器を使用し、ソース命令セットの複数のバイナリ命令を、ターゲット命令セットの複数のバイナリ命令に変換するブロック図である。
本明細書において、プロシージャからの複数のリターンターゲット制限リターン命令およびリターンターゲット命令、複数の命令を実行する複数のプロセッサ、複数の命令を処理または実行する場合にプロセッサにより実行される方法、および複数の命令を処理または実行するべく1または複数のプロセッサを組み込む複数のシステムが開示される。以下の説明において、様々な具体的詳細(例えば、具体的な複数の命令オペレーション、複数のタイプのリターンターゲット制限情報、複数のプロセッサ構成、マイクロアーキテクチャの詳細、複数のオペレーションのシーケンス等)が記載される。しかし、複数の実施形態は、これらの具体的な詳細を用いることなく実施され得る。他の複数の例において、複数の周知の回路、構造、および技術は、説明の理解を不明瞭にするのを避けるべく、詳細には示されていない。
図2は、プロセッサ210の実施形態のブロック図である。プロセッサは、命令セット212を有する。命令セットは、プロセッサの複数のネイティブ命令を含む。命令セットの複数の命令は、命令セットの複数の命令からデコードされる、マイクロ命令、マイクロオペレーション、または命令もしくは制御信号ではなく、実行のためにプロセッサに提供される、マクロ命令、アセンブリ言語命令、または複数の機械レベル命令を表す。
示されるように、いくつかの実施形態において、命令セットは、プロシージャからのリターンターゲット制限リターン(RTRリターン)命令214を含み得る。いくつかの実施形態において、RTRリターン命令は、リターンターゲット制限(RTR)情報216を有し、これを示し、そうでなければこれに関連し得る。更に示されるように、いくつかの実施形態において、命令セットは、リターンターゲット命令218を含み得る。いくつかの実施形態において、リターンターゲット命令218は、リターンターゲット制限(RTR)情報220を有し、これを示し、そうでなければこれに関連し得る。いくつかの実施形態において、RTRリターン命令およびリターンターゲット命令は、複数の命令のペアを表し、(例えば、RTR情報に基づいて)試みられたリターン制御フロー移動を条件的に制限または限定するべく一緒に使用されることを意図され得る。
また、プロセッサは、リターンターゲット制限ユニット222を含む。リターンターゲット制限ユニットは、ハードウェア、ファームウェア、ソフトウェア、または組み合わせ(例えば、いくつかのファームウェアおよび/またはソフトウェアと潜在的に組み合わされるハードウェア)で実装されてもよい。いくつかの実施形態において、RTRリターン命令は、リターンターゲット制限ユニットおよび/またはプロセッサにより、どのリターンターゲット(例えば、どの命令)に、RTRリターン命令が制御フローをリターンさせることを許可するかに関して、制限または限定させるように動作可能であり得る。いくつかの実施形態において、RTRリターン命令は、リターンターゲットアドレスにおけるあるタイプの命令を使用し、および/またはこれに基づいてそのような制限をさせるように動作可能であり得る。例えば、いくつかの実施形態において、リターンターゲットアドレスにおける命令がリターンターゲット命令218と同一のタイプ(例えば、同一のオペコードを有する)であれば、リターンターゲットアドレスにおける命令への試みられたリターン制御フロー移動は、許可され、そうでなければ制限もしくは阻止され得る。リターンターゲット命令218は、主に、RTRリターン命令の許可可能または正当な複数のリターンターゲットに対するマーカとして機能するように設計または意図される命令のタイプを表し得る。いくつかの実施形態において、RTRリターン命令は、RTRリターン命令のRTR情報216およびリターンターゲット命令のRTR情報220を使用し、および/またはこれらに基づいてそのような制限をさせるように動作可能であり得る。例えば、いくつかの実施形態において、2つのセットのRTR情報216、220が等しく、一致し、そうでなければ互換性がある場合に、リターンターゲットにおける命令への試みられたリターン制御フロー移動は、許可され得る。特定の例示的な実施形態において、各セットのRTR情報は、1つの値(例えば、整数値)を含んでもよく、双方の値は、互換性があるようにするべく、等しくなければならない。2つのセットのRTR情報に互換性がない場合、試みられたリターン制御フロー移動は、制限または阻止され得る。いくつかの実施形態において、RTR情報は、複数の命令の即値により提供されてもよいが、本発明の範囲は、そのようには限定されない。
有利なことには、RTRリターン命令214およびリターンターゲット命令218は、複数のリターン制御フロー移動に対する更なる制御を条件的に制限し、限定し、またはこれを提供するのに役立ち得る。1つの潜在的利点として、これは、複数のリターン指向プログラミング(ROP)攻撃を阻止するのに役立ち、またはこれらを開始することを少なくとも著しく困難にし得る。第1には、通常、複数のROP攻撃は、様々なチェーン化ガジェットの複数の第1の命令へのリターン制御フロー移動を反復して実行する能力に依存する必要がある(例えば、複数のROP攻撃は、これらのガジェットの複数の第1の命令のターゲットアドレスをスタック上に置くようにできる必要がある)。しかし、いくつかの実施形態において、試みられたリターン制御フロー移動が、特定のリターンターゲット命令218とは異なるタイプ(例えば、異なるオペコード)の命令(例えば、ポップ命令、mov命令等)に対するものである場合、プロセッサは、リターン制御フロー移動を制限または阻止し得る。これのみで、複数の攻撃者が、偶然に存在する複数の有用なガジェットを発見し得るのを非常に困難にする傾向にあり得る。リターン命令に続く1または複数の有用な命令を発見することに加えて、そのような1または複数の有用な命令に、リターンターゲット命令218が先立つ必要もあるからである。これのみで、複数の攻撃者がリターンすることを元々意図されない複数の命令にリターンし得ることを非常に困難にし得る。更に、いくつかの実施形態において、試みられたリターン制御フロー移動が、一致しない、そうでなければ互換性がないRTR情報を有する命令に対するものである場合、そのようなリターン制御フロー移動も制限または阻止され得る。これも、複数の攻撃者が、リターンすることを元々意図されない複数の命令にリターンし得ることを非常に困難にし得る。複数のリターンターゲット命令218は、一致し、または互換性RTR情報を有する必要があるからである。
図3は、プロシージャ(リターン)からのリターンターゲット制限(RTR)リターン命令314の実施形態を実行するように動作可能なプロセッサ310の実施形態のブロック図である。いくつかの実施形態において、プロセッサは、汎用プロセッサ(例えば、デスクトップ、ラップトップ、または他の複数のコンピュータにおいて使用されるタイプの汎用マイクロプロセッサ)であり得る。あるいは、プロセッサは、特定用途用プロセッサであってもよい。好適な複数の特定用途用プロセッサの例としては、ネットワークプロセッサ、通信プロセッサ、暗号化プロセッサ、グラフィクスプロセッサ、コプロセッサ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、およびコントローラ(例えば、マイクロコントローラ)が挙げられるが、これらに限定されない。プロセッサは、様々な複合命令セットコンピューティング(CISC)プロセッサ、縮小命令セットコンピューティング(RISC)プロセッサ、超長命令語(VLIW)プロセッサ、それらのハイブリッド、他の複数のタイプのプロセッサのいずれかであってもよく、またはそのような異なるプロセッサ(例えば、異なる複数のコアでの)の組み合わせを有してもよい。
オペレーション中に、プロセッサは、RTRリターン命令314の実施形態を受信し得る。例として、RTRリターン命令は、命令フェッチユニット、または命令キュー等から受信し得る。RTRリターン命令は、マクロ命令、アセンブリ言語命令、機械コード命令、またはプロセッサの命令セットの命令もしくは制御信号を表し得る。いくつかの実施形態において、RTRリターン命令は、リターンターゲット制限(RTR)情報を有し、これを示し、そうでなければこれに関連し得る。いくつかの実施形態において、RTR情報は、RTRリターン命令に関連する1または複数の値を含み得る。いくつかの実施形態において、RTR情報は、RTRリターン命令の即値における値を含み得る。RTR情報の可能な様式の他の例は、命令のサフィックス内、命令に続く1または複数のバイト内に存在し、命令により示されるレジスタ内で提供されるRTR情報等を含むが、これに限定されない命令に関連し得る。
再び図3を参照すると、プロセッサは、デコードユニットまたはデコーダ330を含む。デコードユニットは、比較的高いレベルのRTRリターン命令を受信し、デコードし得る。デコードユニットは、1または複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、デコード済み命令、もしくは制御信号、または比較的高いレベルの複数のRTRリターン命令を反映し、表し、および/またはこれらから派生する他の比較的低いレベルの複数の命令もしくは制御信号を出力し得る。1または複数のより低レベルの命令または制御信号は、1または複数のより低いレベル(例えば、回路レベルまたはハードウェアレベルの)オペレーションによるより高いレベルの命令を実装してもよい。いくつかの実施形態において、デコードユニットは、命令を受信する1または複数の入力構造体(例えば、ポート、相互接続、インターフェース)、命令を認識およびデコードするべく入力構造体に結合された命令、命令認識、およびデコードロジック、および1または複数の対応するより低レベルの命令または制御信号を出力する命令認識ロジックおよびデコードロジックに結合された1または複数の出力構造体(例えば、ポート、相互接続、インターフェース)を含み得る。デコードユニットは、マイクロコードリードオンリメモリ(ROM)、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、および当技術分野で既知の複数のデコードユニットを実装するべく使用される他のメカニズムを含むが、これらに限定されない様々な異なるメカニズムを使用して実装されてもよい。
いくつかの実施形態において、デコードユニット330に直接提供されるRTRリターン命令314ではなく、命令のエミュレータ、トランスレータ、モルファ、インタープリタ、または他の命令変換モジュール(図示せず)が任意選択で使用され得る。様々なタイプの命令変換モジュールが当技術分野において既知であり、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装され得る。いくつかの実施形態において、命令変換モジュールは、例えば、別個のダイ上、および/またはメモリ(例えば、スタティック、ダイナミック、またはランタイムエミュレーションモジュール)内等、プロセッサの外側に位置し得る。例として、命令変換モジュールは、第1の命令セットであり得るRTRリターン命令314を受信することができ、RTRリターン命令を1または複数の対応し、または派生する中間命令または制御信号にエミュレート、トランスレート、モーフィング、解釈、そうでなければ変換してもよく、中間命令または制御信号は、第2の異なる命令セットであってもよい。第2の命令セットの1または複数の中間命令または制御信号は、デコードユニットに提供されてもよく、デコードユニットは、1または複数の中間命令または制御信号を、プロセッサのネイティブハードウェアまたはロジックにより実行され得る、1または複数のより低レベルの命令または制御信号にデコードしてもよい。
再び図3を参照すると、メモリ350は、プロセッサ310と結合される。メモリは図示される実施形態で示されるが、他の複数の実施形態は、(例えば、システムに展開されない)そのようなメモリに結合されないプロセッサのみに関する。オペレーション中に、メモリは、スタック352を格納してもよい。スタックは、データを格納するように動作可能なスタックタイプのデータ構造体を表し得る。スタックの一般的目的は、それぞれの呼び出されたプロシージャ(例えば、各アクティブサブルーチン)が、実行を終了したときに制御をリターンさせるべきリターンアドレスまたは地点を追跡することである。示されるように、スタックは、RTRリターン命令314に対応するリターンアドレス354を格納し得る。例として、対応する呼び出しプロシージャ命令は、RTRリターン命令を用いてプロシージャを呼び出し、前のスタックにリターンアドレス354を格納し得るRTRリターン命令は、スタックからリターンアドレス354をポップさせ、そうでなければ取得することを試み、制御をリターンアドレスに移動させ得る。また、メモリは、スタック上にリターンアドレス354により示される、関連するリターンアドレス358を有するコード356を格納してもよい。コードは、命令を有し、図示される例において、リターンアドレス358に位置するリターンターゲット命令318を有する。
再び図3を参照すると、リターンターゲット制限ユニット322は、デコードユニット330と結合されており、配置して使用する間は、メモリ350と結合し、そうでなければ通信する。プロセッサおよび/またはリターンターゲット制限ユニットは、RTRリターン命令314に応答し、および/またはこの結果として(例えば、1または複数の命令またはそれからデコードされた制御信号に応答して)、どの複数の特定のリターンターゲット(例えば、複数の命令)に、RTRリターン命令314がリターン制御フローを移動することを許可されるかに関して、制限または限定するように動作可能である。いくつかの実施形態において、リターンターゲット制限ユニット322は、RTRリターン命令314に応答して、リターンターゲット命令のタイプおよび/またはRTRリターン命令と互換性があるリターンターゲット命令の他のノーオペコード情報に基づいて、リターンアドレス358に位置するRTRリターン命令314のリターンターゲット命令(例えば、図示される例においてリターンターゲット命令318)への制御フロー移動を制限するか否かを判断するように動作可能であり得る。
いくつかの実施形態において、リターンターゲット制限ユニット322は、デコードユニットと結合され、(配置して使用する間は)メモリ350と結合し、そうでなければこれと通信する第1の判断ユニット332を含み得る。第1の判断ユニットは、RTRリターン命令314に応答して、リターンアドレス358における命令(例えば、リターンターゲット命令318)がRTRリターン命令314と互換性があるタイプか否かを判断し得る。示されるように、リターンアドレス358における命令のタイプ321の指示(例えば、オペコード、または命令がリターンターゲット命令318であり、またはリターンターゲット命令318でないとの指示)は、リターンターゲット制限ユニット322に提供されてもよい。いくつかの実施形態において、リターンターゲット命令318のみは、RTRリターン命令314と互換性があるタイプ(例えば、オペコードを有する)であり得るが、他の複数のタイプの命令(例えば、命令セットの異なるオペコード)は、互換性がないことがある。あるいは、若干の異なるタイプの命令(例えば、若干の異なるオペコード)、多くの場合、5以下の異なるタイプの命令は、任意選択でRTR命令と互換性があり得るが、一般にはより多くの異なるタイプ(例えば、命令セットのより多くの異なる残りのオペコード)は、互換性がないことがある。
いくつかの実施形態において、そのような互換性があるタイプの命令318は、RTRリターン命令の潜在的には正当または許可し得るリターンターゲットの位置を表示するべく、専ら、または主としてRTRリターン命令314と組み合わせて使用されることが意図され、またはそのように設計される、専用リターンターゲットマーカタイプの複数の命令を表し得る。一般に、リターンターゲット命令318は、算術、ロジック、メモリアクセス、または他の関数を有し得ないが、特定の実装に所望であればそれらを有し得ることが企図される。いくつかの実施形態において、リターンターゲット命令318は、自身のタイプを確認し、RTR情報を提供することは別としても、ノーオペレーション(NOP)として実行または行い得るタイプであってもよい。いくつかの実施形態において、そのような互換性命令の存在は、ある位置へのリターンを許可する必要条件であり得るが、十分条件ではない。そのような互換性命令がリターンアドレス358に位置しない場合、リターンターゲット制限ユニット322および/またはプロセッサは、リターンアドレス358への試みられたリターンを制限または許可しなくてもよい。例えば、リターンターゲット制限ユニットおよび/またはプロセッサは、例えば、制御保護フォールト等の例外360を発行し、またはシグナリングしてもよい。
いくつかの実施形態において、リターンターゲット制限ユニット322は、デコードユニットと結合され、(配置して使用するときには)メモリ350と結合され、そうでなければこれと通信する第2の判断ユニット334を含み得る。第2の判断ユニットは、RTRリターン命令314に応答して、リターンアドレス358における命令(例えば、リターンターゲット命令318)の、またはこれにより示され、そうでなければこれに関連するリターンアドレス358のRTR情報が、RTRリターン命令314の、またはこれにより示され、あるいはこれに関連するRTR情報と互換性があるか否かを判断し得る。示されるように、リターンアドレス358における命令のRTR情報320は、リターンターゲット制限ユニット322に提供され、RTRリターン命令のRTR情報316は、リターンターゲット制限ユニット322に提供され得る。
2つのセットのRTR情報は、異なる実施形態の異なる様式で互換性があることがある。例えば、いくつかの実施形態において、2つのセットのRTR情報は、等しいか、そうでなければ一致する場合にのみ、互換性があり得る。例えば、各セットのRTR情報は、潜在的には1つの値を含み得、2つの値は、等しい場合にのみ、互換性があるか、または一致し得る。あるいは、2つのセットのRTR情報は、特定の実装に所望の他の複数の様式で一致または互換性があることがある。例えば、2つのセットのRTR情報は、関数(例えば、ハッシュ関数、チェックサム関数、ロジックAND、OR、NOT、XOR、または他のロジックオペレーションもしくは関数等)により、互いに一致し、および/または互換性であり得る。いくつかの実施形態において、2つのセットのRTR情報に互換性がない場合、リターンターゲット制限ユニット322および/またはプロセッサは、リターンアドレス358への試みられたリターンを制限し、または許可しなくてもよい。例えば、リターンターゲット制限ユニット322および/またはプロセッサは、例えば、制御保護フォールト等の例外360を発行またはシグナリングしてもよい。
他の複数の実施形態において、複数の命令のRTR情報を他の情報と組み合わせることが可能であるが、これは必須ではない。そのような他の情報の例としては、(例えば、プロセッサ識別レジスタの)プロセッサ識別タイプ情報、デバイス固有情報(例えば、モデル番号またはシリアル番号)、プラットフォーム固有情報、オペレーティングシステムの特権情報、暗号化キーの一部(例えば、最初の1バイト)または全て等が挙げられるが、これらに限定されない。例えば、命令の即値は、そのような情報に添付され、そのような情報とハッシュされ、もしくは排他的論理和をとり、そうでなければ組み合わされ得る。これは、セキュリティを向上させるのに役立ち得る。通常、ハッカーは、そのような情報を容易に知り得ないからである。比較の一方の側(例えば、リターン)が即値をそのような追加の情報と組み合わせ、他方の側(例えば、リターンターゲット)がその即値のみを使用した場合、ソフトウェアは、特定のデバイス(例えば、デバイス固有情報)用にカスタマイズされる。顧客は、そのような情報を知る、信用されるリソースからソフトウェアを取得することができる。あるデバイスのソフトウェアは、別のデバイス上では起動できないことがある。
リターンアドレスにおける命令のタイプに互換性があり、2つのセットのRTR情報に互換性がある場合、リターンターゲット制限ユニットおよび/またはプロセッサは、リターンアドレス358における試みられたリターンターゲットへの制御フロー移動を制限せず、および/またはこれを許可することを決定してもよい。例えば、リターンターゲット制限ユニット322は、許可信号336を制御フロー移動ユニット338に提供してもよい。リターンターゲット制限ユニット(例えば、許可信号336)による決定または承認に左右される制御フロー移動を除き、制御フロー移動ユニットは、実質的に従来通りであってもよい。例えば、制御フロー移動ユニットは、ジャンプ実行ユニット、またはプロシージャからのリターン制御移動オペレーションを実装するのに好適な他のタイプのユニットもしくはロジックを含んでもよい。代表的には、制御フロー移動ユニットは、リターンアドレス342としてリターンアドレス358を命令ポインタレジスタ340中に格納してもよい。セグメント化されたメモリが任意選択で使用される複数の実施形態においては必須ではないが、リターンアドレスにおける命令が異なるセグメントに位置する場合(例えば、セグメント間制御移動の場合)、制御フロー移動ユニットは、リターンターゲット命令318用のセグメント346を、セグメントセレクタレジスタ344中に格納してもよい。
一定の複数のコンセプトを更に図示するべく、RTRリターン命令およびリターンターゲット命令のペアの詳細な例示的実施形態を認識されたい。RTRリターン命令の具体的な一実施形態は、命令の即値(例えば、2ビット、4ビット、8ビット、または16ビットの即値)で提供される定数K(例えば、整数)を有するRETK命令である。一般に、定数のとり得る値の数が大きくなる程、悪意ある攻撃への保護が強くなる。例として、8ビットの即値は、0〜255の範囲の複数の値を提供し得る。リターンターゲット命令の具体的な一実施形態は、即値中に定数Kを有するENDRETK命令である。ENDRETK命令は、RETK命令の最終リターン地点または潜在的に許容され得るリターンターゲットを表示する。多くの場合、2つの命令の複数の即値に同一のサイズを有するようにさせることは好都合である場合があるが、複数の値が等しくあり得る限り、これは必須ではない。リターンターゲット制限ユニット322および/またはプロセッサにより、制御フロー移動を許可するべく、試みられたリターンターゲットアドレスにおけるENDRETK命令の存在および2つの命令における2つ定数Kの同一性の双方が、見出される必要がある。例えば、RET17命令は、ENDRET16命令またはその他の非ENDRET17命令ではなく、ENDRET17命令にのみリターンすることを許可され得る。同様に、RET232命令は、ENDRET17命令またはその他の非ENDRET232命令ではなく、ENDRET232命令にのみリターンすることを許可され得る。RET232命令がポップスタック命令、追加命令、ENDRET231命令、またはENDRET232命令以外のその他の命令にリターンすることを試みる場合、試みられたリターンは、制限または阻止され、例外(例えば、制御保護フォールト)が、生じ得る。これは、図示的一例にすぎず、本発明の範囲は、この特定の例に限定されないことを理解されたい。
リターンターゲット制限ユニット322および/またはプロセッサは、RTRリターン命令に応答し、および/またはRTRリターン命令の結果として、RTRリターン命令を実行し、および/またはリターンターゲットへのリターンを制限するか否かを決定するように動作可能な、固有または特定のロジック(例えば、複数のトランジスタ、集積回路、またはファームウェアと潜在的に組み合わされる他のハードウェア(例えば、不揮発性メモリ内に格納された複数の命令)、および/またはソフトウェア(例えば、メモリ内格納されたより高いレベルの複数の命令))を含んでもよい。
有利なことに、RTRリターン命令およびリターンターゲット命令は、リターン制御フロー移動に対する更なる制御を条件的に制限し、限定し、または提供するのに役立ち得る。1つの潜在的利点として、これは、複数のリターン指向プログラミング(ROP)攻撃を阻止し、それらを少なくとも著しく困難にし得る。第1には、一般に、複数のROP攻撃は、様々なチェーン化ガジェットの第1の命令に複数のリターン制御フロー移動を反復して実行する能力に依存する必要がある。しかし、いくつかの実施形態において、試みられたリターン制御フロー移動が特定のリターンターゲット命令318とは異なるタイプの命令(例えば、異なるオペコード)に対するものである場合、そのようなリターン制御フロー移動は、制限または阻止されてもよい。更に、いくつかの実施形態において、試みられたリターン制御フロー移動が一致しないか、そうでなければ互換性がないRTR情報を用いる命令に対するものである場合、そのようなリターン制御フロー移動は、制限または阻止されてもよい。全体として、これは、リターンすることを元々意図されない複数の位置にリターンすることを攻撃者が試みるのを非常に困難にする傾向にあり得る。特定のリターンターゲット命令および互換性RTR情報のセットの使用は、複数の攻撃者に所望の複数のリターンターゲットに任意にリターンすることが通常はあまりあり得ないものとなるように、コードにおける複数の許可し得るリターンパスを決定することに役立ち得る。プログラムが作成される場合、複数のリターンターゲット命令の位置およびRTR情報の互換性がある複数のペアは、全ての意図されるリターンターゲットを示す。一般に、異なるリターンターゲットは、容易に見出され得ない。多くの場合、複数のリターンターゲット命令は、所望の複数の位置に存在せず、および/または互換性RTR情報を有しないからである。これは、偶然にも存在するガジェットの数を非常に希少なものにする傾向にあり得る。
図4は、リターンターゲット制限ユニット422の実施形態による、RTRリターン命令414の実施形態およびリターンターゲット命令418の実施形態の使用を図示するブロック図である。呼出しプロシージャ495は、ターゲットアドレス499およびリターンアドレス458を示す呼び出しプロシージャ命令496を有する。ターゲットアドレス499は、リターンプロシージャ498における第1の命令401に対するものである。(1)において示されるように、呼び出しプロシージャ命令は、プロセッサに初期ターゲットアドレスを命令ポインタレジスタ440上に格納させ、リターンプロシージャ498の初期セグメントをセグメントセレクタレジスタ中に格納させる。また、リターンアドレス454は、リターンアドレス458に対応するスタック452上に格納されてもよい。次に、制御フローは、リターンプロシージャ498にジャンプまたは移動する。(2)に示されるように、ターゲットアドレス498における命令401が実行され、次いでRTRリターン命令414をもたらす1または複数の他の命令が実行され得る。RTRリターン命令414が実行されると、リターンターゲット制限ユニット422は、RTRリターン命令のRTR情報416、およびRTRリターン命令により示されるスタック452上のリターンアドレス454において示される関連するリターンターゲット命令418のRTR情報420を受信することができる。また、リターンターゲット命令のタイプ421の指示は、リターンターゲット制限ユニット422に提供されてもよい。(3)として、リターンターゲット制限ユニットは、本明細書において他の箇所で説明するように、リターンターゲット命令418への試みられた制御フロー移動を許可または制限するか否かを決定し得る。決定が制限しない場合、(4A)に示されるように、決定は、リターンアドレス454を命令ポインタレジスタ440に格納し、(セグメント間の移動の場合に)呼出しプロシージャ446のセグメントをセグメントセレクタレジスタ444に格納し得る。決定が制限する場合、(4B)に示されるように、決定は、例外460を生成し得る。次に、リターンターゲット命令418へのジャンプまたは移動が行われ得る。(5)に示されるように、リターンターゲット命令は、潜在的に、NOPとして実行され、次に実行は、次の命令497と共に継続し得る。
図5は、プロシージャからのリターンターゲット制限リターン(RTRリターン)命令の実施形態を実行する、方法570の実施形態のブロックフロー図である。様々な実施形態において、本方法は、プロセッサ、命令処理装置、または他のデジタルロジックデバイスにより実行されてもよい。いくつかの実施形態において、図5の複数のオペレーションおよび/または方法は、図2〜3のいずれかのプロセッサにより、および/またはどちらかのプロセッサ内で実行されてもよい。また、図2〜3のどちらかのプロセッサについて本明細書において説明される複数のコンポーネント、特徴、および任意選択の特定の詳細は、図5の複数のオペレーションおよび/または方法に任意選択で適用される。あるいは、図5の複数のオペレーションおよび/または方法は、類似もしくは異なるプロセッサ、または装置により、および/または類似もしくは異なるプロセッサ、または装置内で実行されてもよい。更に、図2〜3のどちらかのプロセッサは、図5のものと同一、類似、または複数の異なるオペレーションおよび/または方法を実行し得る。
本方法は、ブロック571でRTRリターン命令を受信する段階を備える。様々な態様において、命令は、プロセッサ、命令処理装置、またはそれらの部分(例えば、命令フェッチユニット、デコードユニット、バスインターフェースユニット等)において受信され得る。様々な態様において、命令は、オフダイソース(例えば、メモリ、相互接続等)、またはオンダイソース(例えば、命令キャッシュ、命令キュー等)から受信され得る。いくつかの実施形態において、プロシージャからのリターンターゲット制限リターン命令は、RTR情報を有し、示し、そうでなければこれに対応し、もしくはこれに関連してもよい。
ブロック572で、リターンアドレスにおける命令のタイプは、RTRリターン命令と互換性があるか否かの判断が行われ得る。そのタイプが、互換性があると判断されると(すなわち、「はい」が、ブロック572における判断である)、方法は、ブロック573に進んでよい。いくつかの実施形態において、タイプは互換性があることを見出すべく、リターンアドレスにおける命令は、本明細書において他の箇所に説明するリターンターゲット命令であるべきである。
ブロック573で、RTRリターン命令により示された第1のRTR情報は、リターンアドレスにおける命令により示された第2のRTR情報と互換性があるか否かの判断が行われ得る。この判断は、本明細書において他の箇所に説明するように行われ得る。RTR情報の複数のセットは、互換性があると判断されると(すなわち、「はい」がブロック573における判断である)、方法は、ブロック574に進んでよい。
ブロック574で、方法は、RTRリターン命令による試みを許可し、RTRリターン命令に対応するリターンアドレスにおける命令への制御フロー移動を行い得る。逆に、どちらかのタイプに互換性がないと判断され(すなわち、「いいえ」がブロック572における判断である)、またはRTR情報の複数のセットに互換性がないと判断されると(すなわち、「いいえ」がブロック573における判断である)、本方法は、ブロック575に進み得る。ブロック575で、本方法は、RTRリターン命令による、RTRリターン命令に対応するリターンアドレスにおける命令への制御フロー移動の試みを制限し得る。
本明細書において開示される複数のRTRリターン命令および/またはRTR情報の別の潜在的利点は、それらが攻撃(例えば、複数のROP攻撃)のリスクに対するコードの分析または調査を容易にし、および/または向上させるのに役立ち得ることである。多くの場合、使用されることを許可される前に、コードは、分析により検討、精査、および検証される。例えば、これは、多くの場合、複数のデジタル配信プラットフォームについて行われる。一例として、App Storeは、iOSにおけるモバイルアプリケーションのためのデジタル配信プラットフォームであり、複数のユーザが、アップルのiOSソフトウェア開発キット(SDK)を用いて開発された複数のアプリケーションをブラウズおよびダウンロードすることを可能にする。別の例は、Mac App Storeであり、マックの複数のコンピュータ用に設計されたダウンロードのための複数のアプリケーションを有する。複数のアプリケーション発行元は、複数のデジタル配信プラットフォームまたはストアから販売またはダウンロードされることを考慮して、そのような複数のデジタル配信プラットフォームに複数のアプリケーションを提出することができる。一般に、処理の一部として、購入またはダウンロードされることを許可される前に、複数のアプリケーションは、検討、精査、および検証され得る。
複数のそのような検討中に実行される分析の共通のタイプは、静的分析(例えば、複数の静的バイナリ評価技術)である。しかし、これらの技術の1つの欠点は、多くの場合、ROPタイプの複数の攻撃を検出するのに完全には適さないということである。この問題についての更なる背景的議論は、「"Jekyll on iOS: When Benign Apps Become Evil",22nd USENIX Security Symposium,August 2013」という記事において入手可能である。1つの懸念は、複数の攻撃者が、複数の攻撃を実行するように設計された複数の悪意あるアプリケーションを書く一方で、潜在的には、静的分析中に検出を逃れ得ることである。例えば、攻撃者は、表面上は普通のコード(例えば、アプリケーション)を作成し、コードは、静的分析により検出することが困難な複数の隠しガジェットを有し得る。具体的な一例として、アプリケーション開発者は、App Storeを介して配信される、表面上は普通であるが、ROP攻撃の複数の隠しガジェットがアプリケーション内に含まれるビデオゲームを書くことができる。攻撃者は、精査および検証のためにビデオゲームまたは他のアプリケーションをApp Storeまたは他のデジタル配信プラットフォームに提出し得る。アプリケーションの意図されたフローに従って、呼び出しパスおよびリターンパスを追跡することを含む、静的分析が実行され得る。しかし、静的分析は、複数の攻撃者のランタイムコマンドに応じてランタイム中にのみ追尾される、悪意ある異なるリターンパスを企図または予期できないことがある。ROP攻撃において、複数のリターンパスは、スタック上に複数のリターンアドレスを配置して、動的に複数の制御フロー移動を制御することにより、ランタイム時に決定されることを想起されたい。結果として、複数の隠しガジェットは、静的分析中に検出を逃れることができる場合がある。アプリケーションは、アプリケーション検討および精査処理を送信し、購入および/またはダウンロードのためにアプリケーションストアに配置され得る。ビデオゲームまたは他のアプリケーションがスマートフォン、パッドコンピュータ、または他のコンピュータシステム上にインストールされるときに、攻撃者は、攻撃を開始することがある。攻撃者は、複数の悪意あるオペレーションを実行するべく、複数の悪意ある制御フローを導入し、特定の順序で複数のガジェットをアセンブルし得る。
有利なことに、本明細書において開示される複数のRTRリターン命令および/またはRTR情報は、複数の悪意あるガジェットおよび/または隠しガジェットに対するコードの分析を容易にし、および/または向上させるのに役立ち得る。第1に、複数のペアのRTRリターン命令および複数のリターンターゲット命令、および/または複数のペアの互換性RTR情報は、複数の可能な制御フローリターンパスをより静的で固定されたものにすることができる。実行時間中に、複数の制御フローリターンパスは、攻撃者が選択する任意の箇所に行くことを制限され得るが、むしろ、これらの複数の命令のペアおよび複数の互換性RTR情報のペアと一致し、または互換性がある複数の制御フローリターンパスに限定され得る。複数のリターンターゲット命令の位置および複数のセットの互換性RTR情報は、全ての可能な/認可されたリターンターゲットを示す。互換性RTR情報(例えば、偶然による等)を伴う互換性リターンターゲット命令も有する、いくつかの異なる可能なリターン位置にジャンプすることは可能であり得るが、これらの異なる複数のリターンパスを予期または予測することは、より容易であり、一般には、パスの数は少ないはずである。これは、分析(例えば、複数の静的分析技術)が可能な複数のリターンパスを追跡することをはるかに容易にし、これにより悪意あるコードの検出を支援するのに役立ち得る。また、これは、アプリケーション開発者がROP攻撃または他の悪意ある攻撃を実行し得るアプリケーションを作成する一方で、分析中に検出を逃れ得ることをはるかに困難にするのに役立ち得る。
図6は、許容し得るまたは許可し得る異なるRTR情報を示すRTRリターン命令683、685を有する第1のタイプのコード682および第2の異なるタイプのコード684をそれぞれ格納し、そうでなければ提供する、機械可読媒体680(例えば、機械可読ストレージ媒体)の実施形態のブロック図である。いくつかの実施形態において、第1のタイプのコードは、ユーザレベルコードおよび/または非特権レベルコードであるが、第2のタイプのコードは、システムレベルコードおよび/または特権レベルコードであり得る。他の複数の実施形態において、例えば、ライブラリコード対非ライブラリコード、デバイスドライバコード対非ドライバコード、オペレーティングシステムコード対非オペレーティングシステムコード、ユーザレベルコード対非ユーザレベルコード、またはこれらの様々な組み合わせ等、他の複数の異なるタイプのコードが使用され得る。
第1のタイプのコードは、第1のタイプのコード682について許可または認可されるが、第2の異なるタイプのコード684については許可されないRTR情報を示す複数のRTRリターン命令683を有する。いくつかの実施形態において、第1のタイプのコード(例えば、ユーザレベルコード)について許可されるRTR情報は、複数の他のタイプのコード(例えば、オペレーティングシステムコード、デバイスドライバコード等)については許可されないことがある。同様に、第2の異なるタイプのコードは、第2のタイプのコード684について許可または認可されるが、第1のタイプのコード682については許可されないRTR情報を示す複数のRTRリターン命令685を有する。いくつかの実施形態において、第2のタイプのコード(例えば、オペレーティングシステムコード)について許可されるRTR情報は、複数の他のタイプのコード(例えば、ユーザレベルコード、デバイスドライバコード等)については許可されないことがある。
いくつかの実施形態において、異なる許可し得るRTR情報は、複数の異なるレベルの特権またはセキュリティのために使用され得る。例えば、第1のタイプのコード682(例えば、ユーザレベルおよび/または非特権レベルコード)の複数のRTRリターン命令683のRTR情報は、第2のタイプのコード684(例えば、システムレベルコードおよび/または特権レベルコード)の複数のRTRリターン命令685のRTR情報に対する複数の許容し得るまたは許可し得る値のセットに対して相互排他的である、複数の許容し得るまたは許可し得る値のセットに限定されてもよい。例えば、複数の重複しない範囲の値は、これら2つの異なるタイプのコードに使用され得る。具体的で図示的な一例として、複数の整数値0〜127は、第1のタイプのコード682に対するRTR情報に任意選択で使用され得るが、複数の整数値128〜255は、第2のタイプのコード684に対するRTR情報に任意選択で使用され得る。
更に、所望であれば、2つ以上(例えば、3つ、4つ、5つ、またはそれ以上)の異なるタイプのコードは、異なる複数の相互排他的なセット(例えば、複数の整数範囲)の許可し得るRTR情報を任意選択で有してもよい。例えば、特定の例示的一実施形態において、複数のRTR命令に対する6つの異なる相互排他的なセット(例えば、複数の整数範囲)の許可し得るRTR情報が、任意選択で使用されてもよい。例えば、第1の範囲の複数の整数値は、複数のユーザアプリケーションのRTR命令に使用されてもよく、第2の異なる範囲の複数の値は、複数のユーザライブラリのRTR命令に使用されてもよく、第3のなおも異なる範囲の複数の値は、複数のシステムアプリケーションのRTR命令に使用されてもよく、第4のなおも異なる範囲の複数の値は、複数のシステムライブラリのRTR命令に使用されてもよく、第5のなおも異なる範囲の複数の値は、複数のデバイスドライバのRTR命令に使用されてもよく、第6のなおも異なる範囲の複数の値は、オペレーティングシステムカーネルの複数のRTR命令に使用されてもよい。これは、必須ではない図示的な一例にすぎないことを理解されたい。
本実施形態において、許可し得るRTR情報は、複数のリターンターゲット命令にではなく、複数のRTRリターン命令に割り当てられ、および/またはこれについて統制されることに留意されたい。一例として、ユーザレベルアプリケーションは、ユーザレベルアプリケーションに対して許可されない(例えば、これに代えて、オペレーティングシステムのために予約される)RTR情報(例えば、値)を有するRTRリターン命令を含むことを許可されないことがある。しかし、ユーザレベルコードは、オペレーティングシステムのために予約されるRTR情報に等しいか、一致し、または相補的なRTR情報(例えば、値)を伴うリターンターゲット命令(例えば、ENDRETK命令)を有することを許可されることがある。このように、ユーザレベルアプリケーションは、オペレーティングシステムのために予約されたRTR情報を伴うRTRリターン命令を有するオペレーティングシステムプロシージャを呼び出し、リターンは、補助RTR情報を伴うリターンターゲット命令を有するユーザレベルアプリケーションに許可され得る。
図7は、コードを分析する方法786の実施形態のブロックフロー図である。コード分析は、コードが、複数のRTRリターン命令のどのRTR情報が許容し得るまたは許可可能かを統制する複数のポリシーまたはルールを満たすか否かを判断するべく使用され得る。いくつかの実施形態において、本方法は、コード分析システムにより実行され得る。例えば、いくつかの実施形態において、コード分析システムは、アプリケーション開発者が複数のルールまたはポリシーに従ってRTR情報を割り当てたことを検証するべく分析を行う、アプリケーションストア(例えば、App Store)または他のデジタル配信プラットフォームの複数のモジュールであり得る。別の例として、コード分析システムは、1または複数のオペレーティングシステム、仮想マシンモジュール、または他の特権レベルソフトウェアモジュールを含み得る。なおも別の例として、マイクロコードおよび/またはハードウェア等のプロセッサのロジックは、本方法を実行し得る。
本方法は、ブロック787で第1のタイプのコードを受信する段階を備える。例えば、コード受信モジュールは、コードを受信し得る。本方法は、ブロック788で、第1のタイプのコードの複数のRTRリターン命令が、第1のタイプのコードについては許可されるが、1または複数の他のタイプのコードについては許可されないRTR情報のみを示すか否かを判断する段階を備える。コードのタイプは、すでに言及したいずれのものであってもよい。これは、前述の相互排他的な複数のセットまたは範囲のRTR情報のいずれかを用いる段階を備え得る。決定が「いいえ」の場合、本方法は、ブロック789に進み、RTR情報は、複数のポリシーまたはルールを満たさないと判断される。そうでない場合、決定が「はい」であれば、本方法は、ブロック790に進み、RTR情報は、複数のポリシーまたはルールを満たすと判断される。一例として、複数のルールまたはポリシーを満すようにRTR情報が修正されない限り、デジタル配信プラットフォームモジュールは、ブロック789に応答してコードを検証しないと決定してもよい。別の例として、オペレーティングシステムモジュールは、ブロック789に応答してコードが起動することを可能にしないと決定してもよい。
図8は、コードを分析する方法891の別の実施形態のブロックフロー図である。いくつかの実施形態において、本方法は、コード分析システムにより実行され得る。例えば、いくつかの実施形態において、コード分析システムは、アプリケーションストア(例えば、App Store)または他のデジタル配信プラットフォームのモジュールであってもよい。別の例として、コード分析システムは、1または複数の特権レベルソフトウェアモジュールを含み得る。
本方法は、ブロック892でコードを受信する段階を備える。例えば、コード受信モジュールは、コードを受信し得る。本方法は、ブロック893で、RTRリターン命令およびリターンターゲット命令の意図される補助ペアを示すメタデータを受信する段階を任意選択で備えてもよい。いくつかの実施形態において、コード分析システムは、一致または互換性RTR情報を有する、RTRリターン命令およびリターンターゲット命令の意図される補助ペアが識別されるように要求し得る。例えば、考慮および検討のために複数のアプリケーションまたはコードが提出されるとき、および/または承認される前に、アプリケーションストア(例えば、App Store)または他のデジタル配信プラットフォームのコード分析システムは、そのような識別を要求してもよい。アプリケーション開発者は、アプリケーションまたはコードと共にRTRリターン命令およびリターンターゲット命令のこれらの意図される補助ペアを示すメタデータを提出する必要があることがある。別の例としては、1または複数の特権レベルソフトウェアモジュールは、アプリケーション呼び出し時にそのようなメタデータまたは識別を要求し得る。また、そのような情報は、複数の潜在的な攻撃に対する分析を向上させるべく使用されてもよい。
本方法は、ブロック894で、意図される補助RTRリターン命令およびリターンターゲット命令の少なくとも1つのペアに対するRTR情報を変更しつつ、RTR情報が相補的に留まることを可能にする段階を備える。いくつかの実施形態において、コード分析システムまたはモジュールは、互換性RTRリターン命令およびリターンターゲット命令の意図されるペアのうち、少なくとも1つ、選択的にはいくつか、大部分、または全てに新しいか、または異なるRTR情報(例えば、複数の値)を割り当てるべく、複数の指示またはメタデータを使用し得る。例えば、RTRリターン命令およびその識別済みリターンターゲット命令のRTR情報は、依然として互換性があるが、以前とは異なるRTR情報を有するように変更されてもよい。一例として、RET17とENDRET17のペアは、RET233とENDRET233のペアに変更されてもよい。
これは、複数の異なる実施形態において異なる様式で行われ得る。一態様において、システムまたはモジュールは、全てのセットのRTR情報間に十分なレベルのダイバシティまたはエントロピー(例えば、閾値を少なくとも満たすRTR情報の同一ペアに対する差異の比率)が存在することを確認し得る。極端な例として、コードが全てのRTRリターン命令およびリターンターゲット命令の複数のペアに対して同一のRTR情報を使用した場合、RTR情報の互換性に対する確認の値は、減少し得る。システムまたはモジュールが、同一のRTR情報を有する、あまりに多くの意図されるペアの互換性命令(例えば、閾値を超える)が存在することを検出する場合、RTR情報のうちいくつかを変更し、プロセッサが許可する、複数の異なる可能なリターンターゲット制御移動の数を減少させることを決定し得る。メタデータは、この目的のために使用されてもよい。これは、いくつかの隠しガジェットを取り除くのに役立ち得る。これは、デジタル配信プラットフォームのシステムまたはモジュール、オペレーティングシステムモジュール等により行われてもよい。
別の態様において、複数の互換性命令のうちいくつか、大部分、または全ての意図されるペアのRTR情報は、ダイバシティの確認があるか否かに拘わらず、任意選択で(例えば、置換アルゴリズム等により疑似ランダム的に)変更され得る。これは、複数の異なるペアに対するRTR情報をミックスまたはシャッフルするのに役立ち、それにより、同一の互換性RTR情報を有するように作成された複数の隠しガジェットを阻止するのに役立ち得る。例えば、具体的な一実施形態において、特権レベルソフトウェアモジュール(例えば、オペレーティングシステムモジュール、仮想マシンモニタモジュール等)は、アプリケーションまたはコードが呼び出され、またはロードされるときに、複数の命令のうちいくつか、大部分、または全ての指示または意図されるペアに新しいか、または異なるRTR情報を割り当ててもよい。別の特定の実施形態において、(例えば、デジタル配信プラットフォームまたはオペレーティングシステムの)モジュールは、コードダウンロード時(例えば、アプリケーションがダウンロードされるとき)に複数の命令のうちいくつか、大部分、または全ての指示または意図されるペアに新しいか、または異なるRTR情報を割り当ててもよい。
また、RTR情報に対して更なる制限を課すなおも他の複数の様式が企図される。例えば、いくつかの実施形態において、モジュール(例えば、デジタル配信プラットフォームまたは特権ソフトウェアのモジュール)は、許容し得るまたは許可可能にするべく、異なるか、またはユニークな複数のセットのRTR情報が、複数の異なるRTRリターン命令のそれぞれに使用されることを統制する複数のポリシーまたはルールを課すことができる。例えば、各RTRリターン命令は、異なる値(例えば、異なる整数または定数)を有するように権限付与され得る。RTR情報の量(例えば、複数のビット数)は、これら全ての異なる値を提供するのに十分であり得る。RTR情報の特定の量は、特定の実装に依存する。
いくつかの実施形態において、本明細書において開示される複数のRTRリターン命令および複数のリターンターゲット命令は、定義されず、および/または違法なコードである複数の新しい異なるオペコードを付与され得る。換言すれば、これらのオペコードは、RTRリターン命令およびリターンターゲット命令を命令セットに導入する前のプロセッサの命令セットには存在しないであろう。
他の複数の実施形態において、本明細書において開示される複数のRTRリターン命令および/またはリターンターゲット命令は、レガシー命令のものと同一であるか、および/またはレガシー命令のセットについて定義された複数のオペコードを付与され得る。これは、これらの命令がレガシーハードウェア上で起動することを可能にし得る。一実施形態において、RTR情報(例えば、K)が既存のプロシージャからのリターン命令(例えば、RET命令)に対する即値またはサフィックスになるように、リターンターゲット命令(例えば、RETK命令)は、エンコードされ得る。例えば、インテル(登録商標)アーキテクチャにおいて、プロシージャからのnearリターン命令は、1バイト命令C3である。RTR情報(例えば、K)は、命令がレガシーハードウェア上で起動することができるように、C3命令の最後に添付されてもよい。古いハードウェアは、C3をプロシージャからのレガシーリターン命令として解釈し、次のRTR情報(例えば、K)を無視するからである。レガシーハードウェアは、RTR情報(例えば、K)を、無視してもよいか、または少なくとも使用する必要のないサフィックスとみなし得る。対照的に、新しいハードウェア上では、RTR情報(例えば、K)は、プロセッサにより、複数の制御フロー移動を条件付けるべく使用されるRTR情報を提供する即値とみなされ得る。ここでリターンターゲット命令を参照すると、一実施形態において、リターンターゲット命令(例えば、ENDRETK命令)は、レガシー命令のセットにおけるノーオペレーション(NOP)の合法または定義済みインスタンスとしてエンコードされ得る。このように、レガシーハードウェアは、単にNOPとして扱われるので、リターンターゲット命令(例えば、ENDRETK命令)を処理し得る。対照的に、新しいハードウェア上では、リターンターゲット命令(例えば、ENDRETK命令)は、本明細書の他の箇所で説明されるRTR情報を提供するべく使用され得る。
他の複数の実施形態において、レガシー命令のオペコードは、任意選択で再利用され得る。例えば、これは、一般に現在の環境において使用されず、および/または軽視される処理にあるレガシー命令に対して行われてもよい。一例として、インテル(登録商標)アーキテクチャ(例えば、C2またはCAオペコードを有する)におけるRETn命令は、任意選択で再利用されてもよい。RETn命令は、バイト数(例えば、imm16バイト)を指定するために、スタックからポップさせるべく使用される、16ビットの即値(imm16)を有する。現在、RETn命令は広範には使用されておらず、軽視されている。主として、現在、データをスタックに押し込み、そこからポップさせるのではなく、データを複数のレジスタ中に有することがより一般的だからである。プロセッサは、RETn命令が従来のように解釈または実装され得る第1の、またはレガシーモードを有し、バイト数を示し、スタックからポップさせるべく、16ビットの即値が使用される。また、プロセッサは、RETn命令がRTR情報(例えば、K値)を提供する16ビットの即値を用いて解釈または実装され得る、第2の、または新しいモードを有し得る。
いくつかの実施形態において、システムソフトウェアからの補助により、本明細書において開示される新規な複数のリターンターゲット命令を有する複数の新しい呼び出しプロシージャは、レガシープロシージャ(例えば、レガシー共有関数ライブラリのプロシージャ)を呼び出すことができ、本明細書において開示される複数のリターンターゲット制限をなおも利用することができる場合がある。例えば、レガシープロシージャにおいて、プロシージャからのレガシーリターン命令(例えば、C3オペコードを有するレガシーRET命令)が存在し、プロシージャからのレガシーリターン命令後の複数のビット、または1もしくは複数のバイトは、RTR情報(例えば、K値)として使用または解釈され得る。典型的には、レガシーリターン命令(例えば、C3 RET命令)後に、複数のビット、または1もしくは複数のバイトが存在するであろう。例えば、メモリは、(例えば、4KBの)複数のチャンクに割り当てられてもよい。リターン命令は、これらのチャンク内の別の箇所に存在することがある。典型的には、リターン命令が偶然にもチャンクの最後のバイトでなく、次のチャンクも割り当てられない限り、リターン命令後にいくつかのバイトが存在するであろう。例えば、アプリケーションが4KBをアドレス0x50000に、そして更に4KBをアドレス0x51000に割り当て、リターン命令がアドレス50FFFにある場合、次のバイトは、0x5100にあり、この次のバイトは、RTR情報として使用され得る。逆に、リターン命令が0x51FFFにあり、0x52000にあるメモリのチャンクが割り当てられない場合、RTR情報のための追加のバイトは存在しないであろう。つまり、いくつかの実施形態において、レガシープロシージャにおけるプロシージャからのレガシーリターン命令後の複数のビット、または1もしくは複数のバイト(例えば、ライブラリ)は、RTR情報として使用され得る。新しい呼び出しプロシージャは、補助RTR情報を伴う新規なリターンターゲット命令を有し得る。
システムソフトウェア(制御保護フォールト時に呼び出される)は、一定の複数の場合を処理し得る。例えば、システムソフトウェアは、レガシーリターン命令がコードスペースの最後に現れ、RET後の仮想アドレススペースに存在する複数のバイトが物理メモリにマッピングされない状況も処理し得る。また、システムソフトウェアは、ライブラリが複数の内部リターンを有し、レガシーライブラリが複数の不明な内部リターンターゲット命令である場合を、例えば、ホワイトリストを調べ、他のロジックを使用する等により、処理し得る。いくつかの実施形態において、システムソフトウェア(例えば、オペレーティングシステム)は、複数の古いプロシージャが呼び出され、本明細書において開示される複数の制限的制御のうちの一定のものが無視されることを可能にし得ることを認識する複数のポリシーを有し得る。
複数の例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ
複数のプロセッサコアは、複数の異なる様式で、複数の異なる目的のために複数の異なるプロセッサにおいて実装され得る。例えば、そのような複数のコアの複数の実装としては、1)汎用計算のために意図される汎用インオーダコア、2)汎用計算のために意図される高性能の汎用アウトオブオーダコア、3)主としてグラフィックスおよび/またはサイエンティフィック(スループット)計算のために意図される特定用途用コアが挙げられ得る。複数の異なるプロセッサの実装としては、1)汎用計算のために意図される1もしくは複数の汎用インオーダコア、および/または汎用計算のために意図される1もしくは複数の汎用アウトオブオーダコアを含むCPU、および2)主としてグラフィックスおよび/またはサイエンティフィック(スループット)計算のために意図される1または複数の特定用途用コアを含むコプロセッサが挙げられ得る。そのような複数の異なるプロセッサは、複数の異なるコンピュータシステムアーキテクチャをもたらし、複数の異なるコンピュータシステムアーキテクチャとしては、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同一のパッケージにおける別個のダイ上のコプロセッサ、3)CPUと同一のダイ上のコプロセッサ(この場合、そのようなコプロセッサは、時に、統合グラフィックスおよび/もしくはサイエンティフィック(スループット)ロジック等の特定用途用ロジック、または特定用途用コア等と呼ばれる)、および4)同一のダイ上に、上述のCPU(時に、アプリケーションコアまたはアプリケーションプロセッサと呼ばれる)、上記のコプロセッサ、および更なる機能性を含み得るシステムオンチップが挙げられ得る。次に、複数の例示的なコアアーキテクチャが説明され、その後に、複数の例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
複数の例示的なコアアーキテクチャ
インオーダおよびアウトオブオーダコアのブロック図
図9Aは、本発明の複数の実施形態による、例示的なインオーダパイプラインおよび例示的なレジスタリネーム、アウトオブオーダ発行/実行パイプラインの双方を図示するブロック図である。図9Bは、本発明の複数の実施形態による、プロセッサ内に含まれるインオーダアーキテクチャコアの例示的な実施形態、および例示的なレジスタリネーム、アウトオブオーダ発行/実行アーキテクチャコアの双方を図示するブロック図である。図9A〜9Bにおける複数の実線のボックスは、インオーダパイプラインおよびインオーダコアを図示するが、複数の破線ボックスの任意選択の追加は、レジスタリネーム、アウトオブオーダ発行/実行パイプラインおよびコアを図示する。インオーダ態様がアウトオブオーダの態様のサブセットであることを考慮して、アウトオブオーダの態様が説明される。
図9Aにおいて、プロセッサパイプライン900は、フェッチステージ902、長さデコードステージ904、デコードステージ906、割り当てステージ908、リネームステージ910、スケジューリング(ディスパッチまたは発行としても知られる)ステージ912、レジスタ読み取り/メモリ読み取りステージ914、実行ステージ916、ライトバック/メモリライトステージ918、例外処理ステージ922、およびコミットステージ924を含む。
図9Bは、実行エンジンユニット950に結合されたフロントエンドユニット930を含むプロセッサコア990を示し、フロントエンドユニット930および実行エンジンユニット950の双方がメモリユニット970に結合される。コア990は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってもよい。なおも別の選択肢として、コア990は、例えば、ネットワークもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コア、グラフィックスコア等の特定用途用コアであってもよい。
フロントエンドユニット930は、命令キャッシュユニット934に結合された分岐予測ユニット932を含み、分岐予測ユニット932は、命令トランスレーションルックアサイドバッファ(TLB)936に結合され、命令トランスレーションルックアサイドバッファ936は、命令フェッチユニット938に結合され、命令フェッチユニット938は、デコードユニット940に結合される。デコードユニット940(またはデコーダ)は、複数の命令をデコードし、出力として1もしくは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を生成することができ、これらは、複数の元の命令からデコードされ、そうでなければこれらを反映し、あるいはこれらから派生する。デコードユニット940は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等が挙げられるが、これらに限定されない。一実施形態において、コア990は、複数の一定のマクロ命令に対するマイクロコードを(例えば、デコードユニット940、そうでなければフロントエンドユニット930内に)格納する、マイクロコードROMまたは他の媒体を含む。デコードユニット940は、実行エンジンユニット950内のリネーム/アロケータユニット952に結合される。
実行エンジンユニット950は、リタイアメントユニット954および1もしくは複数のスケジューラユニット956のセットに結合されたリネーム/アロケータユニット952を含む。スケジューラユニット956は、複数のリザベーションステーション、中央命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット956は、物理レジスタファイルユニット958に結合される。物理レジスタファイルユニット959のそれぞれは、1または複数の物理レジスタファイルを表し、それらのうちの異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、状態(例えば、実行される次の命令のアドレスである命令ポインタ)等、1または複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット958は、複数のベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供し得る。物理レジスタファイルユニット958は、リタイアメントユニット954と重なり、レジスタリネームおよびアウトオブオーダ実行が(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用いることにより、フューチャファイル、履歴バッファ、およびリタイアメントレジスタファイルを用いることにより、複数のレジスタのレジスタマップおよびプール等を用いることにより)実装され得る様々な様式を図示する。リタイアメントユニット954および物理レジスタファイルユニット958は、実行クラスタ960に結合される。実行クラスタ960は、1もしくは複数の実行ユニット962のセット、および1もしくは複数のメモリアクセスユニット964のセットを含む。複数の実行ユニット962は、様々なオペレーション(例えば、シフト、加算、減算、乗算)を、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に基づいて実行し得る。いくつかの実施形態は、複数の特定の関数または複数のセットの関数に専用のいくつかの実行ユニットを含み得るが、他の実施形態は、1つのみ実行ユニットまたは複数の実行ユニットを含み、それらの全てがあらゆる関数を実行し得る。スケジューラユニット956、物理レジスタファイルユニット958、および実行クラスタ960は、おそらくは複数であるものとして示される。複数の一定の実施形態は、複数の一定のタイプのデータ/オペレーションのための複数の別個のパイプライン(例えば、各々が、自身のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプライン。別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット964を有する複数の一定の実施形態が実装される)を作成するからである。別個の複数のパイプラインが使用される場合、これらのパイプラインのうち1または複数は、アウトオブオーダ発行/実行であり、残りはインオーダであり得ることを理解されたい。
複数のメモリアクセスユニット964のセットは、メモリユニット970に結合され、メモリユニット970は、レベル2(L2)キャッシュユニット976に結合されたデータキャッシュユニット974に結合されたデータTLBユニット972を含む。例示的な一実施形態において、複数のメモリアクセスユニット964は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含み、それらのそれぞれは、メモリユニット970におけるデータTLBユニット972に結合され得る。命令キャッシュユニット934は、メモリユニット970におけるレベル2(L2)キャッシュユニット976に更に結合される。L2キャッシュユニット976は、1または複数の他のレベルのキャッシュに、そして最終的にはメモリに結合される。
例として、例示的なレジスタリネーム、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン900を以下のように実装し得る。1)命令フェッチ939は、フェッチおよび長さデコードステージ902および904を実行する。2)デコードユニット940はデコードステージ906を実行する。3)リネーム/アロケータユニット952は、割り当てステージ909およびリネームステージ910を実行する。4)スケジューラユニット956は、スケジューリングステージ912を実行する。5)物理レジスタファイルユニット959およびメモリユニット970は、レジスタ読み取り/メモリ読み取りステージ914を実行し、実行クラスタ960は、実行ステージ916を実行する。6)メモリユニット970および物理レジスタファイルユニット959は、ライトバック/メモリライトステージ919を実行する。7)様々なユニットは、例外処理ステージ922に関与してもよく、8)リタイアメントユニット954および物理レジスタファイルユニット959は、コミットステージ924を実行する。
コア990は、本明細書において説明される命令を含む、1または複数の命令セット(例えば、x86命令セット(複数のより新しいバージョンを追加されたいくつかの拡張を伴う)、カリフォルニア州サニーベールのMIPS TechnologyのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスのARM命令セット(NEON等の複数の選択的追加拡張を伴う)をサポートし得る。一実施形態において、コア990は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより、パックドデータを用いて実行される多くのマルチメディアアプリケーションにより使用される複数のオペレーションを可能にする。
コアは、マルチスレッディング(2もしくはそれ以上の並列セットのオペレーションもしくはスレッドを実行する)をサポートし、タイムスライスマルチスレッド化、同時マルチスレッド化(1つの物理コアが、物理コアが同時に、マルチスレッド化する複数のスレッドのそれぞれに対する論理コアを提供する)、またはそれらの組み合わせ(例えば、タイムスライスフェチおよびデコード、ならびにインテル(登録商標)ハイパースレッド化技術等における以後の同時マルチスレッド化)を含む様々な様式でサポートし得ることを理解されたい。
レジスタリネームは、アウトオブオーダ実行の文脈において説明されるが、レジスタリネームは、インオーダアーキテクチャにおいて使用されてもよいことを理解されたい。プロセッサの図示される実施形態は、別個の命令および複数のデータキャッシュユニット934/974、ならびに共有L2キャッシュユニット976も含むが、複数の代替的な実施形態は、例えば、レベル1(L1)内部キャッシュまたは内部キャッシュの複数のレベル等、複数の命令およびデータの双方に対する1つの内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュ、ならびにコアおよび/もしくはプロセッサの外部にある外部キャッシュの組み合わせを含み得る。あるいは、キャッシュのすべては、コアおよび/またはプロセッサの外部にあってもよい。
具体的な例示的インオーダコアアーキテクチャ
図10A〜10Bは、コアが、チップにおけるいくつかのロジックブロックのうちの1つ(同一タイプおよび/または複数の異なるタイプの他のコアを含む)である、より具体的な例示的インオーダコアアーキテクチャのブロック図を図示する。複数のロジックブロックは、アプリケーションに応じて、高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を介していくつかの固定機能ロジック、メモリI/Oインターフェース、および他の必要なI/Oロジックと通信する。
図10Aは、本発明の複数の実施形態による、オンダイ相互接続ネットワーク1002、およびレベル2(L2)キャッシュ1004のローカルサブセットへの接続を伴うシングルプロセッサコアのブロック図である。一実施形態において、命令デコーダ1000は、パックドデータ命令セット拡張を用いるx86命令セットをサポートする。L1キャッシュ1006は、スカラユニットおよびベクトルユニットに至るキャッシュメモリへの複数の低レイテンシーアクセスを可能にする。一実施形態において(設計を簡略化するべく)、スカラユニット1008およびベクトルユニット1010は、別個の複数のレジスタセット(それぞれ、複数のスカラレジスタ1012および複数のベクトルレジスタ1014)を使用し、それらの間で転送されるデータは、メモリに書き込まれ、その後、レベル1(L1)キャッシュ1006からリードバックされる。本発明の代替的な複数の実施形態は、異なるアプローチ(例えば、1つのレジスタセットを使用し、またはライトバックおよびリードバックされることなく、2つのレジスタファイルの間で、データが転送されることを可能にする通信パスを含む)を使用し得る。
L2キャッシュ1004のローカルサブセットは、複数の別個のローカルサブセットに分割され、1プロセッサコア毎に1つのグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ1004の自身のローカルサブセットへの直接アクセスパスを有する。プロセッサコアにより読み取られるデータは、L2キャッシュサブセット1004内に格納され、自身の複数のローカルL2キャッシュサブセットにアクセスする他の複数のプロセッサコアと並列に迅速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、自身のL2キャッシュサブセット1004内に格納され、必要な場合に他の複数のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを保証する。リングネットワークは、双方向性であり、複数のプロセッサコア、L2キャッシュ、および他のロジックブロック等のエージェントがチップ内で互いに通信することを可能にする。各リングデータパスは、1方向毎に1012ビットワイドである。
図10Bは、本発明の複数の実施形態による、図10Aにおけるプロセッサコアの一部の拡大図である。図10Bは、L1キャッシュ1004のL1データキャッシュ1006A部分、ならびにベクトルユニット1010および複数のベクトルレジスタ1014に関する更なる詳細を含む。具体的には、ベクトルユニット1010は、16ワイドベクトル処理ユニット(VPU)(16ワイドALU1028を参照されたい)であり、これは、整数命令、単精度浮動命令、および倍精度浮動命令のうちの1または複数を実行する。VPUは、スウィズルユニット1020を用いる複数のレジスタ入力、複数の数値変換ユニット1022A〜Bを用いる数値変換、およびレプリケーションユニット1024を用いるメモリ入力に関するレプリケーションをスウィズルすることをサポートする。複数のライトマスクレジスタ1026は、複数のベクトル書き込みの結果をプレディケートすることを可能にする。
統合メモリコントローラおよびグラフィックスを有するプロセッサ
図11は、本発明の複数の実施形態による、2つ以上のコア、統合メモリコントローラ、および統合グラフィックスを有し得る、プロセッサ1100のブロック図である。図11における複数の実線のボックスは、シングルコア1102Aを有するプロセッサ1100、システムエージェント1110、1または複数のバスコントローラユニット1116のセットを図示するが、複数の破線ボックスの選択的追加は、複数のコア1102A〜N、システムエージェントユニット1110における1または複数の統合メモリコントローラユニット1114のセット、および特定用途用ロジック1108を有する代替的なプロセッサ1100を図示する。
従って、プロセッサ1100の複数の異なる実装は、1)統合グラフィックスおよび/またはサイエンティフィック(スループット)ロジック(1または複数のコアを含み得る)である特定用途用ロジック1108、および1または複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、2つの組み合わせ)である複数のコア1102A〜Nを用いるCPU、2)主としてグラフィックスおよび/またはサイエンティフィック(スループット)用に意図される多数の特定用途用コアである複数のコア1102A〜Nを用いるコプロセッサ、および3)多数の汎用インオーダコアである複数のコア1102A〜Nを用いるコプロセッサを含み得る。従って、プロセッサ1100は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループットのmany integrated core(MIC)コプロセッサ(30またはそれ以上のコアを含む)、エンベデッドプロセッサ等の汎用プロセッサ、コプロセッサ、または特定用途用プロセッサであってもよい。プロセッサは、1または複数のチップ上に実装されてもよい。プロセッサ1100は、例えば、BiCMOS、CMOS、またはNMOS等、いくつかの処理技術のいずれかを用いる1または複数の基板の一部であってもよく、および/またはその上に実装されてもよい。
メモリ階層は、複数のコア内の1または複数のレベルのキャッシュ、共有キャッシュユニット1106のセットまたは1もしくは複数、および複数の統合メモリコントローラユニット1114のセットに結合された外部メモリ(図示せず)を含む。複数の共有キャッシュユニット1106のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)等の1または複数の中間レベルのキャッシュ、キャッシュの他の複数のレベル、最後のレベルのキャッシュ(LLC)、および/またはこれらの組み合わせを含み得る。一実施形態において、リングベースの相互接続ユニット1112は、統合グラフィックスロジック1108、複数の共有キャッシュユニット1106のセット、およびシステムエージェントユニット1110/統合メモリコントローラユニット1114を相互接続し、複数の代替的な実施形態は、そのような複数のユニットを相互接続する、任意の数の周知技術を使用し得る。一実施形態において、コヒーレンシは、1もしくは複数のキャッシュユニット1106と複数のコア1102A〜Nとの間で維持される。
いくつかの実施形態において、複数のコア1102A〜Nのうち1または複数は、マルチスレッド化することができる。システムエージェント1110は、複数のコア1102A〜Nを調整および操作するそれらのコンポーネントを含む。システムエージェントユニット1110は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでもよい。PCUは、複数のコア1102A〜Nおよび統合グラフィックスロジック1108の電力状態を調整するのに必要とされるロジックおよび複数のコンポーネントであってもよく、またはこれらを含んでもよい。ディスプレイユニットは、1または複数の外部接続ディスプレイを駆動するためのものである。
複数のコア1102A〜Nは、アーキテクチャ命令セットの観点からは同種または異種であり得る。つまり、複数のコア1102A〜Nのうち2またはそれ以上は、同一の命令セットを実行することができるが、他のものは、その命令セットのサブセット、または異なる命令セットのみを実行し得る。
複数の例示的なコンピュータアーキテクチャ
図12〜15は、複数の例示的コンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯用情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯式メディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスのための当技術分野で既知の他の複数のシステム設計および構成も、好適である。一般に、本明細書において開示されるプロセッサおよび/または他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが、概ね好適である。
ここで図12を参照すると、本発明の一実施形態による、システム1200のブロック図が示される。システム1200は、1または複数のプロセッサ1210、1215を含み、1または複数のプロセッサ1210、1215は、コントローラハブ1220に結合され得る。一実施形態において、コントローラハブ1220は、グラフィックスメモリコントローラハブ(GMCH)1290および入力/出力ハブ(IOH)1250(複数の別個のチップ上にあり得る)を含む。GMCH1290は、メモリコントローラおよびグラフィクスコントローラを含み、これらにメモリ1240およびコプロセッサ1245が結合される。IOH1250は、入力/出力(I/O)デバイス1260をGMCH1290に結合する。あるいは、メモリおよび複数のグラフィクスコントローラの1つまたは双方は、(本明細書において説明されるように)プロセッサ内に統合され、メモリ1240およびコプロセッサ1245は、プロセッサ1210に直接に結合され、シングルチップ内のコントローラハブ1220は、IOH1250と結合される。
複数の追加のプロセッサ1215の選択的性質は、図12において破線で示される。各プロセッサ1210、1215は、本明細書において説明される複数の処理コアのうち1または複数を含み、いくつかのバージョンのプロセッサ1100であり得る。
メモリ1240は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、または2つの組み合わせであってもよい。少なくとも一実施形態については、コントローラハブ1220は、フロントサイドバス(FSB)等のマルチドロップバス、QuickPath相互接続(QPI)等のポイントツーポイントインターフェース、または類似の接続1295を介してプロセッサ1210、1215と通信する。
一実施形態において、コプロセッサ1245は、例えば、高スループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、エンベデッドプロセッサ等の特定用途用プロセッサである。一実施形態において、コントローラハブ1220は、統合グラフィックスアクセラレータを含み得る。
アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等を含む、性能の測定基準の範囲の観点において、物理リソース1210、1215の間には様々な差異が存在し得る。
一実施形態において、プロセッサ1210は、通常のタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令が、複数の命令に埋め込まれ得る。プロセッサ1210は、取り付けられたコプロセッサ1245により実行されるべきタイプであるものとして、これらのコプロセッサ命令を認識する。従って、プロセッサ1210は、コプロセッサバスまたは他の相互接続上で、これらのコプロセッサ命令(または複数のコプロセッサ命令を表す複数の制御信号)をコプロセッサ1245に発行する。コプロセッサ1245は、複数の受信済みコプロセッサ命令を受け取り、実行する。
ここで図13を参照すると、本発明の実施形態による第1のより具体的な例示的システム1300のブロック図が示される。図13に示されるように、マルチプロセッサシステム1300は、ポイントツーポイント相互接続システムであり、第1のプロセッサ1370、およびポイントツーポイント相互接続1350を介して結合される第2のプロセッサ1380を含む。プロセッサ1370および1380のそれぞれは、いくつかのバージョンのプロセッサ1100であり得る。本発明の一実施形態において、プロセッサ1370および1380はそれぞれ、プロセッサ1210および1215であるが、コプロセッサ1338は、コプロセッサ1245である。別の実施形態において、プロセッサ1370および1380はそれぞれ、プロセッサ1210およびコプロセッサ1245である。
統合メモリコントローラ(IMC)ユニット1372および1382をそれぞれ含む、プロセッサ1370および1380が示される。また、プロセッサ1370は、複数のバスコントローラユニットの一部として、ポイントツーポイント(P―P)インターフェース1376および1378を含む。同様に、第2のプロセッサ1380は、P−Pインターフェース1386および1388を含む。プロセッサ1370、1380は、複数のP―Pインターフェース回路1378、1388を用いて、ポイントツーポイント(P―P)インターフェース1350を介して情報を交換し得る。図13に示されるように、IMC1372および1382は、複数のプロセッサをそれぞれのメモリ、すなわち、メモリ1332およびメモリ1334に結合させるが、メモリ1332およびメモリ1334は、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る。
プロセッサ1370、1380はそれぞれ、ポイントツーポイントインターフェース回路1376、1394、1386、1398を用いて、個々のP−Pインターフェース1352、1354を介してチップセット1390と情報を交換し得る。チップセット1390は、任意選択で、高性能インターフェース1339を介してコプロセッサ1338と情報を交換してもよい。一実施形態において、コプロセッサ1338は、例えば、高スループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、エンベデッドプロセッサ等の特定用途用プロセッサである。
共有キャッシュ(図示せず)は、どちらかのプロセッサ内または双方のプロセッサの外側に含まれるが、P―P相互接続を介して複数のプロセッサとなおも接続され得、従って、プロセッサが低電力モードに置かれると、どちらかまたは双方のプロセッサのローカルキャッシュ情報は、共有キャッシュ内に格納され得る。
チップセット1390は、インターフェース1396を介して第1のバス1316に結合され得る。一実施形態において、第1のバス1316は、周辺構成要素相互接続(PCI)バス、またはPCI Expressバスまたは別の第3世代I/O相互接続バス等のバスであり得るが、本発明の範囲は、そのようには限定されない。
図13に示されるように、様々なI/Oデバイス1314は、第1のバス1316を第2のバス1320に結合するバスブリッジ1318と共に第1のバス1316に結合され得る。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、またはその他のプロセッサ等、1または複数の追加のプロセッサ1315は、第1のバス1316に結合される。一実施形態において、第2のバス1320は、低ピンカウント(LPC)バスであり得る。様々なデバイスは、一実施形態において、例えば、キーボードおよび/もしくはマウス1322、通信デバイス1327、ならびに複数の命令/コードおよびデータ1330を含み得るディスクドライブもしくは他の大容量ストレージデバイス等のストレージユニット1328を含む第2のバス1320に結合され得る。更に、オーディオI/O1324は、第2のバス1320に結合されてもよい。他の複数のアーキテクチャが可能であることに留意されたい。例えば、図13のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
ここで図14を参照すると、本発明の実施形態による、第2のより具体的な例示的システム1400のブロック図が示される。図13および14における複数の同一要素は、複数の同一の参照番号を有し、図13の複数の一定の態様は、図14の他の複数の態様を不明瞭にするのを避けるべく、図14から省略されている。
図14は、プロセッサ1370、1380が統合メモリおよびI/O制御ロジック(「CL」)1372および1382をそれぞれ含み得ることを図示する。従って、CL1372、1382は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図14は、メモリ1332、1334のみがCL1372、1382に結合されるのみならず、複数のI/Oデバイス1414も制御ロジック1372、1382に結合されることを図示する。複数のレガシーI/Oデバイス1415は、チップセット1390に結合される。
ここで図15を参照すると、本発明の実施形態による、SoC1500のブロック図が示される。図11における複数の類似の要素は、同一の参照番号を有する。また、複数の破線ボックスは、より高度なSoCにおける複数の選択的特徴である。図15において、相互接続ユニット1502は、1もしくは複数のコア202A〜Nおよび共有キャッシュユニット1106のセットを含むアプリケーションプロセッサ1510、システムエージェントユニット1110、バスコントローラユニット1116、統合メモリコントローラユニット1114、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得るコプロセッサ1520のセットまたは1もしくは複数、スタティックランダムアクセスメモリ(SRAM)ユニット1530、ダイレクトメモリアクセス(DMA)ユニット1532、および1または複数の外部ディスプレイを結合するディスプレイユニット1540に結合される。一実施形態において、コプロセッサ1520は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、エンベデッドプロセッサ等の特定用途用プロセッサを含む。
本明細書において開示されるメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装アプローチの組み合わせで実装され得る。本発明の複数の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリ、ならびに/または複数のストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを有する複数のプログラマブルシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装され得る。
図13で図示されるコード1330等のプログラムコードは、複数の命令を入力し、本明細書において開示される複数の関数を実行し、出力情報を生成するべく適用され得る。出力情報は、既知の様式で、1または複数の出力デバイスに適用され得る。本願において、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサ等のプロセッサを有するいずれのシステムも含む。
プログラムコードは、処理システムと通信するべく、ハイレベルプロシージャ型またはオブジェクト指向プログラミング言語で実装されてもよい。また、プログラムコードは、所望であれば、アセンブリまたは機械語で実装されてもよい。実際には、本明細書において説明される複数のメカニズムは、範囲において、いずれの特定のプログラミング言語にも限定されない。いずれの場合にも、言語は、コンパイル型またはインタープリタ型言語であってもよい。
少なくとも一実施形態の1または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体上に格納された複数の代表的命令により実装され得、複数の代表的命令は、機械により読み取られると、機械に、本明細書において説明される複数の技術を実行するロジックを作成させる。「IPコア」として知られたそのような複数の表現は、有形機械可読媒体上に格納され、様々な顧客、または実際にロジックまたはプロセッサを作製する複数の製造機械にロードする複数の製造設備に提供され得る。
そのような機械可読ストレージ媒体としては、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD―ROM)、書き換え可能コンパクトディスク(CD―RW)、および光磁気ディスク等、その他のタイプのディスクを含むストレージ媒体、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、および相変化メモリ(PCM)等の半導体デバイス、磁気もしくは光カード、または複数の電子的命令を格納するのに好適なその他のタイプの媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形な複数の構成の物品が挙げられ得るが、これらに限定されない。
従って、本発明の複数の実施形態は、本明細書において説明される複数の構造、回路、装置、プロセッサ、および/またはシステムの特徴を定義する、ハードウェア記述言語(HDL)等の複数の命令または設計データを含む、非一時的で有形の機械可読媒体も含む。そのような複数の実施形態は、プログラム製品とも呼ばれ得る。
エミュレーション(バイナリトランスレーション、コードモーフィング等を含む)
いくつかの場合に、命令変換器は、ソース命令セットからターゲット命令セットに、命令を変換するべく使用され得る。例えば、命令変換器は、命令を、コアにより処理される1または複数の他の命令にトランスレート(例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いる)、モーフィング、エミュレートし、そうでなければ変換し得る。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装され得る。命令変換器は、プロセッサ上にあってもよく、プロセッサから離れてもよく、または一部がプロセッサ上にあり、一部がプロセッサから離れてもよい。
図16は、本発明の複数の実施形態による、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の使用を対比するブロック図である。図示される実施形態において、命令変換器は、ソフトウェア命令変換器であるが、別法では、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装され得る。図16は、x86コンパイラ1604を用いてコンパイルされ、少なくとも1つのx86命令セットコア1616を用いるプロセッサによりネイティブに実行され得るx86バイナリコード1606を生成し得る、ハイレベル言語1602のプログラムを示す。少なくとも1つのx86命令セットコア1616を用いるプロセッサは、少なくとも1つのx86命令セットコアを用いるインテル(登録商標)プロセッサと実質的に同一の結果を実現するべく、(1)インテル(登録商標)x86命令セットコアの命令セットの実質的部分、または(2)少なくとも1つのx86命令セットコアを用いるインテル(登録商標)プロセッサ上で起動することを目的とする、複数のオブジェクトコードバージョンの複数のアプリケーションまたは他のソフトウェアを互換的に実行し、そうでなければ処理することにより、少なくとも1つのx86命令セットコアを用いるインテル(登録商標)プロセッサと実質的に同一の複数の機能を実行し得るいずれのプロセッサも表す。x86コンパイラ1604は、追加のリンケージ処理を用い、もしくは用いずに、少なくとも1つのx86命令セットコア1616を用いるプロセッサ上で実行され得る、x86バイナリコード1606(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図16は、代替的な命令セットコンパイラ1608を用いてコンパイルされ、少なくとも1つのx86命令セットコア1614を用いないプロセッサ(例えば、カルフォルニア州サニーベールのMIPS TechnologyのMIPS命令セットを実行し、および/またはカリフォルニア州サニーベールのARMホールディングスのARM命令セットを実行する複数のコアを用いるプロセッサ)によりネイティブに実行され得る、代替的な命令セットバイナリコード1610を生成し得る、ハイレベル言語1602のプログラムを示す。命令変換器1612は、x86バイナリコード1606を、x86命令セットコア1614を用いないプロセッサによりネイティブに実行され得るコードに変換するべく、使用される。この変換済みコードは、代替的な命令セットバイナリコード1610と同一である可能性は低い。これを行うことができる命令変換器は、作製するのが困難なためである。しかし、変換済みコードは、汎用オペレーションを遂行し、代替的な命令セットの複数の命令からなるであろう。従って、命令変換器1612は、エミュレーション、シミュレーション、またはその他の処理により、x86命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがx86バイナリコード1606を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
本明細書において説明される装置のいずれかについて説明される複数の構成要素、特徴、および詳細は、また、そのような装置により、および/またはそのような装置と共に実行される、本明細書において説明される複数の方法のいずれかにおいて任意選択で使用され、および/またはこれに適用され得る。本明細書において説明されるプロセッサのいずれかは、本明細書において開示される複数のコンピュータシステムまたは他のシステムのいずれかに含まれ得る。いくつかの実施形態において、複数の命令は、本明細書において開示される複数の命令フォーマットの複数の特徴または詳細を有し得るが、これは必須ではない。
明細書および特許請求の範囲において、「結合される」および/または「接続される」という用語は、それらの派生語と共に、使用されることがある。これらの用語は、互いの同義語として意図されない。むしろ、複数の実施形態において、「接続される」は、2またはそれ以上の要素が互いに直接物理的に、および/または電気的に接触していることを示すべく使用され得る。「結合される」は、2またはそれ以上の要素が互いに直接物理的に、および/または電気的に接触していることを意味し得る。しかし、「結合された」は、2またはそれ以上の要素が互いに直接接触しないが、互いに協働し、または相互作用することも意味し得る。例えば、リターンターゲット制限ユニットは、1または複数の介在部品を介してデコードユニットと結合され得る。複数の図面において、複数の矢印は、複数の接続および結合を示すべく使用される。
「および/または」という用語が使用されることがある。本明細書において使用されるように、「および/または」という用語は、一方もしくは他方、または双方を意味する(例えば、Aおよび/またはBは、AもしくはB、またはAおよびBの双方を意味する)。
上記の説明において、複数の実施形態の完全な理解を提供するべく、複数の具体的な詳細が記載される。しかし、他の複数の実施形態は、これらの具体的な詳細のいくつかを用いることなく実施され得る。本発明の範囲は、上記で提供された複数の具体的な例により決定されるのではなく、以下の特許請求の範囲により決定されるものである。他の複数の例において、複数の周知の回路、構造、デバイス、およびオペレーションは、説明の理解を不明瞭にするのを避けるべく、ブロック図の形式で、および/または詳細なしで示されている。適切とみなされる場合には、複数の参照番号、または複数の参照番号の最後の部分が、複数の図面中で反復され、対応する、または類似の複数の要素を示し、複数の要素は、特定され、そうでなければ明白に明らかでない限り、任意選択で類似または同一の複数の特性を有し得る。
様々なオペレーションおよび方法が説明されている。複数の方法のいくつかは、フロー図において、比較的基本の形態で記載されているが、複数のオペレーションが、任意選択で複数の方法に追加され、および/またはこれらから取り除かれてもよい。加えて、複数のフロー図は、複数の実施形態による、複数のオペレーションの特定の順序を示すが、その順序は、例示的である。複数の代替的実施形態は、異なる順序で複数のオペレーションを実行し、一定の複数のオペレーションを組み合わせ、一定の複数のオペレーションを重複させるなどすることができる。
一定の複数のオペレーションは、ハードウェアコンポーネントにより実行されてもよく、または複数のオペレーションを実行する複数の命令を用いてプログラミングされた機械、回路、またはハードウェアコンポーネント(例えば、プロセッサ、プロセッサの一部、回路等)を生じさせ、および/またはもたらすべく使用され得る機械実行可能、または回路実行可能な複数の命令で実施されてもよい。また、複数のオペレーションは、任意選択で、ハードウェアおよびソフトウェアの組み合わせにより実行されてもよい。プロセッサ、機械、回路、またはハードウェアは、命令を実行および/または処理し、命令に応答して結果を格納するように動作可能な、具体的もしくは特定の回路もしくは他のロジック(例えば、ファームウェアおよび/またはソフトウェアと潜在的に組み合わされるハードウェア)を含んでもよい。
いくつかの実施形態は、機械可読媒体を含む製造物(例えば、コンピュータプログラム製品)を含む。媒体は、機械により可読な形式の情報を提供し、例えば、格納するメカニズムを含み得る。機械可読媒体は、機械により実行されたときおよび/または場合に、機械に、本明細書において開示される複数のオペレーション、方法、または技術のうち1つを実行させ、および/またはこれを実行する機械をもたらさせるように動作可能な命令または複数の命令のシーケンスを提供し、または機械可読媒体上に格納させ得る。機械可読媒体は、本明細書において開示される複数の命令の複数の実施形態の1または複数を格納し、そうでなければ提供し得る。
いくつかの実施形態において、機械可読媒体は、有形および/または非一時的機械可読媒体を含み得る。例えば、有形および/または非一時的機械可読媒体としては、フロッピー(登録商標)ディスク、光ストレージ媒体、光ディスク、光データストレージデバイス、CD―ROM、磁気ディスク、光磁気ディスク、リードオンリメモリ(ROM)、プログラマブルROM(PROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データストレージ材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイス等が挙げられ得る。非一時的機械可読媒体は、一時的伝播信号からならない。
好適な複数の機械の例としては、汎用プロセッサ、特定用途用プロセッサ、命令処理装置、デジタルロジック回路、集積回路等が挙げられるが、これらに限定されない。好適な複数の機械のなおも他の例としては、プロセッサ、命令処理装置、デジタルロジック回路、または集積回路を含む、コンピューティングデバイスまたは他の電子デバイスが挙げられる。そのような複数のコンピューティングデバイスおよび電子デバイスの例としては、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス(例えば、ルータおよびスイッチ)、モバイルインターネットデバイス(MID)、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、およびビデオゲームコントローラが挙げられるが、これらに限定されない。
本明細書全体での「一実施形態」、「実施形態」、「1または複数の実施形態」、「いくつかの実施形態」への言及は、例えば、特定の特徴が本発明の実施に含まれ得るが、含まれることを必ずしも要求されないことを示す。同様に、説明において、様々な特徴は、時に、本開示を一連で説明し、様々な発明の態様の理解に役立つ目的のために、単一の実施形態、図面、またはそれらの説明に分類される。しかし、開示の本方法は、本発明が各請求項において明示的に列挙するよりも多くの特徴を要求するとの意図を反映するものとは解釈されるものではない。むしろ、以下の特許請求の範囲が反映するように、発明の複数の態様は、単一の開示される実施形態の全ての特徴よりも少ないものに存する。従って、詳細な説明に従う特許請求の範囲は、各請求項が本発明の別個の実施形態としてそれ自身存在する状態で、この詳細な説明に明示的に組み込まれる。
例示的な複数の実施形態
以下の複数の例は、更なる複数の実施形態に関する。複数の例における具体的事柄は、1または複数の実施形態のいずれの箇所でも使用し得る。
例1は、プロシージャからのリターンターゲット制限リターン(RTRリターン)命令をデコードするデコードユニットを含むプロセッサである。プロセッサは、デコードユニットと結合され、RTRリターン命令に応答して、RTRリターン命令による、RTRリターン命令に対応するリターンアドレスにおける命令への制御フロー移動の試みを制限するか否かを決定するリターンターゲット制限ユニットも備える。決定は、リターンアドレスにおける命令のタイプのRTRリターン命令に対する互換性に基づき、RTRリターン命令の第1のリターンターゲット制限情報(RTR情報)のリターンアドレスにおける命令の第2のRTR情報に対する互換性に基づく。また、プロセッサは、リターンターゲット制限ユニットおよびデコードユニットと結合された制御フロー移動ユニットを含み、制御フロー移動ユニットは、リターンターゲット制限ユニットが試みを制限しないことを決定すると、RTRリターン命令に応答して、リターンアドレスにおける命令に制御フローを移動させる。
例2は、例1のプロセッサを備え、リターンターゲット制限ユニットは、第1のRTR情報に対応する第1の値が第2のRTR情報に対応する第2の値と一致する場合に、試みを制限しないことを決定し、第1の値が第2の値と一致しない場合に、試みを制限することを決定する。
例3は、例2のプロセッサを備え、リターンターゲット制限ユニットは、第1の値が第2の値に等しい場合に、試みを制限しないことを決定し、第1の値が第2の値に等しくない場合に、試みを制限することを決定する。
例4は、例1のプロセッサを備え、リターンターゲット制限ユニットは、リターンアドレスにおける命令のオペコードが、RTRリターン命令と互換性があるタイプの全ての命令に対応する5つ以下のオペコードのセットのうちの1つでない場合に、試みを制限することを決定する。複数の命令は、RTRリターン命令に対する潜在的に許可し得るリターンターゲットを表示するべく使用される。
例5は、例1のプロセッサを備え、RTRリターン命令は、第1のRTR情報を提供する即値を有し、リターンアドレスにおける命令は、第2のRTR情報を提供する即値を有する。
例6は、例1から5のいずれか1つのプロセッサを含み、リターンターゲット制限ユニットが試みを制限しないことを決定する場合に、プロセッサは、リターンアドレスにおける命令をノーオペレーションとして実行する。
例7は、例1から5のいずれか1つのプロセッサを備え、リターンターゲット制限ユニットが試みを制限することを決定する場合に、リターンターゲット制限ユニットは、例外、フォールト、および割り込みのうち1つを生じさせる。
例8は、例1のプロセッサを備え、デコードユニットは、即値、およびRTRリターン命令前の命令セットに存在したプロシージャからのレガシーリターン命令と同一であるオペコードを有する、RTRリターン命令をデコードする。プロシージャからのレガシーリターン命令は、元々、スタックからポップされる即値により示されるバイト数を生じさせるものであった。プロセッサは、第1のRTR情報に対する即値を使用する。
例9は、例1のプロセッサを備え、デコードユニットは、即値、およびRTRリターン命令前の命令セットに存在したプロシージャからのレガシーリターン命令と同一であるオペコードを有する、RTRリターン命令をデコードする。プロセッサは、即値が第1のRTR情報に対応する第1のモードと、即値が無視される第2のモードとを任意選択で有する。
例10は、プロシージャからのリターンターゲット制限リターン(RTRリターン)命令を受信する段階を備えるプロセッサにおける方法である。RTRリターン命令に応答して、RTRリターン命令による、RTRリターン命令に対応するリターンアドレスにおける命令への制御フロー移動の試みを制限する。制限は、リターンアドレスにおける命令のタイプにRTRリターン命令との互換性がないと判断する段階、およびRTRリターン命令により示された第1のリターンターゲット制限情報(RTR情報)にリターンアドレスにおける命令により示される第2のRTR情報との互換性がないと判断する段階のうち少なくとも1つに基づく。
例11は、例10の方法を備え、制限する段階は、RTRリターン命令のRTR情報がリターンアドレスにおける命令のRTR情報に等しくないとの判断に基づく。
例12は、例10の方法を備え、制限する段階は、リターンアドレスにおける命令のオペコードがRTRリターン命令と互換性があるタイプの全ての命令に対応する、5つ以下のオペコードのセットのうちの1つではないとの判断に基づく。
例13は、例10の方法を備え、受信する段階は、第1のRTR情報を提供する即値を有するRTRリターン命令を受信する段階を有する。
例14は、第1のタイプのコードを受信するコード受信モジュールを含む、コード分析システムである。コード分析モジュールは、コード受信モジュールに結合され、第1のタイプのコードにおける全てのプロシージャからのリターンターゲット制限リターン(RTRリターン)命令が、第1のタイプについては許可されるが、1または複数の異なるタイプのコードについては許可されない、リターンターゲット制限情報(RTR情報)のみを示すか否かを判断する。
例15は、例14のコード分析システムを備え、第1のタイプは、非特権コード、および特権コードを含む1または複数の異なるタイプのコードを含む。
例16は、例14のコード分析システムを備え、第1のタイプは、ユーザレベルアプリケーションを有し、1もしくは複数の異なるタイプのコードは、複数のユーザレベルのライブラリコード、デバイスドライバコード、システムレベルライブラリコード、およびオペレーティングシステムコードを有する。
例17は、例14のコード分析システムを備え、コード分析モジュールは、第1のタイプのコードにおける全てのRTRリターン命令が第1の範囲にある値のRTR情報のみを示すか否かを判断し、第1の範囲は、1または複数の異なるタイプのコードに対応する1または複数の他の範囲と相互排他的である。
例18は、例14から17のいずれか1つのコード分析システムを備え、コード分析モジュールは、デジタル配信プラットフォームおよびオペレーティングシステムモジュールを有する。
例19は、例14から17のいずれか1つのコード分析システムを備え、コード分析モジュールは、オペレーティングシステムモジュールを有する。
例20は、コードを受信するコード受信モジュールを有するコード分析システムである。本システムは、コード受信モジュールと結合されたコード分析モジュールも備え、少なくとも1ペアのプロシージャからの補助リターンターゲット制限リターン(RTRリターン)命令およびリターンターゲット命令についてのリターンターゲット制限情報(RTR情報)を変更する。これは、補助RTRリターン命令およびリターンターゲット命令のペアのRTR情報を作成することが依然として相補的である場合に行われる。
例21は、例20のコード分析システムを備え、コード受信モジュールは、コードにおける補助RTRリターン命令およびリターンターゲット命令の複数のペアを示す、メタデータを更に受信する。補助RTRリターン命令およびリターンターゲット命令の各ペアについてのRTR情報を作成することが依然として相補的である場合に、コード分析モジュールは、補助RTRリターン命令およびリターンターゲット命令の各ペアについてRTR情報を変更する。
例22は、例20または21のいずれかのコード分析システムを備え、コード分析モジュールは、オペレーティングシステムモジュールを有する。
例23は、例20または21のいずれかのコード分析システムを備え、コード分析モジュールは、デジタル配信プラットフォームのモジュールを有する。
例24は、相互接続、および相互接続に結合されたプロセッサを含む、複数の命令を処理するシステムである。プロセッサは、プロシージャからのリターンターゲット制限リターン(RTRリターン)命令を受信する。RTRリターン命令に応答して、プロセッサは、RTRリターン命令を用いるリターンアドレスにおける命令タイプの互換性の欠如、およびリターンアドレスにおける命令を用いるRTRリターン命令の第1のリターンターゲット制限情報(RTR情報)の互換性の欠如のうち1つに基づいて、RTRリターン命令による、RTRリターン命令に対応するリターンアドレスにおける命令への制御フロー移動の試みを制限することを決定する。システムは、相互接続に結合されたダイナミックランダムアクセスメモリ(DRAM)も備える。
例25は、例24のシステムを備え、プロセッサは、RTRリターン命令の即値の値がリターンアドレスにおける命令の即値の値に等しくないことに基づいて、試みを制限することを決定する。試みを制限すると決定することに応答して、プロセッサは、フォールトおよび例外のうち1つを生じさせ得る。
例26は、非一時的機械可読媒体を有する製造物である。非一時的機械可読媒体は、複数の命令を格納する。複数の命令は、機械により実行されると、機械に、第1のタイプのコードにおける全てのプロシージャからのリターンターゲット制限リターン(RTRリターン)命令に関するリターンターゲット制限情報(RTR情報)を調査することを含む複数のオペレーションを実行させる。また、第1のタイプのコードにおける複数のRTRリターン命令が、第1のタイプのコードについては許可されるが、1または複数の異なるタイプのコードについては許可されないRTR情報のみを示すか否かを判断する。
例27は、例26の製造物を備え、複数の命令は、機械に、第1のタイプのコードにおける複数のRTR命令が、第1のタイプのコードについては許可されるが、1または複数の異なるタイプのコードについては許可されない第1の範囲における複数の値のみを示すか否かを判断させる。
例28は、例10から13のいずれかの方法を実行するように動作可能なプロセッサまたは他の装置である。
例29は、例10から13のいずれかの方法を実行する手段を備える、プロセッサまたは他の装置である。
例30は、例10から13のいずれかの方法を実行する複数のモジュール、複数のユニット、ロジック、回路、手段、またはこれらのいずれかの組み合わせを備える、プロセッサまたは他の装置である。
例31は、機械可読媒体を備える製造物であり、機械可読媒体は、任意選択で、プロセッサにより実行されるときおよび/または場合に、コンピュータシステムまたは他の機械が機械に、例10から13のいずれかの方法を実行させるように動作可能な命令を任意選択で格納し、そうでなければ提供する、非一時的機械可読媒体である。
例32は、相互接続と、相互接続と結合されたプロセッサと、例10から13のいずれかの方法を実行するように動作可能なダイナミックランダムアクセスメモリ(DRAM)、グラフィックスチップ、無線通信チップ、相変化メモリ、ならびにビデオカメラ、コンピュータシステム、または他の電子デバイスから選択される、相互接続と結合された少なくとも1つのコンポーネントを備える、コンピュータシステムまたは他の電子デバイスである。
例33は、本明細書において説明される1または複数のオペレーションまたはいずれかの方法を実質的に実行するように動作可能なプロセッサまたは他の装置である。
例34は、本明細書において説明される1または複数のオペレーションまたはいずれかの方法を実質的に実行する手段を備えるプロセッサまたは他の装置である。
例35は、本明細書において説明される複数の命令のいずれかを実質的に実行するプロセッサまたは他の装置である。
例36は、本明細書において説明される複数の命令のいずれかを実質的に実行する手段を備えるプロセッサまたは他の装置である。

Claims (25)

  1. プロシージャからのリターンターゲット制限リターン(RTRリターン)命令をデコードするデコードユニットと、
    前記デコードユニットに結合され、前記RTRリターン命令に応答して、リターンアドレスにおける命令のタイプの前記RTRリターン命令に対する互換性、および前記RTRリターン命令の第1のリターンターゲット制限情報(RTR情報)の前記リターンアドレスにおける前記命令の第2のRTR情報に対する互換性に基づいて、前記RTRリターン命令による、前記RTRリターン命令に対応する前記リターンアドレスにおける前記命令への制御フロー移動の試みを制限するか否かを決定するリターンターゲット制限ユニットと、
    前記リターンターゲット制限ユニットおよび前記デコードユニットと結合され、前記リターンターゲット制限ユニットが前記試みを制限しないことを決定すると、前記RTRリターン命令に応答して、前記リターンアドレスにおける前記命令に制御フローを移動する制御フロー移動ユニットとを備える、プロセッサ。
  2. 前記リターンターゲット制限ユニットは、前記第1のRTR情報に対応する第1の値が前記第2のRTR情報に対応する第2の値に一致する場合に、前記試みを制限しないことを決定し、前記第1の値が前記第2の値に一致しない場合に、前記試みを制限することを決定する、請求項1に記載のプロセッサ。
  3. 前記リターンターゲット制限ユニットは、前記第1の値が前記第2の値に等しい場合に、前記試みを制限しないことを決定し、前記第1の値が前記第2の値に等しくない場合に、前記試みを制限することを決定する、請求項2に記載のプロセッサ。
  4. 前記リターンターゲット制限ユニットは、前記リターンアドレスにおける前記命令のオペコードが、前記RTRリターン命令に対する潜在的に許可し得る複数のリターンターゲットを表示するべく用いられ、前記RTRリターン命令と互換性があるタイプの全ての命令に対応する、5つ以下のオペコードのセットのうちの1つでない場合に、前記試みを制限することを決定する、請求項1に記載のプロセッサ。
  5. 前記RTRリターン命令は、前記第1のRTR情報を提供する即値を有し、
    前記リターンアドレスにおける前記命令は、前記第2のRTR情報を提供する即値を有する、請求項1に記載のプロセッサ。
  6. 前記リターンターゲット制限ユニットが前記試みを制限しないことを決定する場合に、前記プロセッサは、前記リターンアドレスにおける前記命令をノーオペレーションとして実行する、請求項1から5のいずれか1項に記載のプロセッサ。
  7. 前記リターンターゲット制限ユニットが前記試みを制限することを決定する場合に、前記リターンターゲット制限ユニットは、例外、フォールト、および割り込みのうち1つを生じさせる、請求項1から5のいずれか1項に記載のプロセッサ。
  8. 前記デコードユニットは、即値、および前記RTRリターン命令前の命令セットに存在したプロシージャからのレガシーリターン命令と同一のオペコードを有する前記RTRリターン命令をデコードし、
    プロシージャからの前記レガシーリターン命令は、元々、前記即値により示されるバイト数をスタックからポップさせるものであり、
    前記プロセッサは、前記第1のRTR情報として前記即値を使用する、請求項1に記載のプロセッサ。
  9. 前記デコードユニットは、即値、および前記RTRリターン命令前の命令セットに存在したプロシージャからのレガシーリターン命令と同一のオペコードを有する前記RTRリターン命令をデコードし、
    前記プロセッサは、前記即値が前記第1のRTR情報に対応する第1のモードと、前記即値が無視される第2のモードとを有する、請求項1に記載のプロセッサ。
  10. プロセッサにおける方法であって、
    プロシージャからのリターンターゲット制限リターン(RTRリターン)命令を受信する段階と、
    リターンアドレスにおける命令のタイプに前記RTRリターン命令との互換性がないと判断することと、前記RTRリターン命令により示される第1のリターンターゲット制限情報(RTR情報)に前記リターンアドレスにおける前記命令により示される第2のRTR情報との互換性がないと判断することとのうち、少なくとも1つに基づいて、前記RTRリターン命令に応答して、前記RTRリターン命令による、前記RTRリターン命令に対応する前記リターンアドレスにおける前記命令への制御フロー移動の試みを制限する段階とを備える、方法。
  11. 前記制限する段階は、前記RTRリターン命令の前記RTR情報が、前記リターンアドレスにおける前記命令のRTR情報に等しくないとの判断に基づく、請求項10に記載の方法。
  12. 前記制限する段階は、前記リターンアドレスにおける前記命令のオペコードが、前記RTRリターン命令と互換性があるタイプの全ての命令に対応する5つ以下のオペコードのセットのうちの1つでないとの判断に基づく、請求項10に記載の方法。
  13. 前記受信する段階は、前記第1のRTR情報を提供する即値を有する前記RTRリターン命令を受信する段階を備える、請求項10に記載の方法。
  14. 複数の命令を処理するシステムであって、
    相互接続と、
    前記相互接続と結合され、プロシージャからのリターンターゲット制限リターン(RTRリターン)命令を受信し、前記RTRリターン命令に応答して、リターンアドレスにおける命令のタイプの前記RTRリターン命令に対する互換性の欠如、および前記RTRリターン命令の第1のリターンターゲット制限情報(RTR情報)の前記リターンアドレスにおける前記命令に対する互換性の欠如のうち1つに基づいて、前記RTRリターン命令による、前記RTRリターン命令に対応する前記リターンアドレスにおける前記命令への制御フロー移動の試みを制限することを決定するプロセッサと、
    前記相互接続に結合されたダイナミックランダムアクセスメモリ(DRAM)とを備える、システム。
  15. 前記プロセッサは、前記RTRリターン命令の即値の値が前記リターンアドレスにおける前記命令の即値の値に等しくないことに基づいて、前記試みを制限することを決定し、
    前記プロセッサは、前記試みを制限すると決定することに応答して、フォールトおよび例外のうち1つを生じさせる、請求項14に記載のシステム。
  16. 第1のタイプのコードを受信するコード受信モジュールと、
    前記コード受信モジュールに結合され、前記第1のタイプの前記コードにおける全てのプロシージャからのリターンターゲット制限リターン(RTRリターン)命令が、前記第1のタイプについては許可されるが、1または複数の異なるタイプのコードについては許可されないリターンターゲット制限情報(RTR情報)のみを示すか否かを決定するコード分析モジュールとを備える、コード分析システム。
  17. 前記第1のタイプは、非特権コードを含み、
    前記1または複数の異なるタイプのコードは、特権コードを含む、請求項16に記載のコード分析システム。
  18. 前記第1のタイプは、ユーザレベルアプリケーションを含み、
    前記1または複数の異なるタイプのコードは、複数のユーザレベルのライブラリコード、デバイスドライバコード、システムレベルライブラリコード、およびオペレーティングシステムコードを含む、請求項16に記載のコード分析システム。
  19. 前記コード分析モジュールは、前記第1のタイプの前記コードにおける全てのRTRリターン命令が第1の範囲にある複数の値のRTR情報のみを示すか否かを判断し、
    前記第1の範囲は、前記1または複数の異なるタイプのコードに対応する1または複数の他の範囲と相互排他的である、請求項16に記載のコード分析システム。
  20. コードを受信するコード受信モジュールと、
    前記コード受信モジュールに結合され、プロシージャからの補助リターンターゲット制限リターン(RTRリターン)命令およびリターンターゲット命令の少なくとも1つのペアのリターンターゲット制限情報(RTR情報)を作成することが、依然として相補的である場合に、前記補助RTRリターン命令および前記リターンターゲット命令の前記少なくとも1つのペアについて前記RTR情報を変更するコード分析モジュールとを備える、コード分析システム。
  21. 前記コード受信モジュールは、前記コードにおける補助RTRリターン命令およびリターンターゲット命令の複数のペアを示すメタデータを更に受信し、
    補助RTRリターン命令およびリターンターゲット命令の各ペアについての前記RTR情報を作成することが、依然として相補的である場合に、前記コード分析モジュールは、補助RTRリターン命令およびリターンターゲット命令の各ペアについてRTR情報を変更する、請求項20に記載のコード分析システム。
  22. コンピュータに、
    第1のタイプのコードにおける全てのプロシージャからのリターンターゲット制限リターン(RTRリターン)命令のリターンターゲット制限情報(RTR情報)を調査させる手順と、
    前記第1のタイプの前記コードにおける複数の前記RTRリターン命令が前記第1のタイプのコードについては許可されるが、1または複数の異なるタイプのコードについては許可されないRTR情報のみを示すか否かを判断する手順とを行わせる、プログラム。
  23. 前記第1のタイプの前記コードにおける複数の前記RTR命令が、前記第1のタイプの前記コードについては許可されるが、前記1または複数の異なるタイプの前記コードについては許可されない前記RTR情報のみを示すか否かを判断する前記手順は、前記第1のタイプの前記コードにおける複数の前記RTR命令が、前記第1のタイプの前記コードについては許可されるが、前記1または複数の異なるタイプの前記コードについては許可されない第1の範囲の複数の値のみを示すか否かを判断する手順を有する、請求項22に記載のプログラム。
  24. 請求項10から13のいずれか1項に記載の方法を実行する手段を備えるプロセッサ。
  25. 請求項10から13のいずれか1項に記載の方法を行わせるプログラム。
JP2015005715A 2014-03-28 2015-01-15 プロシージャからの複数のリターンターゲット制限リターン命令、プロセッサ、方法、およびシステム Expired - Fee Related JP5961288B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/229,822 US9703948B2 (en) 2014-03-28 2014-03-28 Return-target restrictive return from procedure instructions, processors, methods, and systems
US14/229,822 2014-03-28

Publications (2)

Publication Number Publication Date
JP2015191658A JP2015191658A (ja) 2015-11-02
JP5961288B2 true JP5961288B2 (ja) 2016-08-02

Family

ID=52630844

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015005715A Expired - Fee Related JP5961288B2 (ja) 2014-03-28 2015-01-15 プロシージャからの複数のリターンターゲット制限リターン命令、プロセッサ、方法、およびシステム

Country Status (7)

Country Link
US (1) US9703948B2 (ja)
JP (1) JP5961288B2 (ja)
KR (1) KR101691719B1 (ja)
CN (1) CN104951697B (ja)
DE (1) DE102015002124A1 (ja)
GB (1) GB2524618B (ja)
TW (1) TWI590096B (ja)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6690813B2 (ja) 2014-07-25 2020-04-28 インテル・コーポレーション 変換ルックアサイドバッファを用いた命令セットアグノスティックランタイムアーキテクチャの実施
US10353680B2 (en) * 2014-07-25 2019-07-16 Intel Corporation System converter that implements a run ahead run time guest instruction conversion/decoding process and a prefetching process where guest code is pre-fetched from the target of guest branches in an instruction sequence
US11281481B2 (en) 2014-07-25 2022-03-22 Intel Corporation Using a plurality of conversion tables to implement an instruction set agnostic runtime architecture
US9733909B2 (en) 2014-07-25 2017-08-15 Intel Corporation System converter that implements a reordering process through JIT (just in time) optimization that ensures loads do not dispatch ahead of other loads that are to the same address
US9904780B2 (en) * 2014-07-31 2018-02-27 Nec Corporation Transparent detection and extraction of return-oriented-programming attacks
EP3195177A1 (en) * 2014-09-17 2017-07-26 Irdeto B.V. Generating and executing protected items of software
US9501637B2 (en) * 2014-09-26 2016-11-22 Intel Corporation Hardware shadow stack support for legacy guests
JP6435834B2 (ja) * 2014-12-12 2018-12-12 富士通株式会社 命令実行制御装置、命令実行制御方法
US20160381050A1 (en) 2015-06-26 2016-12-29 Intel Corporation Processors, methods, systems, and instructions to protect shadow stacks
US9767292B2 (en) 2015-10-11 2017-09-19 Unexploitable Holdings Llc Systems and methods to identify security exploits by generating a type based self-assembling indirect control flow graph
US10437998B2 (en) * 2015-10-26 2019-10-08 Mcafee, Llc Hardware heuristic-driven binary translation-based execution analysis for return-oriented programming malware detection
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
CN105825086B (zh) * 2016-03-16 2018-07-24 西北大学 一种基于攻击树的rop防护方法
RU2634172C1 (ru) * 2016-06-02 2017-10-24 Акционерное общество "Лаборатория Касперского" Способ передачи управления между адресными пространствами
US9948185B2 (en) * 2016-06-10 2018-04-17 Dialog Semiconductor (Uk) Limited Fast-transient switching converter with type III compensation
US10423792B2 (en) * 2016-09-23 2019-09-24 Red Hat, Inc. Identifying exploitable code sequences
US10395033B2 (en) * 2016-09-30 2019-08-27 Intel Corporation System, apparatus and method for performing on-demand binary analysis for detecting code reuse attacks
PL3812900T3 (pl) * 2016-12-31 2024-04-08 Intel Corporation Systemy, sposoby i aparaty do obliczania heterogenicznego
US10607003B2 (en) 2017-06-29 2020-03-31 International Business Machines Corporation Mitigation of code reuse attacks by restricted indirect branch instruction
US11093605B2 (en) * 2018-06-28 2021-08-17 Cisco Technology, Inc. Monitoring real-time processor instruction stream execution
US12013935B2 (en) * 2019-03-05 2024-06-18 C2A-Sec, Ltd. Return-oriented programming protection
CN110378117B (zh) * 2019-06-21 2022-12-30 华为技术有限公司 控制流完整性检测方法、装置及系统
IT202100002642A1 (it) 2021-02-05 2022-08-05 Sk Hynix Inc Metodo implementato da un microcontrollore per gestire una istruzione nop e microcontrollore corrispondente
US20230098640A1 (en) * 2021-09-26 2023-03-30 Ceremorphic, Inc. Core Processor and Redundant Branch Processor with Control Flow Attack Detection

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09198258A (ja) 1996-01-19 1997-07-31 Nec Corp タスクスタックオーバーフロー検出回路
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
JP3552627B2 (ja) 2000-02-04 2004-08-11 インターナショナル・ビジネス・マシーンズ・コーポレーション スタック保護システム、コンピュータシステム、コンパイラ、スタック保護方法および記憶媒体
WO2002063465A2 (en) 2001-02-06 2002-08-15 Adelante Technologies B.V. Method and apparatus for handling interrupts
US7200740B2 (en) * 2001-05-04 2007-04-03 Ip-First, Llc Apparatus and method for speculatively performing a return instruction in a microprocessor
KR100505106B1 (ko) 2002-05-29 2005-07-29 삼성전자주식회사 강화된 보안 기능을 갖춘 스마트 카드
US7603704B2 (en) * 2002-12-19 2009-10-13 Massachusetts Institute Of Technology Secure execution of a computer program using a code cache
KR100777938B1 (ko) 2003-09-04 2007-11-21 싸이언스 파크 가부시키가이샤 부정 코드 실행의 방지 방법, 및 부정 코드 실행의 방지용 프로그램의 기록매체
US20050138263A1 (en) * 2003-12-23 2005-06-23 Mckeen Francis X. Method and apparatus to retain system control when a buffer overflow attack occurs
US20050154859A1 (en) * 2004-01-14 2005-07-14 Arm Limited Branch prediction in a data processing apparatus
CN1280713C (zh) * 2004-03-09 2006-10-18 中国人民解放军国防科学技术大学 双栈返回地址预测器设计方法
US7552477B1 (en) * 2005-02-23 2009-06-23 Symantec Corporation Detecting return-to-LIBC buffer overflows via dynamic disassembly of offsets
US8141163B2 (en) * 2007-07-31 2012-03-20 Vmware, Inc. Malicious code detection
US8341383B2 (en) 2007-11-02 2012-12-25 Qualcomm Incorporated Method and a system for accelerating procedure return sequences
JP2009230479A (ja) 2008-03-24 2009-10-08 Toshiba Microelectronics Corp マイクロプロセッサ
CN101727312B (zh) * 2009-01-22 2013-01-09 杭州中天微系统有限公司 一种支持自动纠错功能的返回地址栈实现方法
CN101819522B (zh) * 2009-03-04 2012-12-12 威盛电子股份有限公司 微处理器以及相关指令解析的方法
US8689201B2 (en) 2010-01-27 2014-04-01 Telcordia Technologies, Inc. Automated diversity using return oriented programming
CA2704863A1 (en) 2010-06-10 2010-08-16 Ibm Canada Limited - Ibm Canada Limitee Injection attack mitigation using context sensitive encoding of injected input
US20120151184A1 (en) 2010-12-10 2012-06-14 Daniel Shawcross Wilkerson Hard object: constraining control flow and providing lightweight kernel crossings
US8997218B2 (en) 2010-12-22 2015-03-31 F-Secure Corporation Detecting a return-oriented programming exploit
US8776223B2 (en) * 2012-01-16 2014-07-08 Qualcomm Incorporated Dynamic execution prevention to inhibit return-oriented programming
US9122792B2 (en) * 2013-05-17 2015-09-01 International Business Machines Corporation Step over operation for machine code function calls

Also Published As

Publication number Publication date
GB2524618A (en) 2015-09-30
KR101691719B1 (ko) 2016-12-30
TW201602827A (zh) 2016-01-16
KR20150112773A (ko) 2015-10-07
DE102015002124A1 (de) 2015-10-01
GB201500925D0 (en) 2015-03-04
CN104951697A (zh) 2015-09-30
TWI590096B (zh) 2017-07-01
GB2524618B (en) 2017-04-05
CN104951697B (zh) 2018-07-03
JP2015191658A (ja) 2015-11-02
US20150278516A1 (en) 2015-10-01
US9703948B2 (en) 2017-07-11

Similar Documents

Publication Publication Date Title
JP5961288B2 (ja) プロシージャからの複数のリターンターゲット制限リターン命令、プロセッサ、方法、およびシステム
US11656805B2 (en) Processors, methods, systems, and instructions to protect shadow stacks
TWI796031B (zh) 用於以在環移轉期間保護堆疊的處理器擴展的設備
KR102318740B1 (ko) 보호 영역에서의 메모리 초기화
JP6507435B2 (ja) 命令エミュレーションプロセッサ、方法、およびシステム
US11327755B2 (en) Fine grained control flow enforcement to mitigate malicious call/jump oriented programming
TWI556115B (zh) 有關控制流安全之二進制轉譯機制的處理器、系統、方法和裝置
TW201227394A (en) Security through opcode randomization
US9372988B2 (en) User controllable platform-level trigger to set policy for protecting platform from malware
US9185079B2 (en) Method and apparatus to tunnel messages to storage devices by overloading read/write commands
US11256807B2 (en) Mitigation of return-oriented programming exploits
US20170093578A1 (en) Methods and apparatus to provide isolated execution environments
US20110314303A1 (en) Computing device configured for operating with instructions in unique code
US20220197658A1 (en) Isa opcode parameterization and opcode space layout randomization
JP2021157766A (ja) シャドウスタックを効率的に管理および処理するための装置および方法
JP2023048100A (ja) Isaアクセス可能物理的複製不可能関数
TW202416122A (zh) 用以保護影子堆疊之處理器、方法、系統和指令

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160426

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160525

R155 Notification before disposition of declining of application

Free format text: JAPANESE INTERMEDIATE CODE: R155

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160624

R150 Certificate of patent or registration of utility model

Ref document number: 5961288

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees