(57)【特許請求の範囲】
【請求項１】
プロシージャからのリターンターゲット制限リターン（ＲＴＲリターン）命令をデコードするデコードユニットと、
前記デコードユニットに結合され、前記ＲＴＲリターン命令に応答して、リターンアドレスにおける命令のタイプの前記ＲＴＲリターン命令に対する互換性、および前記ＲＴＲリターン命令の第１のリターンターゲット制限情報（ＲＴＲ情報）の前記リターンアドレスにおける前記命令の第２のＲＴＲ情報に対する互換性に基づいて、前記ＲＴＲリターン命令による、前記ＲＴＲリターン命令に対応する前記リターンアドレスにおける前記命令への制御フロー移動の試みを制限するか否かを決定するリターンターゲット制限ユニットと、
前記リターンターゲット制限ユニットおよび前記デコードユニットと結合され、前記リターンターゲット制限ユニットが前記試みを制限しないことを決定すると、前記ＲＴＲリターン命令に応答して、前記リターンアドレスにおける前記命令に制御フローを移動する制御フロー移動ユニットとを備える、プロセッサ。
【請求項２】
前記リターンターゲット制限ユニットは、前記第１のＲＴＲ情報に対応する第１の値が前記第２のＲＴＲ情報に対応する第２の値に一致する場合に、前記試みを制限しないことを決定し、前記第１の値が前記第２の値に一致しない場合に、前記試みを制限することを決定する、請求項１に記載のプロセッサ。
【請求項３】
前記リターンターゲット制限ユニットは、前記第１の値が前記第２の値に等しい場合に、前記試みを制限しないことを決定し、前記第１の値が前記第２の値に等しくない場合に、前記試みを制限することを決定する、請求項２に記載のプロセッサ。
【請求項４】
前記リターンターゲット制限ユニットは、前記リターンアドレスにおける前記命令のオペコードが、前記ＲＴＲリターン命令に対する潜在的に許可し得る複数のリターンターゲットを表示するべく用いられ、前記ＲＴＲリターン命令と互換性があるタイプの全ての命令に対応する、５つ以下のオペコードのセットのうちの１つでない場合に、前記試みを制限することを決定する、請求項１に記載のプロセッサ。
【請求項５】
前記ＲＴＲリターン命令は、前記第１のＲＴＲ情報を提供する即値を有し、
前記リターンアドレスにおける前記命令は、前記第２のＲＴＲ情報を提供する即値を有する、請求項１に記載のプロセッサ。
【請求項６】
前記リターンターゲット制限ユニットが前記試みを制限しないことを決定する場合に、前記プロセッサは、前記リターンアドレスにおける前記命令をノーオペレーションとして実行する、請求項１から５のいずれか１項に記載のプロセッサ。
【請求項７】
前記リターンターゲット制限ユニットが前記試みを制限することを決定する場合に、前記リターンターゲット制限ユニットは、例外、フォールト、および割り込みのうち１つを生じさせる、請求項１から５のいずれか１項に記載のプロセッサ。
【請求項８】
前記デコードユニットは、即値、および前記ＲＴＲリターン命令前の命令セットに存在したプロシージャからのレガシーリターン命令と同一のオペコードを有する前記ＲＴＲリターン命令をデコードし、
プロシージャからの前記レガシーリターン命令は、元々、前記即値により示されるバイト数をスタックからポップさせるものであり、
前記プロセッサは、前記第１のＲＴＲ情報として前記即値を使用する、請求項１に記載のプロセッサ。
【請求項９】
前記デコードユニットは、即値、および前記ＲＴＲリターン命令前の命令セットに存在したプロシージャからのレガシーリターン命令と同一のオペコードを有する前記ＲＴＲリターン命令をデコードし、
前記プロセッサは、前記即値が前記第１のＲＴＲ情報に対応する第１のモードと、前記即値が無視される第２のモードとを有する、請求項１に記載のプロセッサ。
【請求項１０】
プロセッサにおける方法であって、
プロシージャからのリターンターゲット制限リターン（ＲＴＲリターン）命令を受信する段階と、
リターンアドレスにおける命令のタイプに前記ＲＴＲリターン命令との互換性がないと判断することと、前記ＲＴＲリターン命令により示される第１のリターンターゲット制限情報（ＲＴＲ情報）に前記リターンアドレスにおける前記命令により示される第２のＲＴＲ情報との互換性がないと判断することとのうち、少なくとも１つに基づいて、前記ＲＴＲリターン命令に応答して、前記ＲＴＲリターン命令による、前記ＲＴＲリターン命令に対応する前記リターンアドレスにおける前記命令への制御フロー移動の試みを制限する段階とを備える、方法。
【請求項１１】
前記制限する段階は、前記ＲＴＲリターン命令の前記ＲＴＲ情報が、前記リターンアドレスにおける前記命令のＲＴＲ情報に等しくないとの判断に基づく、請求項１０に記載の方法。
【請求項１２】
前記制限する段階は、前記リターンアドレスにおける前記命令のオペコードが、前記ＲＴＲリターン命令と互換性があるタイプの全ての命令に対応する５つ以下のオペコードのセットのうちの１つでないとの判断に基づく、請求項１０に記載の方法。
【請求項１３】
前記受信する段階は、前記第１のＲＴＲ情報を提供する即値を有する前記ＲＴＲリターン命令を受信する段階を備える、請求項１０に記載の方法。
【請求項１４】
複数の命令を処理するシステムであって、
相互接続と、
前記相互接続と結合され、プロシージャからのリターンターゲット制限リターン（ＲＴＲリターン）命令を受信し、前記ＲＴＲリターン命令に応答して、リターンアドレスにおける命令のタイプの前記ＲＴＲリターン命令に対する互換性の欠如、および前記ＲＴＲリターン命令の第１のリターンターゲット制限情報（ＲＴＲ情報）の前記リターンアドレスにおける前記命令に対する互換性の欠如のうち１つに基づいて、前記ＲＴＲリターン命令による、前記ＲＴＲリターン命令に対応する前記リターンアドレスにおける前記命令への制御フロー移動の試みを制限することを決定するプロセッサと、
前記相互接続に結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）とを備える、システム。
【請求項１５】
前記プロセッサは、前記ＲＴＲリターン命令の即値の値が前記リターンアドレスにおける前記命令の即値の値に等しくないことに基づいて、前記試みを制限することを決定し、
前記プロセッサは、前記試みを制限すると決定することに応答して、フォールトおよび例外のうち１つを生じさせる、請求項１４に記載のシステム。
【請求項１６】
第１のタイプのコードを受信するコード受信モジュールと、
前記コード受信モジュールに結合され、前記第１のタイプの前記コードにおける全てのプロシージャからのリターンターゲット制限リターン（ＲＴＲリターン）命令が、前記第１のタイプについては許可されるが、１または複数の異なるタイプのコードについては許可されないリターンターゲット制限情報（ＲＴＲ情報）のみを示すか否かを決定するコード分析モジュールとを備える、コード分析システム。
【請求項１７】
前記第１のタイプは、非特権コードを含み、
前記１または複数の異なるタイプのコードは、特権コードを含む、請求項１６に記載のコード分析システム。
【請求項１８】
前記第１のタイプは、ユーザレベルアプリケーションを含み、
前記１または複数の異なるタイプのコードは、複数のユーザレベルのライブラリコード、デバイスドライバコード、システムレベルライブラリコード、およびオペレーティングシステムコードを含む、請求項１６に記載のコード分析システム。
【請求項１９】
前記コード分析モジュールは、前記第１のタイプの前記コードにおける全てのＲＴＲリターン命令が第１の範囲にある複数の値のＲＴＲ情報のみを示すか否かを判断し、
前記第１の範囲は、前記１または複数の異なるタイプのコードに対応する１または複数の他の範囲と相互排他的である、請求項１６に記載のコード分析システム。
【請求項２０】
コードを受信するコード受信モジュールと、
前記コード受信モジュールに結合され、プロシージャからの補助リターンターゲット制限リターン（ＲＴＲリターン）命令およびリターンターゲット命令の少なくとも１つのペアのリターンターゲット制限情報（ＲＴＲ情報）を作成することが、依然として相補的である場合に、前記補助ＲＴＲリターン命令および前記リターンターゲット命令の前記少なくとも１つのペアについて前記ＲＴＲ情報を変更するコード分析モジュールとを備える、コード分析システム。
【請求項２１】
前記コード受信モジュールは、前記コードにおける補助ＲＴＲリターン命令およびリターンターゲット命令の複数のペアを示すメタデータを更に受信し、
補助ＲＴＲリターン命令およびリターンターゲット命令の各ペアについての前記ＲＴＲ情報を作成することが、依然として相補的である場合に、前記コード分析モジュールは、補助ＲＴＲリターン命令およびリターンターゲット命令の各ペアについてＲＴＲ情報を変更する、請求項２０に記載のコード分析システム。
【請求項２２】
コンピュータに、
第１のタイプのコードにおける全てのプロシージャからのリターンターゲット制限リターン（ＲＴＲリターン）命令のリターンターゲット制限情報（ＲＴＲ情報）を調査させる手順と、
前記第１のタイプの前記コードにおける複数の前記ＲＴＲリターン命令が前記第１のタイプのコードについては許可されるが、１または複数の異なるタイプのコードについては許可されないＲＴＲ情報のみを示すか否かを判断する手順とを行わせる、プログラム。
【請求項２３】
前記第１のタイプの前記コードにおける複数の前記ＲＴＲ命令が、前記第１のタイプの前記コードについては許可されるが、前記１または複数の異なるタイプの前記コードについては許可されない前記ＲＴＲ情報のみを示すか否かを判断する前記手順は、前記第１のタイプの前記コードにおける複数の前記ＲＴＲ命令が、前記第１のタイプの前記コードについては許可されるが、前記１または複数の異なるタイプの前記コードについては許可されない第１の範囲の複数の値のみを示すか否かを判断する手順を有する、請求項２２に記載のプログラム。
【請求項２４】
請求項１０から１３のいずれか１項に記載の方法を実行する手段を備えるプロセッサ。
【請求項２５】
請求項１０から１３のいずれか１項に記載の方法を行わせるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書において説明される複数の実施形態は、概ね複数のプロセッサに関する。具体的には、本明細書において説明される複数の実施形態は、概ね、複数のリターン命令を実行する複数のプロセッサに関する。
【０００２】
背景情報  リターン指向プログラミング（ＲＯＰ）は、複数の攻撃者が、複数のコンピュータシステムまたは他の電子デバイスを介して制御を得るべく使用し得るコンピュータセキュリティを悪用する技術である。ＲＯＰにおいて、複数の攻撃者は、プログラムの制御フローをハイジャックするべく、スタックの制御を得ることができる。
【０００３】
多くの場合、呼び出しスタックの制御は、バッファオーバーランの悪用または攻撃により実現される。バッファオーバーランにおいて、データをメモリ内に格納する前に境界チェックを十分に実行しない関数は、適切に格納され得るよりも多くのデータを受け取ることがある。例えば、攻撃者は、ウェブブラウザに、ウェブブラウザが適切に格納し得るよりも多くのデータを送信することがある。スタック上にデータが格納されている場合、いくつかのデータは、その関数の複数の変数に割り当てられたストレージスペースを超過し、リターンアドレスを上書きすることがある。リターンアドレスは、呼び出しプロシージャ命令によりスタック上に格納されるアドレスであり、これは、呼び出されたプロシージャが完了した後、制御フローを呼び出し関数に再度リダイレクトするべく使用されることを意図される。しかし、バッファオーバーランの攻撃または悪用において、リターンアドレスは、異なるリターンアドレスで上書きされることがある。これにより、攻撃者が異なるリターンアドレスに制御フローを移動させ、異なるリターンアドレスで開始するコードを実行し、潜在的に所望でない、および／または悪意ある複数のアクションを実行することを可能にし得る。
【０００４】
ＲＯＰ攻撃において、攻撃者は、「ガジェット」として知られたシーケンスを合わせてチェーン化させることができる。各ガジェットは、プロシージャからのリターン命令を従える、１つまたはいくつかの命令のセットを表し得る。攻撃者は、複数の所望のガジェットの位置を突き止め、またはこれを識別するべく、コードの様々な実行可能なメモリ領域をスキャンし、または調査し得る。コードのそのような複数の実行可能なメモリ領域の例としては、例えば、アプリケーション、共有ユーザレベルのライブラリ、ドライバ、システムレベルのコード、およびシステムレベルのライブラリが挙げられる。例として、攻撃者は、インテル（登録商標）６４およびＩＡ―３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ'ｓ  Ｍａｎｕａｌ，Ｖｏｌｕｍｅ  ２，Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｒｅｆｅｒｅｎｃｅ，Ａ−Ｚ，Ｏｒｄｅｒ  Ｎｕｍｂｅｒ  ３２５３８３−０４１ＵＳ，Ｄｅｃｅｍｂｅｒ  ２０１１に記載されるようなプロシージャからのリターン（ＲＥＴ）命令に対応するオペコード０ｘＣ３をスキャンすることがある。各オペコードを識別した後、攻撃者は、上記の命令がガジェットとして有用かどうかを調べ得る。例として、攻撃者は、第１のガジェットとしてのリターン命令を従えるポップスタック命令、第２のガジェットとしてのリターン命令を従えるレジスタとレジスタとの間のＭＯＶＥ命令等を識別し得る。いくつかの場合に、攻撃者は、複数の十分なガジェットを識別し、いわゆるチューリング完全ガジェットのカタログを形成することができ、このカタログにより、攻撃者が広範な、または潜在的にほぼあらゆる所望の悪意あるアクションを実行することを可能にし得ることがある。
【０００５】
図１は、例示的な３つのガジェットチェーン１００のブロック図である。チェーンは、ポップｅａｘ命令１０２および第１のプロシージャからのリターン（ＲＥＴ）命令１０３を含む、第１のガジェット１０１を含む。第１のガジェットは、第２のガジェット１０４にリンクする。第２のガジェットは、ポップｅｃｘ命令１０５および第２のプロシージャからのリターン命令１０６を含む。第１および第２のガジェットは、スタックからｅａｘおよびｅｃｘのレジスタへとデータをポップさせる。第２のガジェットは、第３のガジェット１０７にリンクする。第３のガジェットは、ｍｏｖ［ｅｃｘ］，ｅａｘ命令１０８および第３のプロシージャからのリターン命令１０９を含む。第３のガジェットは、レジスタｅａｘにおける値を、レジスタｅｃｘにより示されるメモリ位置に格納する。これらのガジェットは、アプリケーション、ライブラリ、ドライバ、オペレーティングシステム等、潜在的に異なる複数のタイプのコード１１０に位置し得る。これは、ガジェットチェーンの単純な図示的一例にすぎない。
【０００６】
大まかではあるが図示的な類推は、ＲＯＰの複数のガジェットを、複数の異なる雑誌または新聞から切り抜かれた個々のレターに若干類似し、ランサムノートを綴るべく使用されるものとみなすことである。個々のレターが、複数の異なる雑誌または新聞から切り抜かれ、ランサムノートを綴るべく、連続的に配置されるように、個々のガジェット（例えば、各々は、リターンを従える１つまたはいくつかの命令を含む）は、潜在的に異なる複数のコードとして識別され、異なる機能性を有する新しいコードを作成するべく共にリンクされる。ガジェットのチューリング完全機能性は、類推により、ほぼいずれの機能性も実現するべく使用され得るように、任意の所望のメッセージを綴るのに必要とされる、全てのレターＡ〜Ｚを有することに若干類似し得る。
【０００７】
まず、バッファオーバーラン攻撃は、スタック上でリターンアドレスをハイジャックするべく使用され、それにより制御フローをハイジャックし得る。第１のガジェットの第１の命令のアドレスは、スタック上に格納され、制御フローを第１のガジェットに移動させ得る。制御フローは、呼出しプロシージャに（呼び出しプロシージャ命令を用いて）リターンするのではなく、第１のガジェットの第１の命令に移動し得る。次に、チェーンにおける第２のガジェットの第１の命令のリターンアドレスは、スタック上に格納され得る。第１のガジェットのリターン命令は、第２のガジェットに制御フローを移動させ得る。このようにして、連続した複数のガジェットの複数のリターンアドレスは、スタック上にシーケンシャルに格納され、複数のチェーン化ガジェットの複数のリターン命令によりジャンプされ得る。特定の複数の順序に複数のガジェットをチェーン化することにより、攻撃者は、既存のコードから複数の新しいプログラム機能性を作成し得ることがある。複数の攻撃者は、これを潜在的には、例えば、秘密情報を窃取し、他の複数のアプリケーションに干渉し、またはこれを攻撃し、複数の電子メールを送信し、複数のテキストメッセージを送信し、複数のツイートを発送し、カーネルの脆弱性を悪用する等、望ましくないか、または有害な目的に使用し得る。
【図面の簡単な説明】
【０００８】
本発明は、実施形態を図示するべく使用される以下の説明および添付の図面を参照することにより最もよく理解され得る。
【図１】例示的な３つのガジェットチェーンのブロック図である。
【図２】プロセッサの実施形態のブロック図である。
【図３】プロシージャからのリターンターゲット制限リターン命令の実施形態を実行するように動作可能なプロセッサの実施形態のブロック図である。
【図４】プロシージャからのリターンターゲット制限リターン命令およびリターンターゲット命令のオペレーションの実施形態を図示するブロック図である。
【図５】プロシージャからのリターンターゲット制限リターン命令の実施形態を実行する方法の実施形態のブロックフロー図である。
【図６】第１のタイプのコード、および第２の異なるタイプのコードをそれぞれ格納し、異なる許容し得る、または許可し得るＲＴＲ情報を示す複数のＲＴＲリターン命令を有する、機械可読ストレージ媒体の実施形態のブロック図である。
【図７】コードを分析する方法の第１の実施形態のブロックフロー図である。
【図８】コードを分析する方法の第２の実施形態のブロックフロー図である。
【図９Ａ】インオーダパイプラインの実施形態、およびレジスタリネームアウトオブオーダ発行／実行パイプラインの実施形態を図示するブロック図である。
【図９Ｂ】実行エンジンユニットに結合されたフロントエンドユニットを備え、双方がメモリユニットに結合されたプロセッサコアの実施形態のブロック図である。
【図１０Ａ】オンダイ相互接続ネットワークに接続し、レベル２（Ｌ２）キャッシュのローカルサブセットを有するシングルプロセッサコアの実施形態のブロック図である。
【図１０Ｂ】図１０Ａにおけるプロセッサコアの一部の拡大図による実施形態のブロック図である。
【図１１】２つ以上のコアを有し、統合メモリコントローラを有し、統合グラフィックスを有し得るプロセッサの実施形態のブロック図である。
【図１２】コンピュータアーキテクチャの第１の実施形態のブロック図である。
【図１３】コンピュータアーキテクチャの第２の実施形態のブロック図である。
【図１４】コンピュータアーキテクチャの第３の実施形態のブロック図である。
【図１５】システムオンチップアーキテクチャの実施形態のブロック図である。
【図１６】本発明の複数の実施形態による、ソフトウェア命令変換器を使用し、ソース命令セットの複数のバイナリ命令を、ターゲット命令セットの複数のバイナリ命令に変換するブロック図である。
【発明を実施するための形態】
【０００９】
本明細書において、プロシージャからの複数のリターンターゲット制限リターン命令およびリターンターゲット命令、複数の命令を実行する複数のプロセッサ、複数の命令を処理または実行する場合にプロセッサにより実行される方法、および複数の命令を処理または実行するべく１または複数のプロセッサを組み込む複数のシステムが開示される。以下の説明において、様々な具体的詳細（例えば、具体的な複数の命令オペレーション、複数のタイプのリターンターゲット制限情報、複数のプロセッサ構成、マイクロアーキテクチャの詳細、複数のオペレーションのシーケンス等）が記載される。しかし、複数の実施形態は、これらの具体的な詳細を用いることなく実施され得る。他の複数の例において、複数の周知の回路、構造、および技術は、説明の理解を不明瞭にするのを避けるべく、詳細には示されていない。
【００１０】
図２は、プロセッサ２１０の実施形態のブロック図である。プロセッサは、命令セット２１２を有する。命令セットは、プロセッサの複数のネイティブ命令を含む。命令セットの複数の命令は、命令セットの複数の命令からデコードされる、マイクロ命令、マイクロオペレーション、または命令もしくは制御信号ではなく、実行のためにプロセッサに提供される、マクロ命令、アセンブリ言語命令、または複数の機械レベル命令を表す。
【００１１】
示されるように、いくつかの実施形態において、命令セットは、プロシージャからのリターンターゲット制限リターン（ＲＴＲリターン）命令２１４を含み得る。いくつかの実施形態において、ＲＴＲリターン命令は、リターンターゲット制限（ＲＴＲ）情報２１６を有し、これを示し、そうでなければこれに関連し得る。更に示されるように、いくつかの実施形態において、命令セットは、リターンターゲット命令２１８を含み得る。いくつかの実施形態において、リターンターゲット命令２１８は、リターンターゲット制限（ＲＴＲ）情報２２０を有し、これを示し、そうでなければこれに関連し得る。いくつかの実施形態において、ＲＴＲリターン命令およびリターンターゲット命令は、複数の命令のペアを表し、（例えば、ＲＴＲ情報に基づいて）試みられたリターン制御フロー移動を条件的に制限または限定するべく一緒に使用されることを意図され得る。
【００１２】
また、プロセッサは、リターンターゲット制限ユニット２２２を含む。リターンターゲット制限ユニットは、ハードウェア、ファームウェア、ソフトウェア、または組み合わせ（例えば、いくつかのファームウェアおよび／またはソフトウェアと潜在的に組み合わされるハードウェア）で実装されてもよい。いくつかの実施形態において、ＲＴＲリターン命令は、リターンターゲット制限ユニットおよび／またはプロセッサにより、どのリターンターゲット（例えば、どの命令）に、ＲＴＲリターン命令が制御フローをリターンさせることを許可するかに関して、制限または限定させるように動作可能であり得る。いくつかの実施形態において、ＲＴＲリターン命令は、リターンターゲットアドレスにおけるあるタイプの命令を使用し、および／またはこれに基づいてそのような制限をさせるように動作可能であり得る。例えば、いくつかの実施形態において、リターンターゲットアドレスにおける命令がリターンターゲット命令２１８と同一のタイプ（例えば、同一のオペコードを有する）であれば、リターンターゲットアドレスにおける命令への試みられたリターン制御フロー移動は、許可され、そうでなければ制限もしくは阻止され得る。リターンターゲット命令２１８は、主に、ＲＴＲリターン命令の許可可能または正当な複数のリターンターゲットに対するマーカとして機能するように設計または意図される命令のタイプを表し得る。いくつかの実施形態において、ＲＴＲリターン命令は、ＲＴＲリターン命令のＲＴＲ情報２１６およびリターンターゲット命令のＲＴＲ情報２２０を使用し、および／またはこれらに基づいてそのような制限をさせるように動作可能であり得る。例えば、いくつかの実施形態において、２つのセットのＲＴＲ情報２１６、２２０が等しく、一致し、そうでなければ互換性がある場合に、リターンターゲットにおける命令への試みられたリターン制御フロー移動は、許可され得る。特定の例示的な実施形態において、各セットのＲＴＲ情報は、１つの値（例えば、整数値）を含んでもよく、双方の値は、互換性があるようにするべく、等しくなければならない。２つのセットのＲＴＲ情報に互換性がない場合、試みられたリターン制御フロー移動は、制限または阻止され得る。いくつかの実施形態において、ＲＴＲ情報は、複数の命令の即値により提供されてもよいが、本発明の範囲は、そのようには限定されない。
【００１３】
有利なことには、ＲＴＲリターン命令２１４およびリターンターゲット命令２１８は、複数のリターン制御フロー移動に対する更なる制御を条件的に制限し、限定し、またはこれを提供するのに役立ち得る。１つの潜在的利点として、これは、複数のリターン指向プログラミング（ＲＯＰ）攻撃を阻止するのに役立ち、またはこれらを開始することを少なくとも著しく困難にし得る。第１には、通常、複数のＲＯＰ攻撃は、様々なチェーン化ガジェットの複数の第１の命令へのリターン制御フロー移動を反復して実行する能力に依存する必要がある（例えば、複数のＲＯＰ攻撃は、これらのガジェットの複数の第１の命令のターゲットアドレスをスタック上に置くようにできる必要がある）。しかし、いくつかの実施形態において、試みられたリターン制御フロー移動が、特定のリターンターゲット命令２１８とは異なるタイプ（例えば、異なるオペコード）の命令（例えば、ポップ命令、ｍｏｖ命令等）に対するものである場合、プロセッサは、リターン制御フロー移動を制限または阻止し得る。これのみで、複数の攻撃者が、偶然に存在する複数の有用なガジェットを発見し得るのを非常に困難にする傾向にあり得る。リターン命令に続く１または複数の有用な命令を発見することに加えて、そのような１または複数の有用な命令に、リターンターゲット命令２１８が先立つ必要もあるからである。これのみで、複数の攻撃者がリターンすることを元々意図されない複数の命令にリターンし得ることを非常に困難にし得る。更に、いくつかの実施形態において、試みられたリターン制御フロー移動が、一致しない、そうでなければ互換性がないＲＴＲ情報を有する命令に対するものである場合、そのようなリターン制御フロー移動も制限または阻止され得る。これも、複数の攻撃者が、リターンすることを元々意図されない複数の命令にリターンし得ることを非常に困難にし得る。複数のリターンターゲット命令２１８は、一致し、または互換性ＲＴＲ情報を有する必要があるからである。
【００１４】
図３は、プロシージャ（リターン）からのリターンターゲット制限（ＲＴＲ）リターン命令３１４の実施形態を実行するように動作可能なプロセッサ３１０の実施形態のブロック図である。いくつかの実施形態において、プロセッサは、汎用プロセッサ（例えば、デスクトップ、ラップトップ、または他の複数のコンピュータにおいて使用されるタイプの汎用マイクロプロセッサ）であり得る。あるいは、プロセッサは、特定用途用プロセッサであってもよい。好適な複数の特定用途用プロセッサの例としては、ネットワークプロセッサ、通信プロセッサ、暗号化プロセッサ、グラフィクスプロセッサ、コプロセッサ、エンベデッドプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、およびコントローラ（例えば、マイクロコントローラ）が挙げられるが、これらに限定されない。プロセッサは、様々な複合命令セットコンピューティング（ＣＩＳＣ）プロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、超長命令語（ＶＬＩＷ）プロセッサ、それらのハイブリッド、他の複数のタイプのプロセッサのいずれかであってもよく、またはそのような異なるプロセッサ（例えば、異なる複数のコアでの）の組み合わせを有してもよい。
【００１５】
オペレーション中に、プロセッサは、ＲＴＲリターン命令３１４の実施形態を受信し得る。例として、ＲＴＲリターン命令は、命令フェッチユニット、または命令キュー等から受信し得る。ＲＴＲリターン命令は、マクロ命令、アセンブリ言語命令、機械コード命令、またはプロセッサの命令セットの命令もしくは制御信号を表し得る。いくつかの実施形態において、ＲＴＲリターン命令は、リターンターゲット制限（ＲＴＲ）情報を有し、これを示し、そうでなければこれに関連し得る。いくつかの実施形態において、ＲＴＲ情報は、ＲＴＲリターン命令に関連する１または複数の値を含み得る。いくつかの実施形態において、ＲＴＲ情報は、ＲＴＲリターン命令の即値における値を含み得る。ＲＴＲ情報の可能な様式の他の例は、命令のサフィックス内、命令に続く１または複数のバイト内に存在し、命令により示されるレジスタ内で提供されるＲＴＲ情報等を含むが、これに限定されない命令に関連し得る。
【００１６】
再び図３を参照すると、プロセッサは、デコードユニットまたはデコーダ３３０を含む。デコードユニットは、比較的高いレベルのＲＴＲリターン命令を受信し、デコードし得る。デコードユニットは、１または複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、デコード済み命令、もしくは制御信号、または比較的高いレベルの複数のＲＴＲリターン命令を反映し、表し、および／またはこれらから派生する他の比較的低いレベルの複数の命令もしくは制御信号を出力し得る。１または複数のより低レベルの命令または制御信号は、１または複数のより低いレベル（例えば、回路レベルまたはハードウェアレベルの）オペレーションによるより高いレベルの命令を実装してもよい。いくつかの実施形態において、デコードユニットは、命令を受信する１または複数の入力構造体（例えば、ポート、相互接続、インターフェース）、命令を認識およびデコードするべく入力構造体に結合された命令、命令認識、およびデコードロジック、および１または複数の対応するより低レベルの命令または制御信号を出力する命令認識ロジックおよびデコードロジックに結合された１または複数の出力構造体（例えば、ポート、相互接続、インターフェース）を含み得る。デコードユニットは、マイクロコードリードオンリメモリ（ＲＯＭ）、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、および当技術分野で既知の複数のデコードユニットを実装するべく使用される他のメカニズムを含むが、これらに限定されない様々な異なるメカニズムを使用して実装されてもよい。
【００１７】
いくつかの実施形態において、デコードユニット３３０に直接提供されるＲＴＲリターン命令３１４ではなく、命令のエミュレータ、トランスレータ、モルファ、インタープリタ、または他の命令変換モジュール（図示せず）が任意選択で使用され得る。様々なタイプの命令変換モジュールが当技術分野において既知であり、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装され得る。いくつかの実施形態において、命令変換モジュールは、例えば、別個のダイ上、および／またはメモリ（例えば、スタティック、ダイナミック、またはランタイムエミュレーションモジュール）内等、プロセッサの外側に位置し得る。例として、命令変換モジュールは、第１の命令セットであり得るＲＴＲリターン命令３１４を受信することができ、ＲＴＲリターン命令を１または複数の対応し、または派生する中間命令または制御信号にエミュレート、トランスレート、モーフィング、解釈、そうでなければ変換してもよく、中間命令または制御信号は、第２の異なる命令セットであってもよい。第２の命令セットの１または複数の中間命令または制御信号は、デコードユニットに提供されてもよく、デコードユニットは、１または複数の中間命令または制御信号を、プロセッサのネイティブハードウェアまたはロジックにより実行され得る、１または複数のより低レベルの命令または制御信号にデコードしてもよい。
【００１８】
再び図３を参照すると、メモリ３５０は、プロセッサ３１０と結合される。メモリは図示される実施形態で示されるが、他の複数の実施形態は、（例えば、システムに展開されない）そのようなメモリに結合されないプロセッサのみに関する。オペレーション中に、メモリは、スタック３５２を格納してもよい。スタックは、データを格納するように動作可能なスタックタイプのデータ構造体を表し得る。スタックの一般的目的は、それぞれの呼び出されたプロシージャ（例えば、各アクティブサブルーチン）が、実行を終了したときに制御をリターンさせるべきリターンアドレスまたは地点を追跡することである。示されるように、スタックは、ＲＴＲリターン命令３１４に対応するリターンアドレス３５４を格納し得る。例として、対応する呼び出しプロシージャ命令は、ＲＴＲリターン命令を用いてプロシージャを呼び出し、前のスタックにリターンアドレス３５４を格納し得るＲＴＲリターン命令は、スタックからリターンアドレス３５４をポップさせ、そうでなければ取得することを試み、制御をリターンアドレスに移動させ得る。また、メモリは、スタック上にリターンアドレス３５４により示される、関連するリターンアドレス３５８を有するコード３５６を格納してもよい。コードは、命令を有し、図示される例において、リターンアドレス３５８に位置するリターンターゲット命令３１８を有する。
【００１９】
再び図３を参照すると、リターンターゲット制限ユニット３２２は、デコードユニット３３０と結合されており、配置して使用する間は、メモリ３５０と結合し、そうでなければ通信する。プロセッサおよび／またはリターンターゲット制限ユニットは、ＲＴＲリターン命令３１４に応答し、および／またはこの結果として（例えば、１または複数の命令またはそれからデコードされた制御信号に応答して）、どの複数の特定のリターンターゲット（例えば、複数の命令）に、ＲＴＲリターン命令３１４がリターン制御フローを移動することを許可されるかに関して、制限または限定するように動作可能である。いくつかの実施形態において、リターンターゲット制限ユニット３２２は、ＲＴＲリターン命令３１４に応答して、リターンターゲット命令のタイプおよび／またはＲＴＲリターン命令と互換性があるリターンターゲット命令の他のノーオペコード情報に基づいて、リターンアドレス３５８に位置するＲＴＲリターン命令３１４のリターンターゲット命令（例えば、図示される例においてリターンターゲット命令３１８）への制御フロー移動を制限するか否かを判断するように動作可能であり得る。
【００２０】
いくつかの実施形態において、リターンターゲット制限ユニット３２２は、デコードユニットと結合され、（配置して使用する間は）メモリ３５０と結合し、そうでなければこれと通信する第１の判断ユニット３３２を含み得る。第１の判断ユニットは、ＲＴＲリターン命令３１４に応答して、リターンアドレス３５８における命令（例えば、リターンターゲット命令３１８）がＲＴＲリターン命令３１４と互換性があるタイプか否かを判断し得る。示されるように、リターンアドレス３５８における命令のタイプ３２１の指示（例えば、オペコード、または命令がリターンターゲット命令３１８であり、またはリターンターゲット命令３１８でないとの指示）は、リターンターゲット制限ユニット３２２に提供されてもよい。いくつかの実施形態において、リターンターゲット命令３１８のみは、ＲＴＲリターン命令３１４と互換性があるタイプ（例えば、オペコードを有する）であり得るが、他の複数のタイプの命令（例えば、命令セットの異なるオペコード）は、互換性がないことがある。あるいは、若干の異なるタイプの命令（例えば、若干の異なるオペコード）、多くの場合、５以下の異なるタイプの命令は、任意選択でＲＴＲ命令と互換性があり得るが、一般にはより多くの異なるタイプ（例えば、命令セットのより多くの異なる残りのオペコード）は、互換性がないことがある。
【００２１】
いくつかの実施形態において、そのような互換性があるタイプの命令３１８は、ＲＴＲリターン命令の潜在的には正当または許可し得るリターンターゲットの位置を表示するべく、専ら、または主としてＲＴＲリターン命令３１４と組み合わせて使用されることが意図され、またはそのように設計される、専用リターンターゲットマーカタイプの複数の命令を表し得る。一般に、リターンターゲット命令３１８は、算術、ロジック、メモリアクセス、または他の関数を有し得ないが、特定の実装に所望であればそれらを有し得ることが企図される。いくつかの実施形態において、リターンターゲット命令３１８は、自身のタイプを確認し、ＲＴＲ情報を提供することは別としても、ノーオペレーション（ＮＯＰ）として実行または行い得るタイプであってもよい。いくつかの実施形態において、そのような互換性命令の存在は、ある位置へのリターンを許可する必要条件であり得るが、十分条件ではない。そのような互換性命令がリターンアドレス３５８に位置しない場合、リターンターゲット制限ユニット３２２および／またはプロセッサは、リターンアドレス３５８への試みられたリターンを制限または許可しなくてもよい。例えば、リターンターゲット制限ユニットおよび／またはプロセッサは、例えば、制御保護フォールト等の例外３６０を発行し、またはシグナリングしてもよい。
【００２２】
いくつかの実施形態において、リターンターゲット制限ユニット３２２は、デコードユニットと結合され、（配置して使用するときには）メモリ３５０と結合され、そうでなければこれと通信する第２の判断ユニット３３４を含み得る。第２の判断ユニットは、ＲＴＲリターン命令３１４に応答して、リターンアドレス３５８における命令（例えば、リターンターゲット命令３１８）の、またはこれにより示され、そうでなければこれに関連するリターンアドレス３５８のＲＴＲ情報が、ＲＴＲリターン命令３１４の、またはこれにより示され、あるいはこれに関連するＲＴＲ情報と互換性があるか否かを判断し得る。示されるように、リターンアドレス３５８における命令のＲＴＲ情報３２０は、リターンターゲット制限ユニット３２２に提供され、ＲＴＲリターン命令のＲＴＲ情報３１６は、リターンターゲット制限ユニット３２２に提供され得る。
【００２３】
２つのセットのＲＴＲ情報は、異なる実施形態の異なる様式で互換性があることがある。例えば、いくつかの実施形態において、２つのセットのＲＴＲ情報は、等しいか、そうでなければ一致する場合にのみ、互換性があり得る。例えば、各セットのＲＴＲ情報は、潜在的には１つの値を含み得、２つの値は、等しい場合にのみ、互換性があるか、または一致し得る。あるいは、２つのセットのＲＴＲ情報は、特定の実装に所望の他の複数の様式で一致または互換性があることがある。例えば、２つのセットのＲＴＲ情報は、関数（例えば、ハッシュ関数、チェックサム関数、ロジックＡＮＤ、ＯＲ、ＮＯＴ、ＸＯＲ、または他のロジックオペレーションもしくは関数等）により、互いに一致し、および／または互換性であり得る。いくつかの実施形態において、２つのセットのＲＴＲ情報に互換性がない場合、リターンターゲット制限ユニット３２２および／またはプロセッサは、リターンアドレス３５８への試みられたリターンを制限し、または許可しなくてもよい。例えば、リターンターゲット制限ユニット３２２および／またはプロセッサは、例えば、制御保護フォールト等の例外３６０を発行またはシグナリングしてもよい。
【００２４】
他の複数の実施形態において、複数の命令のＲＴＲ情報を他の情報と組み合わせることが可能であるが、これは必須ではない。そのような他の情報の例としては、（例えば、プロセッサ識別レジスタの）プロセッサ識別タイプ情報、デバイス固有情報（例えば、モデル番号またはシリアル番号）、プラットフォーム固有情報、オペレーティングシステムの特権情報、暗号化キーの一部（例えば、最初の１バイト）または全て等が挙げられるが、これらに限定されない。例えば、命令の即値は、そのような情報に添付され、そのような情報とハッシュされ、もしくは排他的論理和をとり、そうでなければ組み合わされ得る。これは、セキュリティを向上させるのに役立ち得る。通常、ハッカーは、そのような情報を容易に知り得ないからである。比較の一方の側（例えば、リターン）が即値をそのような追加の情報と組み合わせ、他方の側（例えば、リターンターゲット）がその即値のみを使用した場合、ソフトウェアは、特定のデバイス（例えば、デバイス固有情報）用にカスタマイズされる。顧客は、そのような情報を知る、信用されるリソースからソフトウェアを取得することができる。あるデバイスのソフトウェアは、別のデバイス上では起動できないことがある。
【００２５】
リターンアドレスにおける命令のタイプに互換性があり、２つのセットのＲＴＲ情報に互換性がある場合、リターンターゲット制限ユニットおよび／またはプロセッサは、リターンアドレス３５８における試みられたリターンターゲットへの制御フロー移動を制限せず、および／またはこれを許可することを決定してもよい。例えば、リターンターゲット制限ユニット３２２は、許可信号３３６を制御フロー移動ユニット３３８に提供してもよい。リターンターゲット制限ユニット（例えば、許可信号３３６）による決定または承認に左右される制御フロー移動を除き、制御フロー移動ユニットは、実質的に従来通りであってもよい。例えば、制御フロー移動ユニットは、ジャンプ実行ユニット、またはプロシージャからのリターン制御移動オペレーションを実装するのに好適な他のタイプのユニットもしくはロジックを含んでもよい。代表的には、制御フロー移動ユニットは、リターンアドレス３４２としてリターンアドレス３５８を命令ポインタレジスタ３４０中に格納してもよい。セグメント化されたメモリが任意選択で使用される複数の実施形態においては必須ではないが、リターンアドレスにおける命令が異なるセグメントに位置する場合（例えば、セグメント間制御移動の場合）、制御フロー移動ユニットは、リターンターゲット命令３１８用のセグメント３４６を、セグメントセレクタレジスタ３４４中に格納してもよい。
【００２６】
一定の複数のコンセプトを更に図示するべく、ＲＴＲリターン命令およびリターンターゲット命令のペアの詳細な例示的実施形態を認識されたい。ＲＴＲリターン命令の具体的な一実施形態は、命令の即値（例えば、２ビット、４ビット、８ビット、または１６ビットの即値）で提供される定数Ｋ（例えば、整数）を有するＲＥＴＫ命令である。一般に、定数のとり得る値の数が大きくなる程、悪意ある攻撃への保護が強くなる。例として、８ビットの即値は、０〜２５５の範囲の複数の値を提供し得る。リターンターゲット命令の具体的な一実施形態は、即値中に定数Ｋを有するＥＮＤＲＥＴＫ命令である。ＥＮＤＲＥＴＫ命令は、ＲＥＴＫ命令の最終リターン地点または潜在的に許容され得るリターンターゲットを表示する。多くの場合、２つの命令の複数の即値に同一のサイズを有するようにさせることは好都合である場合があるが、複数の値が等しくあり得る限り、これは必須ではない。リターンターゲット制限ユニット３２２および／またはプロセッサにより、制御フロー移動を許可するべく、試みられたリターンターゲットアドレスにおけるＥＮＤＲＥＴＫ命令の存在および２つの命令における２つ定数Ｋの同一性の双方が、見出される必要がある。例えば、ＲＥＴ１７命令は、ＥＮＤＲＥＴ１６命令またはその他の非ＥＮＤＲＥＴ１７命令ではなく、ＥＮＤＲＥＴ１７命令にのみリターンすることを許可され得る。同様に、ＲＥＴ２３２命令は、ＥＮＤＲＥＴ１７命令またはその他の非ＥＮＤＲＥＴ２３２命令ではなく、ＥＮＤＲＥＴ２３２命令にのみリターンすることを許可され得る。ＲＥＴ２３２命令がポップスタック命令、追加命令、ＥＮＤＲＥＴ２３１命令、またはＥＮＤＲＥＴ２３２命令以外のその他の命令にリターンすることを試みる場合、試みられたリターンは、制限または阻止され、例外（例えば、制御保護フォールト）が、生じ得る。これは、図示的一例にすぎず、本発明の範囲は、この特定の例に限定されないことを理解されたい。
【００２７】
リターンターゲット制限ユニット３２２および／またはプロセッサは、ＲＴＲリターン命令に応答し、および／またはＲＴＲリターン命令の結果として、ＲＴＲリターン命令を実行し、および／またはリターンターゲットへのリターンを制限するか否かを決定するように動作可能な、固有または特定のロジック（例えば、複数のトランジスタ、集積回路、またはファームウェアと潜在的に組み合わされる他のハードウェア（例えば、不揮発性メモリ内に格納された複数の命令）、および／またはソフトウェア（例えば、メモリ内格納されたより高いレベルの複数の命令））を含んでもよい。
【００２８】
有利なことに、ＲＴＲリターン命令およびリターンターゲット命令は、リターン制御フロー移動に対する更なる制御を条件的に制限し、限定し、または提供するのに役立ち得る。１つの潜在的利点として、これは、複数のリターン指向プログラミング（ＲＯＰ）攻撃を阻止し、それらを少なくとも著しく困難にし得る。第１には、一般に、複数のＲＯＰ攻撃は、様々なチェーン化ガジェットの第１の命令に複数のリターン制御フロー移動を反復して実行する能力に依存する必要がある。しかし、いくつかの実施形態において、試みられたリターン制御フロー移動が特定のリターンターゲット命令３１８とは異なるタイプの命令（例えば、異なるオペコード）に対するものである場合、そのようなリターン制御フロー移動は、制限または阻止されてもよい。更に、いくつかの実施形態において、試みられたリターン制御フロー移動が一致しないか、そうでなければ互換性がないＲＴＲ情報を用いる命令に対するものである場合、そのようなリターン制御フロー移動は、制限または阻止されてもよい。全体として、これは、リターンすることを元々意図されない複数の位置にリターンすることを攻撃者が試みるのを非常に困難にする傾向にあり得る。特定のリターンターゲット命令および互換性ＲＴＲ情報のセットの使用は、複数の攻撃者に所望の複数のリターンターゲットに任意にリターンすることが通常はあまりあり得ないものとなるように、コードにおける複数の許可し得るリターンパスを決定することに役立ち得る。プログラムが作成される場合、複数のリターンターゲット命令の位置およびＲＴＲ情報の互換性がある複数のペアは、全ての意図されるリターンターゲットを示す。一般に、異なるリターンターゲットは、容易に見出され得ない。多くの場合、複数のリターンターゲット命令は、所望の複数の位置に存在せず、および／または互換性ＲＴＲ情報を有しないからである。これは、偶然にも存在するガジェットの数を非常に希少なものにする傾向にあり得る。
【００２９】
図４は、リターンターゲット制限ユニット４２２の実施形態による、ＲＴＲリターン命令４１４の実施形態およびリターンターゲット命令４１８の実施形態の使用を図示するブロック図である。呼出しプロシージャ４９５は、ターゲットアドレス４９９およびリターンアドレス４５８を示す呼び出しプロシージャ命令４９６を有する。ターゲットアドレス４９９は、リターンプロシージャ４９８における第１の命令４０１に対するものである。（１）において示されるように、呼び出しプロシージャ命令は、プロセッサに初期ターゲットアドレスを命令ポインタレジスタ４４０上に格納させ、リターンプロシージャ４９８の初期セグメントをセグメントセレクタレジスタ中に格納させる。また、リターンアドレス４５４は、リターンアドレス４５８に対応するスタック４５２上に格納されてもよい。次に、制御フローは、リターンプロシージャ４９８にジャンプまたは移動する。（２）に示されるように、ターゲットアドレス４９８における命令４０１が実行され、次いでＲＴＲリターン命令４１４をもたらす１または複数の他の命令が実行され得る。ＲＴＲリターン命令４１４が実行されると、リターンターゲット制限ユニット４２２は、ＲＴＲリターン命令のＲＴＲ情報４１６、およびＲＴＲリターン命令により示されるスタック４５２上のリターンアドレス４５４において示される関連するリターンターゲット命令４１８のＲＴＲ情報４２０を受信することができる。また、リターンターゲット命令のタイプ４２１の指示は、リターンターゲット制限ユニット４２２に提供されてもよい。（３）として、リターンターゲット制限ユニットは、本明細書において他の箇所で説明するように、リターンターゲット命令４１８への試みられた制御フロー移動を許可または制限するか否かを決定し得る。決定が制限しない場合、（４Ａ）に示されるように、決定は、リターンアドレス４５４を命令ポインタレジスタ４４０に格納し、（セグメント間の移動の場合に）呼出しプロシージャ４４６のセグメントをセグメントセレクタレジスタ４４４に格納し得る。決定が制限する場合、（４Ｂ）に示されるように、決定は、例外４６０を生成し得る。次に、リターンターゲット命令４１８へのジャンプまたは移動が行われ得る。（５）に示されるように、リターンターゲット命令は、潜在的に、ＮＯＰとして実行され、次に実行は、次の命令４９７と共に継続し得る。
【００３０】
図５は、プロシージャからのリターンターゲット制限リターン（ＲＴＲリターン）命令の実施形態を実行する、方法５７０の実施形態のブロックフロー図である。様々な実施形態において、本方法は、プロセッサ、命令処理装置、または他のデジタルロジックデバイスにより実行されてもよい。いくつかの実施形態において、図５の複数のオペレーションおよび／または方法は、図２〜３のいずれかのプロセッサにより、および／またはどちらかのプロセッサ内で実行されてもよい。また、図２〜３のどちらかのプロセッサについて本明細書において説明される複数のコンポーネント、特徴、および任意選択の特定の詳細は、図５の複数のオペレーションおよび／または方法に任意選択で適用される。あるいは、図５の複数のオペレーションおよび／または方法は、類似もしくは異なるプロセッサ、または装置により、および／または類似もしくは異なるプロセッサ、または装置内で実行されてもよい。更に、図２〜３のどちらかのプロセッサは、図５のものと同一、類似、または複数の異なるオペレーションおよび／または方法を実行し得る。
【００３１】
本方法は、ブロック５７１でＲＴＲリターン命令を受信する段階を備える。様々な態様において、命令は、プロセッサ、命令処理装置、またはそれらの部分（例えば、命令フェッチユニット、デコードユニット、バスインターフェースユニット等）において受信され得る。様々な態様において、命令は、オフダイソース（例えば、メモリ、相互接続等）、またはオンダイソース（例えば、命令キャッシュ、命令キュー等）から受信され得る。いくつかの実施形態において、プロシージャからのリターンターゲット制限リターン命令は、ＲＴＲ情報を有し、示し、そうでなければこれに対応し、もしくはこれに関連してもよい。
【００３２】
ブロック５７２で、リターンアドレスにおける命令のタイプは、ＲＴＲリターン命令と互換性があるか否かの判断が行われ得る。そのタイプが、互換性があると判断されると（すなわち、「はい」が、ブロック５７２における判断である）、方法は、ブロック５７３に進んでよい。いくつかの実施形態において、タイプは互換性があることを見出すべく、リターンアドレスにおける命令は、本明細書において他の箇所に説明するリターンターゲット命令であるべきである。
【００３３】
ブロック５７３で、ＲＴＲリターン命令により示された第１のＲＴＲ情報は、リターンアドレスにおける命令により示された第２のＲＴＲ情報と互換性があるか否かの判断が行われ得る。この判断は、本明細書において他の箇所に説明するように行われ得る。ＲＴＲ情報の複数のセットは、互換性があると判断されると（すなわち、「はい」がブロック５７３における判断である）、方法は、ブロック５７４に進んでよい。
【００３４】
ブロック５７４で、方法は、ＲＴＲリターン命令による試みを許可し、ＲＴＲリターン命令に対応するリターンアドレスにおける命令への制御フロー移動を行い得る。逆に、どちらかのタイプに互換性がないと判断され（すなわち、「いいえ」がブロック５７２における判断である）、またはＲＴＲ情報の複数のセットに互換性がないと判断されると（すなわち、「いいえ」がブロック５７３における判断である）、本方法は、ブロック５７５に進み得る。ブロック５７５で、本方法は、ＲＴＲリターン命令による、ＲＴＲリターン命令に対応するリターンアドレスにおける命令への制御フロー移動の試みを制限し得る。
【００３５】
本明細書において開示される複数のＲＴＲリターン命令および／またはＲＴＲ情報の別の潜在的利点は、それらが攻撃（例えば、複数のＲＯＰ攻撃）のリスクに対するコードの分析または調査を容易にし、および／または向上させるのに役立ち得ることである。多くの場合、使用されることを許可される前に、コードは、分析により検討、精査、および検証される。例えば、これは、多くの場合、複数のデジタル配信プラットフォームについて行われる。一例として、Ａｐｐ  Ｓｔｏｒｅは、ｉＯＳにおけるモバイルアプリケーションのためのデジタル配信プラットフォームであり、複数のユーザが、アップルのｉＯＳソフトウェア開発キット（ＳＤＫ）を用いて開発された複数のアプリケーションをブラウズおよびダウンロードすることを可能にする。別の例は、Ｍａｃ  Ａｐｐ  Ｓｔｏｒｅであり、マックの複数のコンピュータ用に設計されたダウンロードのための複数のアプリケーションを有する。複数のアプリケーション発行元は、複数のデジタル配信プラットフォームまたはストアから販売またはダウンロードされることを考慮して、そのような複数のデジタル配信プラットフォームに複数のアプリケーションを提出することができる。一般に、処理の一部として、購入またはダウンロードされることを許可される前に、複数のアプリケーションは、検討、精査、および検証され得る。
【００３６】
複数のそのような検討中に実行される分析の共通のタイプは、静的分析（例えば、複数の静的バイナリ評価技術）である。しかし、これらの技術の１つの欠点は、多くの場合、ＲＯＰタイプの複数の攻撃を検出するのに完全には適さないということである。この問題についての更なる背景的議論は、「"Ｊｅｋｙｌｌ  ｏｎ  ｉＯＳ：  Ｗｈｅｎ  Ｂｅｎｉｇｎ  Ａｐｐｓ  Ｂｅｃｏｍｅ  Ｅｖｉｌ"，２２ｎｄ  ＵＳＥＮＩＸ  Ｓｅｃｕｒｉｔｙ  Ｓｙｍｐｏｓｉｕｍ，Ａｕｇｕｓｔ  ２０１３」という記事において入手可能である。１つの懸念は、複数の攻撃者が、複数の攻撃を実行するように設計された複数の悪意あるアプリケーションを書く一方で、潜在的には、静的分析中に検出を逃れ得ることである。例えば、攻撃者は、表面上は普通のコード（例えば、アプリケーション）を作成し、コードは、静的分析により検出することが困難な複数の隠しガジェットを有し得る。具体的な一例として、アプリケーション開発者は、Ａｐｐ  Ｓｔｏｒｅを介して配信される、表面上は普通であるが、ＲＯＰ攻撃の複数の隠しガジェットがアプリケーション内に含まれるビデオゲームを書くことができる。攻撃者は、精査および検証のためにビデオゲームまたは他のアプリケーションをＡｐｐ  Ｓｔｏｒｅまたは他のデジタル配信プラットフォームに提出し得る。アプリケーションの意図されたフローに従って、呼び出しパスおよびリターンパスを追跡することを含む、静的分析が実行され得る。しかし、静的分析は、複数の攻撃者のランタイムコマンドに応じてランタイム中にのみ追尾される、悪意ある異なるリターンパスを企図または予期できないことがある。ＲＯＰ攻撃において、複数のリターンパスは、スタック上に複数のリターンアドレスを配置して、動的に複数の制御フロー移動を制御することにより、ランタイム時に決定されることを想起されたい。結果として、複数の隠しガジェットは、静的分析中に検出を逃れることができる場合がある。アプリケーションは、アプリケーション検討および精査処理を送信し、購入および／またはダウンロードのためにアプリケーションストアに配置され得る。ビデオゲームまたは他のアプリケーションがスマートフォン、パッドコンピュータ、または他のコンピュータシステム上にインストールされるときに、攻撃者は、攻撃を開始することがある。攻撃者は、複数の悪意あるオペレーションを実行するべく、複数の悪意ある制御フローを導入し、特定の順序で複数のガジェットをアセンブルし得る。
【００３７】
有利なことに、本明細書において開示される複数のＲＴＲリターン命令および／またはＲＴＲ情報は、複数の悪意あるガジェットおよび／または隠しガジェットに対するコードの分析を容易にし、および／または向上させるのに役立ち得る。第１に、複数のペアのＲＴＲリターン命令および複数のリターンターゲット命令、および／または複数のペアの互換性ＲＴＲ情報は、複数の可能な制御フローリターンパスをより静的で固定されたものにすることができる。実行時間中に、複数の制御フローリターンパスは、攻撃者が選択する任意の箇所に行くことを制限され得るが、むしろ、これらの複数の命令のペアおよび複数の互換性ＲＴＲ情報のペアと一致し、または互換性がある複数の制御フローリターンパスに限定され得る。複数のリターンターゲット命令の位置および複数のセットの互換性ＲＴＲ情報は、全ての可能な／認可されたリターンターゲットを示す。互換性ＲＴＲ情報（例えば、偶然による等）を伴う互換性リターンターゲット命令も有する、いくつかの異なる可能なリターン位置にジャンプすることは可能であり得るが、これらの異なる複数のリターンパスを予期または予測することは、より容易であり、一般には、パスの数は少ないはずである。これは、分析（例えば、複数の静的分析技術）が可能な複数のリターンパスを追跡することをはるかに容易にし、これにより悪意あるコードの検出を支援するのに役立ち得る。また、これは、アプリケーション開発者がＲＯＰ攻撃または他の悪意ある攻撃を実行し得るアプリケーションを作成する一方で、分析中に検出を逃れ得ることをはるかに困難にするのに役立ち得る。
【００３８】
図６は、許容し得るまたは許可し得る異なるＲＴＲ情報を示すＲＴＲリターン命令６８３、６８５を有する第１のタイプのコード６８２および第２の異なるタイプのコード６８４をそれぞれ格納し、そうでなければ提供する、機械可読媒体６８０（例えば、機械可読ストレージ媒体）の実施形態のブロック図である。いくつかの実施形態において、第１のタイプのコードは、ユーザレベルコードおよび／または非特権レベルコードであるが、第２のタイプのコードは、システムレベルコードおよび／または特権レベルコードであり得る。他の複数の実施形態において、例えば、ライブラリコード対非ライブラリコード、デバイスドライバコード対非ドライバコード、オペレーティングシステムコード対非オペレーティングシステムコード、ユーザレベルコード対非ユーザレベルコード、またはこれらの様々な組み合わせ等、他の複数の異なるタイプのコードが使用され得る。
【００３９】
第１のタイプのコードは、第１のタイプのコード６８２について許可または認可されるが、第２の異なるタイプのコード６８４については許可されないＲＴＲ情報を示す複数のＲＴＲリターン命令６８３を有する。いくつかの実施形態において、第１のタイプのコード（例えば、ユーザレベルコード）について許可されるＲＴＲ情報は、複数の他のタイプのコード（例えば、オペレーティングシステムコード、デバイスドライバコード等）については許可されないことがある。同様に、第２の異なるタイプのコードは、第２のタイプのコード６８４について許可または認可されるが、第１のタイプのコード６８２については許可されないＲＴＲ情報を示す複数のＲＴＲリターン命令６８５を有する。いくつかの実施形態において、第２のタイプのコード（例えば、オペレーティングシステムコード）について許可されるＲＴＲ情報は、複数の他のタイプのコード（例えば、ユーザレベルコード、デバイスドライバコード等）については許可されないことがある。
【００４０】
いくつかの実施形態において、異なる許可し得るＲＴＲ情報は、複数の異なるレベルの特権またはセキュリティのために使用され得る。例えば、第１のタイプのコード６８２（例えば、ユーザレベルおよび／または非特権レベルコード）の複数のＲＴＲリターン命令６８３のＲＴＲ情報は、第２のタイプのコード６８４（例えば、システムレベルコードおよび／または特権レベルコード）の複数のＲＴＲリターン命令６８５のＲＴＲ情報に対する複数の許容し得るまたは許可し得る値のセットに対して相互排他的である、複数の許容し得るまたは許可し得る値のセットに限定されてもよい。例えば、複数の重複しない範囲の値は、これら２つの異なるタイプのコードに使用され得る。具体的で図示的な一例として、複数の整数値０〜１２７は、第１のタイプのコード６８２に対するＲＴＲ情報に任意選択で使用され得るが、複数の整数値１２８〜２５５は、第２のタイプのコード６８４に対するＲＴＲ情報に任意選択で使用され得る。
【００４１】
更に、所望であれば、２つ以上（例えば、３つ、４つ、５つ、またはそれ以上）の異なるタイプのコードは、異なる複数の相互排他的なセット（例えば、複数の整数範囲）の許可し得るＲＴＲ情報を任意選択で有してもよい。例えば、特定の例示的一実施形態において、複数のＲＴＲ命令に対する６つの異なる相互排他的なセット（例えば、複数の整数範囲）の許可し得るＲＴＲ情報が、任意選択で使用されてもよい。例えば、第１の範囲の複数の整数値は、複数のユーザアプリケーションのＲＴＲ命令に使用されてもよく、第２の異なる範囲の複数の値は、複数のユーザライブラリのＲＴＲ命令に使用されてもよく、第３のなおも異なる範囲の複数の値は、複数のシステムアプリケーションのＲＴＲ命令に使用されてもよく、第４のなおも異なる範囲の複数の値は、複数のシステムライブラリのＲＴＲ命令に使用されてもよく、第５のなおも異なる範囲の複数の値は、複数のデバイスドライバのＲＴＲ命令に使用されてもよく、第６のなおも異なる範囲の複数の値は、オペレーティングシステムカーネルの複数のＲＴＲ命令に使用されてもよい。これは、必須ではない図示的な一例にすぎないことを理解されたい。
【００４２】
本実施形態において、許可し得るＲＴＲ情報は、複数のリターンターゲット命令にではなく、複数のＲＴＲリターン命令に割り当てられ、および／またはこれについて統制されることに留意されたい。一例として、ユーザレベルアプリケーションは、ユーザレベルアプリケーションに対して許可されない（例えば、これに代えて、オペレーティングシステムのために予約される）ＲＴＲ情報（例えば、値）を有するＲＴＲリターン命令を含むことを許可されないことがある。しかし、ユーザレベルコードは、オペレーティングシステムのために予約されるＲＴＲ情報に等しいか、一致し、または相補的なＲＴＲ情報（例えば、値）を伴うリターンターゲット命令（例えば、ＥＮＤＲＥＴＫ命令）を有することを許可されることがある。このように、ユーザレベルアプリケーションは、オペレーティングシステムのために予約されたＲＴＲ情報を伴うＲＴＲリターン命令を有するオペレーティングシステムプロシージャを呼び出し、リターンは、補助ＲＴＲ情報を伴うリターンターゲット命令を有するユーザレベルアプリケーションに許可され得る。
【００４３】
図７は、コードを分析する方法７８６の実施形態のブロックフロー図である。コード分析は、コードが、複数のＲＴＲリターン命令のどのＲＴＲ情報が許容し得るまたは許可可能かを統制する複数のポリシーまたはルールを満たすか否かを判断するべく使用され得る。いくつかの実施形態において、本方法は、コード分析システムにより実行され得る。例えば、いくつかの実施形態において、コード分析システムは、アプリケーション開発者が複数のルールまたはポリシーに従ってＲＴＲ情報を割り当てたことを検証するべく分析を行う、アプリケーションストア（例えば、Ａｐｐ  Ｓｔｏｒｅ）または他のデジタル配信プラットフォームの複数のモジュールであり得る。別の例として、コード分析システムは、１または複数のオペレーティングシステム、仮想マシンモジュール、または他の特権レベルソフトウェアモジュールを含み得る。なおも別の例として、マイクロコードおよび／またはハードウェア等のプロセッサのロジックは、本方法を実行し得る。
【００４４】
本方法は、ブロック７８７で第１のタイプのコードを受信する段階を備える。例えば、コード受信モジュールは、コードを受信し得る。本方法は、ブロック７８８で、第１のタイプのコードの複数のＲＴＲリターン命令が、第１のタイプのコードについては許可されるが、１または複数の他のタイプのコードについては許可されないＲＴＲ情報のみを示すか否かを判断する段階を備える。コードのタイプは、すでに言及したいずれのものであってもよい。これは、前述の相互排他的な複数のセットまたは範囲のＲＴＲ情報のいずれかを用いる段階を備え得る。決定が「いいえ」の場合、本方法は、ブロック７８９に進み、ＲＴＲ情報は、複数のポリシーまたはルールを満たさないと判断される。そうでない場合、決定が「はい」であれば、本方法は、ブロック７９０に進み、ＲＴＲ情報は、複数のポリシーまたはルールを満たすと判断される。一例として、複数のルールまたはポリシーを満すようにＲＴＲ情報が修正されない限り、デジタル配信プラットフォームモジュールは、ブロック７８９に応答してコードを検証しないと決定してもよい。別の例として、オペレーティングシステムモジュールは、ブロック７８９に応答してコードが起動することを可能にしないと決定してもよい。
【００４５】
図８は、コードを分析する方法８９１の別の実施形態のブロックフロー図である。いくつかの実施形態において、本方法は、コード分析システムにより実行され得る。例えば、いくつかの実施形態において、コード分析システムは、アプリケーションストア（例えば、Ａｐｐ  Ｓｔｏｒｅ）または他のデジタル配信プラットフォームのモジュールであってもよい。別の例として、コード分析システムは、１または複数の特権レベルソフトウェアモジュールを含み得る。
【００４６】
本方法は、ブロック８９２でコードを受信する段階を備える。例えば、コード受信モジュールは、コードを受信し得る。本方法は、ブロック８９３で、ＲＴＲリターン命令およびリターンターゲット命令の意図される補助ペアを示すメタデータを受信する段階を任意選択で備えてもよい。いくつかの実施形態において、コード分析システムは、一致または互換性ＲＴＲ情報を有する、ＲＴＲリターン命令およびリターンターゲット命令の意図される補助ペアが識別されるように要求し得る。例えば、考慮および検討のために複数のアプリケーションまたはコードが提出されるとき、および／または承認される前に、アプリケーションストア（例えば、Ａｐｐ  Ｓｔｏｒｅ）または他のデジタル配信プラットフォームのコード分析システムは、そのような識別を要求してもよい。アプリケーション開発者は、アプリケーションまたはコードと共にＲＴＲリターン命令およびリターンターゲット命令のこれらの意図される補助ペアを示すメタデータを提出する必要があることがある。別の例としては、１または複数の特権レベルソフトウェアモジュールは、アプリケーション呼び出し時にそのようなメタデータまたは識別を要求し得る。また、そのような情報は、複数の潜在的な攻撃に対する分析を向上させるべく使用されてもよい。
【００４７】
本方法は、ブロック８９４で、意図される補助ＲＴＲリターン命令およびリターンターゲット命令の少なくとも１つのペアに対するＲＴＲ情報を変更しつつ、ＲＴＲ情報が相補的に留まることを可能にする段階を備える。いくつかの実施形態において、コード分析システムまたはモジュールは、互換性ＲＴＲリターン命令およびリターンターゲット命令の意図されるペアのうち、少なくとも１つ、選択的にはいくつか、大部分、または全てに新しいか、または異なるＲＴＲ情報（例えば、複数の値）を割り当てるべく、複数の指示またはメタデータを使用し得る。例えば、ＲＴＲリターン命令およびその識別済みリターンターゲット命令のＲＴＲ情報は、依然として互換性があるが、以前とは異なるＲＴＲ情報を有するように変更されてもよい。一例として、ＲＥＴ１７とＥＮＤＲＥＴ１７のペアは、ＲＥＴ２３３とＥＮＤＲＥＴ２３３のペアに変更されてもよい。
【００４８】
これは、複数の異なる実施形態において異なる様式で行われ得る。一態様において、システムまたはモジュールは、全てのセットのＲＴＲ情報間に十分なレベルのダイバシティまたはエントロピー（例えば、閾値を少なくとも満たすＲＴＲ情報の同一ペアに対する差異の比率）が存在することを確認し得る。極端な例として、コードが全てのＲＴＲリターン命令およびリターンターゲット命令の複数のペアに対して同一のＲＴＲ情報を使用した場合、ＲＴＲ情報の互換性に対する確認の値は、減少し得る。システムまたはモジュールが、同一のＲＴＲ情報を有する、あまりに多くの意図されるペアの互換性命令（例えば、閾値を超える）が存在することを検出する場合、ＲＴＲ情報のうちいくつかを変更し、プロセッサが許可する、複数の異なる可能なリターンターゲット制御移動の数を減少させることを決定し得る。メタデータは、この目的のために使用されてもよい。これは、いくつかの隠しガジェットを取り除くのに役立ち得る。これは、デジタル配信プラットフォームのシステムまたはモジュール、オペレーティングシステムモジュール等により行われてもよい。
【００４９】
別の態様において、複数の互換性命令のうちいくつか、大部分、または全ての意図されるペアのＲＴＲ情報は、ダイバシティの確認があるか否かに拘わらず、任意選択で（例えば、置換アルゴリズム等により疑似ランダム的に）変更され得る。これは、複数の異なるペアに対するＲＴＲ情報をミックスまたはシャッフルするのに役立ち、それにより、同一の互換性ＲＴＲ情報を有するように作成された複数の隠しガジェットを阻止するのに役立ち得る。例えば、具体的な一実施形態において、特権レベルソフトウェアモジュール（例えば、オペレーティングシステムモジュール、仮想マシンモニタモジュール等）は、アプリケーションまたはコードが呼び出され、またはロードされるときに、複数の命令のうちいくつか、大部分、または全ての指示または意図されるペアに新しいか、または異なるＲＴＲ情報を割り当ててもよい。別の特定の実施形態において、（例えば、デジタル配信プラットフォームまたはオペレーティングシステムの）モジュールは、コードダウンロード時（例えば、アプリケーションがダウンロードされるとき）に複数の命令のうちいくつか、大部分、または全ての指示または意図されるペアに新しいか、または異なるＲＴＲ情報を割り当ててもよい。
【００５０】
また、ＲＴＲ情報に対して更なる制限を課すなおも他の複数の様式が企図される。例えば、いくつかの実施形態において、モジュール（例えば、デジタル配信プラットフォームまたは特権ソフトウェアのモジュール）は、許容し得るまたは許可可能にするべく、異なるか、またはユニークな複数のセットのＲＴＲ情報が、複数の異なるＲＴＲリターン命令のそれぞれに使用されることを統制する複数のポリシーまたはルールを課すことができる。例えば、各ＲＴＲリターン命令は、異なる値（例えば、異なる整数または定数）を有するように権限付与され得る。ＲＴＲ情報の量（例えば、複数のビット数）は、これら全ての異なる値を提供するのに十分であり得る。ＲＴＲ情報の特定の量は、特定の実装に依存する。
【００５１】
いくつかの実施形態において、本明細書において開示される複数のＲＴＲリターン命令および複数のリターンターゲット命令は、定義されず、および／または違法なコードである複数の新しい異なるオペコードを付与され得る。換言すれば、これらのオペコードは、ＲＴＲリターン命令およびリターンターゲット命令を命令セットに導入する前のプロセッサの命令セットには存在しないであろう。
【００５２】
他の複数の実施形態において、本明細書において開示される複数のＲＴＲリターン命令および／またはリターンターゲット命令は、レガシー命令のものと同一であるか、および／またはレガシー命令のセットについて定義された複数のオペコードを付与され得る。これは、これらの命令がレガシーハードウェア上で起動することを可能にし得る。一実施形態において、ＲＴＲ情報（例えば、Ｋ）が既存のプロシージャからのリターン命令（例えば、ＲＥＴ命令）に対する即値またはサフィックスになるように、リターンターゲット命令（例えば、ＲＥＴＫ命令）は、エンコードされ得る。例えば、インテル（登録商標）アーキテクチャにおいて、プロシージャからのｎｅａｒリターン命令は、１バイト命令Ｃ３である。ＲＴＲ情報（例えば、Ｋ）は、命令がレガシーハードウェア上で起動することができるように、Ｃ３命令の最後に添付されてもよい。古いハードウェアは、Ｃ３をプロシージャからのレガシーリターン命令として解釈し、次のＲＴＲ情報（例えば、Ｋ）を無視するからである。レガシーハードウェアは、ＲＴＲ情報（例えば、Ｋ）を、無視してもよいか、または少なくとも使用する必要のないサフィックスとみなし得る。対照的に、新しいハードウェア上では、ＲＴＲ情報（例えば、Ｋ）は、プロセッサにより、複数の制御フロー移動を条件付けるべく使用されるＲＴＲ情報を提供する即値とみなされ得る。ここでリターンターゲット命令を参照すると、一実施形態において、リターンターゲット命令（例えば、ＥＮＤＲＥＴＫ命令）は、レガシー命令のセットにおけるノーオペレーション（ＮＯＰ）の合法または定義済みインスタンスとしてエンコードされ得る。このように、レガシーハードウェアは、単にＮＯＰとして扱われるので、リターンターゲット命令（例えば、ＥＮＤＲＥＴＫ命令）を処理し得る。対照的に、新しいハードウェア上では、リターンターゲット命令（例えば、ＥＮＤＲＥＴＫ命令）は、本明細書の他の箇所で説明されるＲＴＲ情報を提供するべく使用され得る。
【００５３】
他の複数の実施形態において、レガシー命令のオペコードは、任意選択で再利用され得る。例えば、これは、一般に現在の環境において使用されず、および／または軽視される処理にあるレガシー命令に対して行われてもよい。一例として、インテル（登録商標）アーキテクチャ（例えば、Ｃ２またはＣＡオペコードを有する）におけるＲＥＴｎ命令は、任意選択で再利用されてもよい。ＲＥＴｎ命令は、バイト数（例えば、ｉｍｍ１６バイト）を指定するために、スタックからポップさせるべく使用される、１６ビットの即値（ｉｍｍ１６）を有する。現在、ＲＥＴｎ命令は広範には使用されておらず、軽視されている。主として、現在、データをスタックに押し込み、そこからポップさせるのではなく、データを複数のレジスタ中に有することがより一般的だからである。プロセッサは、ＲＥＴｎ命令が従来のように解釈または実装され得る第１の、またはレガシーモードを有し、バイト数を示し、スタックからポップさせるべく、１６ビットの即値が使用される。また、プロセッサは、ＲＥＴｎ命令がＲＴＲ情報（例えば、Ｋ値）を提供する１６ビットの即値を用いて解釈または実装され得る、第２の、または新しいモードを有し得る。
【００５４】
いくつかの実施形態において、システムソフトウェアからの補助により、本明細書において開示される新規な複数のリターンターゲット命令を有する複数の新しい呼び出しプロシージャは、レガシープロシージャ（例えば、レガシー共有関数ライブラリのプロシージャ）を呼び出すことができ、本明細書において開示される複数のリターンターゲット制限をなおも利用することができる場合がある。例えば、レガシープロシージャにおいて、プロシージャからのレガシーリターン命令（例えば、Ｃ３オペコードを有するレガシーＲＥＴ命令）が存在し、プロシージャからのレガシーリターン命令後の複数のビット、または１もしくは複数のバイトは、ＲＴＲ情報（例えば、Ｋ値）として使用または解釈され得る。典型的には、レガシーリターン命令（例えば、Ｃ３  ＲＥＴ命令）後に、複数のビット、または１もしくは複数のバイトが存在するであろう。例えば、メモリは、（例えば、４ＫＢの）複数のチャンクに割り当てられてもよい。リターン命令は、これらのチャンク内の別の箇所に存在することがある。典型的には、リターン命令が偶然にもチャンクの最後のバイトでなく、次のチャンクも割り当てられない限り、リターン命令後にいくつかのバイトが存在するであろう。例えば、アプリケーションが４ＫＢをアドレス０ｘ５００００に、そして更に４ＫＢをアドレス０ｘ５１０００に割り当て、リターン命令がアドレス５０ＦＦＦにある場合、次のバイトは、０ｘ５１００にあり、この次のバイトは、ＲＴＲ情報として使用され得る。逆に、リターン命令が０ｘ５１ＦＦＦにあり、０ｘ５２０００にあるメモリのチャンクが割り当てられない場合、ＲＴＲ情報のための追加のバイトは存在しないであろう。つまり、いくつかの実施形態において、レガシープロシージャにおけるプロシージャからのレガシーリターン命令後の複数のビット、または１もしくは複数のバイト（例えば、ライブラリ）は、ＲＴＲ情報として使用され得る。新しい呼び出しプロシージャは、補助ＲＴＲ情報を伴う新規なリターンターゲット命令を有し得る。
【００５５】
システムソフトウェア（制御保護フォールト時に呼び出される）は、一定の複数の場合を処理し得る。例えば、システムソフトウェアは、レガシーリターン命令がコードスペースの最後に現れ、ＲＥＴ後の仮想アドレススペースに存在する複数のバイトが物理メモリにマッピングされない状況も処理し得る。また、システムソフトウェアは、ライブラリが複数の内部リターンを有し、レガシーライブラリが複数の不明な内部リターンターゲット命令である場合を、例えば、ホワイトリストを調べ、他のロジックを使用する等により、処理し得る。いくつかの実施形態において、システムソフトウェア（例えば、オペレーティングシステム）は、複数の古いプロシージャが呼び出され、本明細書において開示される複数の制限的制御のうちの一定のものが無視されることを可能にし得ることを認識する複数のポリシーを有し得る。
【００５６】
複数の例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ
複数のプロセッサコアは、複数の異なる様式で、複数の異なる目的のために複数の異なるプロセッサにおいて実装され得る。例えば、そのような複数のコアの複数の実装としては、１）汎用計算のために意図される汎用インオーダコア、２）汎用計算のために意図される高性能の汎用アウトオブオーダコア、３）主としてグラフィックスおよび／またはサイエンティフィック（スループット）計算のために意図される特定用途用コアが挙げられ得る。複数の異なるプロセッサの実装としては、１）汎用計算のために意図される１もしくは複数の汎用インオーダコア、および／または汎用計算のために意図される１もしくは複数の汎用アウトオブオーダコアを含むＣＰＵ、および２）主としてグラフィックスおよび／またはサイエンティフィック（スループット）計算のために意図される１または複数の特定用途用コアを含むコプロセッサが挙げられ得る。そのような複数の異なるプロセッサは、複数の異なるコンピュータシステムアーキテクチャをもたらし、複数の異なるコンピュータシステムアーキテクチャとしては、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同一のパッケージにおける別個のダイ上のコプロセッサ、３）ＣＰＵと同一のダイ上のコプロセッサ（この場合、そのようなコプロセッサは、時に、統合グラフィックスおよび／もしくはサイエンティフィック（スループット）ロジック等の特定用途用ロジック、または特定用途用コア等と呼ばれる）、および４）同一のダイ上に、上述のＣＰＵ（時に、アプリケーションコアまたはアプリケーションプロセッサと呼ばれる）、上記のコプロセッサ、および更なる機能性を含み得るシステムオンチップが挙げられ得る。次に、複数の例示的なコアアーキテクチャが説明され、その後に、複数の例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
【００５７】
複数の例示的なコアアーキテクチャ
インオーダおよびアウトオブオーダコアのブロック図
図９Ａは、本発明の複数の実施形態による、例示的なインオーダパイプラインおよび例示的なレジスタリネーム、アウトオブオーダ発行／実行パイプラインの双方を図示するブロック図である。図９Ｂは、本発明の複数の実施形態による、プロセッサ内に含まれるインオーダアーキテクチャコアの例示的な実施形態、および例示的なレジスタリネーム、アウトオブオーダ発行／実行アーキテクチャコアの双方を図示するブロック図である。図９Ａ〜９Ｂにおける複数の実線のボックスは、インオーダパイプラインおよびインオーダコアを図示するが、複数の破線ボックスの任意選択の追加は、レジスタリネーム、アウトオブオーダ発行／実行パイプラインおよびコアを図示する。インオーダ態様がアウトオブオーダの態様のサブセットであることを考慮して、アウトオブオーダの態様が説明される。
【００５８】
図９Ａにおいて、プロセッサパイプライン９００は、フェッチステージ９０２、長さデコードステージ９０４、デコードステージ９０６、割り当てステージ９０８、リネームステージ９１０、スケジューリング（ディスパッチまたは発行としても知られる）ステージ９１２、レジスタ読み取り／メモリ読み取りステージ９１４、実行ステージ９１６、ライトバック／メモリライトステージ９１８、例外処理ステージ９２２、およびコミットステージ９２４を含む。
【００５９】
図９Ｂは、実行エンジンユニット９５０に結合されたフロントエンドユニット９３０を含むプロセッサコア９９０を示し、フロントエンドユニット９３０および実行エンジンユニット９５０の双方がメモリユニット９７０に結合される。コア９９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドもしくは代替的なコアタイプであってもよい。なおも別の選択肢として、コア９９０は、例えば、ネットワークもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット（ＧＰＧＰＵ）コア、グラフィックスコア等の特定用途用コアであってもよい。
【００６０】
フロントエンドユニット９３０は、命令キャッシュユニット９３４に結合された分岐予測ユニット９３２を含み、分岐予測ユニット９３２は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）９３６に結合され、命令トランスレーションルックアサイドバッファ９３６は、命令フェッチユニット９３８に結合され、命令フェッチユニット９３８は、デコードユニット９４０に結合される。デコードユニット９４０（またはデコーダ）は、複数の命令をデコードし、出力として１もしくは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を生成することができ、これらは、複数の元の命令からデコードされ、そうでなければこれらを反映し、あるいはこれらから派生する。デコードユニット９４０は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）等が挙げられるが、これらに限定されない。一実施形態において、コア９９０は、複数の一定のマクロ命令に対するマイクロコードを（例えば、デコードユニット９４０、そうでなければフロントエンドユニット９３０内に）格納する、マイクロコードＲＯＭまたは他の媒体を含む。デコードユニット９４０は、実行エンジンユニット９５０内のリネーム／アロケータユニット９５２に結合される。
【００６１】
実行エンジンユニット９５０は、リタイアメントユニット９５４および１もしくは複数のスケジューラユニット９５６のセットに結合されたリネーム／アロケータユニット９５２を含む。スケジューラユニット９５６は、複数のリザベーションステーション、中央命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット９５６は、物理レジスタファイルユニット９５８に結合される。物理レジスタファイルユニット９５９のそれぞれは、１または複数の物理レジスタファイルを表し、それらのうちの異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、状態（例えば、実行される次の命令のアドレスである命令ポインタ）等、１または複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット９５８は、複数のベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供し得る。物理レジスタファイルユニット９５８は、リタイアメントユニット９５４と重なり、レジスタリネームおよびアウトオブオーダ実行が（例えば、リオーダバッファおよびリタイアメントレジスタファイルを用いることにより、フューチャファイル、履歴バッファ、およびリタイアメントレジスタファイルを用いることにより、複数のレジスタのレジスタマップおよびプール等を用いることにより）実装され得る様々な様式を図示する。リタイアメントユニット９５４および物理レジスタファイルユニット９５８は、実行クラスタ９６０に結合される。実行クラスタ９６０は、１もしくは複数の実行ユニット９６２のセット、および１もしくは複数のメモリアクセスユニット９６４のセットを含む。複数の実行ユニット９６２は、様々なオペレーション（例えば、シフト、加算、減算、乗算）を、様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に基づいて実行し得る。いくつかの実施形態は、複数の特定の関数または複数のセットの関数に専用のいくつかの実行ユニットを含み得るが、他の実施形態は、１つのみ実行ユニットまたは複数の実行ユニットを含み、それらの全てがあらゆる関数を実行し得る。スケジューラユニット９５６、物理レジスタファイルユニット９５８、および実行クラスタ９６０は、おそらくは複数であるものとして示される。複数の一定の実施形態は、複数の一定のタイプのデータ／オペレーションのための複数の別個のパイプライン（例えば、各々が、自身のスケジューラユニット、物理レジスタファイルユニット、および／または実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプライン。別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット９６４を有する複数の一定の実施形態が実装される）を作成するからである。別個の複数のパイプラインが使用される場合、これらのパイプラインのうち１または複数は、アウトオブオーダ発行／実行であり、残りはインオーダであり得ることを理解されたい。
【００６２】
複数のメモリアクセスユニット９６４のセットは、メモリユニット９７０に結合され、メモリユニット９７０は、レベル２（Ｌ２）キャッシュユニット９７６に結合されたデータキャッシュユニット９７４に結合されたデータＴＬＢユニット９７２を含む。例示的な一実施形態において、複数のメモリアクセスユニット９６４は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含み、それらのそれぞれは、メモリユニット９７０におけるデータＴＬＢユニット９７２に結合され得る。命令キャッシュユニット９３４は、メモリユニット９７０におけるレベル２（Ｌ２）キャッシュユニット９７６に更に結合される。Ｌ２キャッシュユニット９７６は、１または複数の他のレベルのキャッシュに、そして最終的にはメモリに結合される。
【００６３】
例として、例示的なレジスタリネーム、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン９００を以下のように実装し得る。１）命令フェッチ９３９は、フェッチおよび長さデコードステージ９０２および９０４を実行する。２）デコードユニット９４０はデコードステージ９０６を実行する。３）リネーム／アロケータユニット９５２は、割り当てステージ９０９およびリネームステージ９１０を実行する。４）スケジューラユニット９５６は、スケジューリングステージ９１２を実行する。５）物理レジスタファイルユニット９５９およびメモリユニット９７０は、レジスタ読み取り／メモリ読み取りステージ９１４を実行し、実行クラスタ９６０は、実行ステージ９１６を実行する。６）メモリユニット９７０および物理レジスタファイルユニット９５９は、ライトバック／メモリライトステージ９１９を実行する。７）様々なユニットは、例外処理ステージ９２２に関与してもよく、８）リタイアメントユニット９５４および物理レジスタファイルユニット９５９は、コミットステージ９２４を実行する。
【００６４】
コア９９０は、本明細書において説明される命令を含む、１または複数の命令セット（例えば、ｘ８６命令セット（複数のより新しいバージョンを追加されたいくつかの拡張を伴う）、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｙのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セット（ＮＥＯＮ等の複数の選択的追加拡張を伴う）をサポートし得る。一実施形態において、コア９９０は、パックドデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、それにより、パックドデータを用いて実行される多くのマルチメディアアプリケーションにより使用される複数のオペレーションを可能にする。
【００６５】
コアは、マルチスレッディング（２もしくはそれ以上の並列セットのオペレーションもしくはスレッドを実行する）をサポートし、タイムスライスマルチスレッド化、同時マルチスレッド化（１つの物理コアが、物理コアが同時に、マルチスレッド化する複数のスレッドのそれぞれに対する論理コアを提供する）、またはそれらの組み合わせ（例えば、タイムスライスフェチおよびデコード、ならびにインテル（登録商標）ハイパースレッド化技術等における以後の同時マルチスレッド化）を含む様々な様式でサポートし得ることを理解されたい。
【００６６】
レジスタリネームは、アウトオブオーダ実行の文脈において説明されるが、レジスタリネームは、インオーダアーキテクチャにおいて使用されてもよいことを理解されたい。プロセッサの図示される実施形態は、別個の命令および複数のデータキャッシュユニット９３４／９７４、ならびに共有Ｌ２キャッシュユニット９７６も含むが、複数の代替的な実施形態は、例えば、レベル１（Ｌ１）内部キャッシュまたは内部キャッシュの複数のレベル等、複数の命令およびデータの双方に対する１つの内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュ、ならびにコアおよび／もしくはプロセッサの外部にある外部キャッシュの組み合わせを含み得る。あるいは、キャッシュのすべては、コアおよび／またはプロセッサの外部にあってもよい。
【００６７】
具体的な例示的インオーダコアアーキテクチャ
図１０Ａ〜１０Ｂは、コアが、チップにおけるいくつかのロジックブロックのうちの１つ（同一タイプおよび／または複数の異なるタイプの他のコアを含む）である、より具体的な例示的インオーダコアアーキテクチャのブロック図を図示する。複数のロジックブロックは、アプリケーションに応じて、高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を介していくつかの固定機能ロジック、メモリＩ／Ｏインターフェース、および他の必要なＩ／Ｏロジックと通信する。
【００６８】
図１０Ａは、本発明の複数の実施形態による、オンダイ相互接続ネットワーク１００２、およびレベル２（Ｌ２）キャッシュ１００４のローカルサブセットへの接続を伴うシングルプロセッサコアのブロック図である。一実施形態において、命令デコーダ１０００は、パックドデータ命令セット拡張を用いるｘ８６命令セットをサポートする。Ｌ１キャッシュ１００６は、スカラユニットおよびベクトルユニットに至るキャッシュメモリへの複数の低レイテンシーアクセスを可能にする。一実施形態において（設計を簡略化するべく）、スカラユニット１００８およびベクトルユニット１０１０は、別個の複数のレジスタセット（それぞれ、複数のスカラレジスタ１０１２および複数のベクトルレジスタ１０１４）を使用し、それらの間で転送されるデータは、メモリに書き込まれ、その後、レベル１（Ｌ１）キャッシュ１００６からリードバックされる。本発明の代替的な複数の実施形態は、異なるアプローチ（例えば、１つのレジスタセットを使用し、またはライトバックおよびリードバックされることなく、２つのレジスタファイルの間で、データが転送されることを可能にする通信パスを含む）を使用し得る。
【００６９】
Ｌ２キャッシュ１００４のローカルサブセットは、複数の別個のローカルサブセットに分割され、１プロセッサコア毎に１つのグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュ１００４の自身のローカルサブセットへの直接アクセスパスを有する。プロセッサコアにより読み取られるデータは、Ｌ２キャッシュサブセット１００４内に格納され、自身の複数のローカルＬ２キャッシュサブセットにアクセスする他の複数のプロセッサコアと並列に迅速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、自身のＬ２キャッシュサブセット１００４内に格納され、必要な場合に他の複数のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを保証する。リングネットワークは、双方向性であり、複数のプロセッサコア、Ｌ２キャッシュ、および他のロジックブロック等のエージェントがチップ内で互いに通信することを可能にする。各リングデータパスは、１方向毎に１０１２ビットワイドである。
【００７０】
図１０Ｂは、本発明の複数の実施形態による、図１０Ａにおけるプロセッサコアの一部の拡大図である。図１０Ｂは、Ｌ１キャッシュ１００４のＬ１データキャッシュ１００６Ａ部分、ならびにベクトルユニット１０１０および複数のベクトルレジスタ１０１４に関する更なる詳細を含む。具体的には、ベクトルユニット１０１０は、１６ワイドベクトル処理ユニット（ＶＰＵ）（１６ワイドＡＬＵ１０２８を参照されたい）であり、これは、整数命令、単精度浮動命令、および倍精度浮動命令のうちの１または複数を実行する。ＶＰＵは、スウィズルユニット１０２０を用いる複数のレジスタ入力、複数の数値変換ユニット１０２２Ａ〜Ｂを用いる数値変換、およびレプリケーションユニット１０２４を用いるメモリ入力に関するレプリケーションをスウィズルすることをサポートする。複数のライトマスクレジスタ１０２６は、複数のベクトル書き込みの結果をプレディケートすることを可能にする。
【００７１】
統合メモリコントローラおよびグラフィックスを有するプロセッサ
図１１は、本発明の複数の実施形態による、２つ以上のコア、統合メモリコントローラ、および統合グラフィックスを有し得る、プロセッサ１１００のブロック図である。図１１における複数の実線のボックスは、シングルコア１１０２Ａを有するプロセッサ１１００、システムエージェント１１１０、１または複数のバスコントローラユニット１１１６のセットを図示するが、複数の破線ボックスの選択的追加は、複数のコア１１０２Ａ〜Ｎ、システムエージェントユニット１１１０における１または複数の統合メモリコントローラユニット１１１４のセット、および特定用途用ロジック１１０８を有する代替的なプロセッサ１１００を図示する。
【００７２】
従って、プロセッサ１１００の複数の異なる実装は、１）統合グラフィックスおよび／またはサイエンティフィック（スループット）ロジック（１または複数のコアを含み得る）である特定用途用ロジック１１０８、および１または複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、２つの組み合わせ）である複数のコア１１０２Ａ〜Ｎを用いるＣＰＵ、２）主としてグラフィックスおよび／またはサイエンティフィック（スループット）用に意図される多数の特定用途用コアである複数のコア１１０２Ａ〜Ｎを用いるコプロセッサ、および３）多数の汎用インオーダコアである複数のコア１１０２Ａ〜Ｎを用いるコプロセッサを含み得る。従って、プロセッサ１１００は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループットのｍａｎｙ  ｉｎｔｅｇｒａｔｅｄ  ｃｏｒｅ（ＭＩＣ）コプロセッサ（３０またはそれ以上のコアを含む）、エンベデッドプロセッサ等の汎用プロセッサ、コプロセッサ、または特定用途用プロセッサであってもよい。プロセッサは、１または複数のチップ上に実装されてもよい。プロセッサ１１００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳ等、いくつかの処理技術のいずれかを用いる１または複数の基板の一部であってもよく、および／またはその上に実装されてもよい。
【００７３】
メモリ階層は、複数のコア内の１または複数のレベルのキャッシュ、共有キャッシュユニット１１０６のセットまたは１もしくは複数、および複数の統合メモリコントローラユニット１１１４のセットに結合された外部メモリ（図示せず）を含む。複数の共有キャッシュユニット１１０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）等の１または複数の中間レベルのキャッシュ、キャッシュの他の複数のレベル、最後のレベルのキャッシュ（ＬＬＣ）、および／またはこれらの組み合わせを含み得る。一実施形態において、リングベースの相互接続ユニット１１１２は、統合グラフィックスロジック１１０８、複数の共有キャッシュユニット１１０６のセット、およびシステムエージェントユニット１１１０／統合メモリコントローラユニット１１１４を相互接続し、複数の代替的な実施形態は、そのような複数のユニットを相互接続する、任意の数の周知技術を使用し得る。一実施形態において、コヒーレンシは、１もしくは複数のキャッシュユニット１１０６と複数のコア１１０２Ａ〜Ｎとの間で維持される。
【００７４】
いくつかの実施形態において、複数のコア１１０２Ａ〜Ｎのうち１または複数は、マルチスレッド化することができる。システムエージェント１１１０は、複数のコア１１０２Ａ〜Ｎを調整および操作するそれらのコンポーネントを含む。システムエージェントユニット１１１０は、例えば、電力制御ユニット（ＰＣＵ）およびディスプレイユニットを含んでもよい。ＰＣＵは、複数のコア１１０２Ａ〜Ｎおよび統合グラフィックスロジック１１０８の電力状態を調整するのに必要とされるロジックおよび複数のコンポーネントであってもよく、またはこれらを含んでもよい。ディスプレイユニットは、１または複数の外部接続ディスプレイを駆動するためのものである。
【００７５】
複数のコア１１０２Ａ〜Ｎは、アーキテクチャ命令セットの観点からは同種または異種であり得る。つまり、複数のコア１１０２Ａ〜Ｎのうち２またはそれ以上は、同一の命令セットを実行することができるが、他のものは、その命令セットのサブセット、または異なる命令セットのみを実行し得る。
【００７６】
複数の例示的なコンピュータアーキテクチャ
図１２〜１５は、複数の例示的コンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯用情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯式メディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスのための当技術分野で既知の他の複数のシステム設計および構成も、好適である。一般に、本明細書において開示されるプロセッサおよび／または他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが、概ね好適である。
【００７７】
ここで図１２を参照すると、本発明の一実施形態による、システム１２００のブロック図が示される。システム１２００は、１または複数のプロセッサ１２１０、１２１５を含み、１または複数のプロセッサ１２１０、１２１５は、コントローラハブ１２２０に結合され得る。一実施形態において、コントローラハブ１２２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ）１２９０および入力／出力ハブ（ＩＯＨ）１２５０（複数の別個のチップ上にあり得る）を含む。ＧＭＣＨ１２９０は、メモリコントローラおよびグラフィクスコントローラを含み、これらにメモリ１２４０およびコプロセッサ１２４５が結合される。ＩＯＨ１２５０は、入力／出力（Ｉ／Ｏ）デバイス１２６０をＧＭＣＨ１２９０に結合する。あるいは、メモリおよび複数のグラフィクスコントローラの１つまたは双方は、（本明細書において説明されるように）プロセッサ内に統合され、メモリ１２４０およびコプロセッサ１２４５は、プロセッサ１２１０に直接に結合され、シングルチップ内のコントローラハブ１２２０は、ＩＯＨ１２５０と結合される。
【００７８】
複数の追加のプロセッサ１２１５の選択的性質は、図１２において破線で示される。各プロセッサ１２１０、１２１５は、本明細書において説明される複数の処理コアのうち１または複数を含み、いくつかのバージョンのプロセッサ１１００であり得る。
【００７９】
メモリ１２４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、または２つの組み合わせであってもよい。少なくとも一実施形態については、コントローラハブ１２２０は、フロントサイドバス（ＦＳＢ）等のマルチドロップバス、ＱｕｉｃｋＰａｔｈ相互接続（ＱＰＩ）等のポイントツーポイントインターフェース、または類似の接続１２９５を介してプロセッサ１２１０、１２１５と通信する。
【００８０】
一実施形態において、コプロセッサ１２４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、エンベデッドプロセッサ等の特定用途用プロセッサである。一実施形態において、コントローラハブ１２２０は、統合グラフィックスアクセラレータを含み得る。
【００８１】
アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等を含む、性能の測定基準の範囲の観点において、物理リソース１２１０、１２１５の間には様々な差異が存在し得る。
【００８２】
一実施形態において、プロセッサ１２１０は、通常のタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令が、複数の命令に埋め込まれ得る。プロセッサ１２１０は、取り付けられたコプロセッサ１２４５により実行されるべきタイプであるものとして、これらのコプロセッサ命令を認識する。従って、プロセッサ１２１０は、コプロセッサバスまたは他の相互接続上で、これらのコプロセッサ命令（または複数のコプロセッサ命令を表す複数の制御信号）をコプロセッサ１２４５に発行する。コプロセッサ１２４５は、複数の受信済みコプロセッサ命令を受け取り、実行する。
【００８３】
ここで図１３を参照すると、本発明の実施形態による第１のより具体的な例示的システム１３００のブロック図が示される。図１３に示されるように、マルチプロセッサシステム１３００は、ポイントツーポイント相互接続システムであり、第１のプロセッサ１３７０、およびポイントツーポイント相互接続１３５０を介して結合される第２のプロセッサ１３８０を含む。プロセッサ１３７０および１３８０のそれぞれは、いくつかのバージョンのプロセッサ１１００であり得る。本発明の一実施形態において、プロセッサ１３７０および１３８０はそれぞれ、プロセッサ１２１０および１２１５であるが、コプロセッサ１３３８は、コプロセッサ１２４５である。別の実施形態において、プロセッサ１３７０および１３８０はそれぞれ、プロセッサ１２１０およびコプロセッサ１２４５である。
【００８４】
統合メモリコントローラ（ＩＭＣ）ユニット１３７２および１３８２をそれぞれ含む、プロセッサ１３７０および１３８０が示される。また、プロセッサ１３７０は、複数のバスコントローラユニットの一部として、ポイントツーポイント（Ｐ―Ｐ）インターフェース１３７６および１３７８を含む。同様に、第２のプロセッサ１３８０は、Ｐ−Ｐインターフェース１３８６および１３８８を含む。プロセッサ１３７０、１３８０は、複数のＰ―Ｐインターフェース回路１３７８、１３８８を用いて、ポイントツーポイント（Ｐ―Ｐ）インターフェース１３５０を介して情報を交換し得る。図１３に示されるように、ＩＭＣ１３７２および１３８２は、複数のプロセッサをそれぞれのメモリ、すなわち、メモリ１３３２およびメモリ１３３４に結合させるが、メモリ１３３２およびメモリ１３３４は、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る。
【００８５】
プロセッサ１３７０、１３８０はそれぞれ、ポイントツーポイントインターフェース回路１３７６、１３９４、１３８６、１３９８を用いて、個々のＰ−Ｐインターフェース１３５２、１３５４を介してチップセット１３９０と情報を交換し得る。チップセット１３９０は、任意選択で、高性能インターフェース１３３９を介してコプロセッサ１３３８と情報を交換してもよい。一実施形態において、コプロセッサ１３３８は、例えば、高スループットＭＩＣプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、エンベデッドプロセッサ等の特定用途用プロセッサである。
【００８６】
共有キャッシュ（図示せず）は、どちらかのプロセッサ内または双方のプロセッサの外側に含まれるが、Ｐ―Ｐ相互接続を介して複数のプロセッサとなおも接続され得、従って、プロセッサが低電力モードに置かれると、どちらかまたは双方のプロセッサのローカルキャッシュ情報は、共有キャッシュ内に格納され得る。
【００８７】
チップセット１３９０は、インターフェース１３９６を介して第１のバス１３１６に結合され得る。一実施形態において、第１のバス１３１６は、周辺構成要素相互接続（ＰＣＩ）バス、またはＰＣＩ  Ｅｘｐｒｅｓｓバスまたは別の第３世代Ｉ／Ｏ相互接続バス等のバスであり得るが、本発明の範囲は、そのようには限定されない。
【００８８】
図１３に示されるように、様々なＩ／Ｏデバイス１３１４は、第１のバス１３１６を第２のバス１３２０に結合するバスブリッジ１３１８と共に第１のバス１３１６に結合され得る。一実施形態において、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックスアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット等）、フィールドプログラマブルゲートアレイ、またはその他のプロセッサ等、１または複数の追加のプロセッサ１３１５は、第１のバス１３１６に結合される。一実施形態において、第２のバス１３２０は、低ピンカウント（ＬＰＣ）バスであり得る。様々なデバイスは、一実施形態において、例えば、キーボードおよび／もしくはマウス１３２２、通信デバイス１３２７、ならびに複数の命令／コードおよびデータ１３３０を含み得るディスクドライブもしくは他の大容量ストレージデバイス等のストレージユニット１３２８を含む第２のバス１３２０に結合され得る。更に、オーディオＩ／Ｏ１３２４は、第２のバス１３２０に結合されてもよい。他の複数のアーキテクチャが可能であることに留意されたい。例えば、図１３のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
【００８９】
ここで図１４を参照すると、本発明の実施形態による、第２のより具体的な例示的システム１４００のブロック図が示される。図１３および１４における複数の同一要素は、複数の同一の参照番号を有し、図１３の複数の一定の態様は、図１４の他の複数の態様を不明瞭にするのを避けるべく、図１４から省略されている。
【００９０】
図１４は、プロセッサ１３７０、１３８０が統合メモリおよびＩ／Ｏ制御ロジック（「ＣＬ」）１３７２および１３８２をそれぞれ含み得ることを図示する。従って、ＣＬ１３７２、１３８２は、統合メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図１４は、メモリ１３３２、１３３４のみがＣＬ１３７２、１３８２に結合されるのみならず、複数のＩ／Ｏデバイス１４１４も制御ロジック１３７２、１３８２に結合されることを図示する。複数のレガシーＩ／Ｏデバイス１４１５は、チップセット１３９０に結合される。
【００９１】
ここで図１５を参照すると、本発明の実施形態による、ＳｏＣ１５００のブロック図が示される。図１１における複数の類似の要素は、同一の参照番号を有する。また、複数の破線ボックスは、より高度なＳｏＣにおける複数の選択的特徴である。図１５において、相互接続ユニット１５０２は、１もしくは複数のコア２０２Ａ〜Ｎおよび共有キャッシュユニット１１０６のセットを含むアプリケーションプロセッサ１５１０、システムエージェントユニット１１１０、バスコントローラユニット１１１６、統合メモリコントローラユニット１１１４、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得るコプロセッサ１５２０のセットまたは１もしくは複数、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１５３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット１５３２、および１または複数の外部ディスプレイを結合するディスプレイユニット１５４０に結合される。一実施形態において、コプロセッサ１５２０は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、エンベデッドプロセッサ等の特定用途用プロセッサを含む。
【００９２】
本明細書において開示されるメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装アプローチの組み合わせで実装され得る。本発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性および不揮発性メモリ、ならびに／または複数のストレージ要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを有する複数のプログラマブルシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装され得る。
【００９３】
図１３で図示されるコード１３３０等のプログラムコードは、複数の命令を入力し、本明細書において開示される複数の関数を実行し、出力情報を生成するべく適用され得る。出力情報は、既知の様式で、１または複数の出力デバイスに適用され得る。本願において、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサ等のプロセッサを有するいずれのシステムも含む。
【００９４】
プログラムコードは、処理システムと通信するべく、ハイレベルプロシージャ型またはオブジェクト指向プログラミング言語で実装されてもよい。また、プログラムコードは、所望であれば、アセンブリまたは機械語で実装されてもよい。実際には、本明細書において説明される複数のメカニズムは、範囲において、いずれの特定のプログラミング言語にも限定されない。いずれの場合にも、言語は、コンパイル型またはインタープリタ型言語であってもよい。
【００９５】
少なくとも一実施形態の１または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体上に格納された複数の代表的命令により実装され得、複数の代表的命令は、機械により読み取られると、機械に、本明細書において説明される複数の技術を実行するロジックを作成させる。「ＩＰコア」として知られたそのような複数の表現は、有形機械可読媒体上に格納され、様々な顧客、または実際にロジックまたはプロセッサを作製する複数の製造機械にロードする複数の製造設備に提供され得る。
【００９６】
そのような機械可読ストレージ媒体としては、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ―ＲＯＭ）、書き換え可能コンパクトディスク（ＣＤ―ＲＷ）、および光磁気ディスク等、その他のタイプのディスクを含むストレージ媒体、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、および相変化メモリ（ＰＣＭ）等の半導体デバイス、磁気もしくは光カード、または複数の電子的命令を格納するのに好適なその他のタイプの媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形な複数の構成の物品が挙げられ得るが、これらに限定されない。
【００９７】
従って、本発明の複数の実施形態は、本明細書において説明される複数の構造、回路、装置、プロセッサ、および／またはシステムの特徴を定義する、ハードウェア記述言語（ＨＤＬ）等の複数の命令または設計データを含む、非一時的で有形の機械可読媒体も含む。そのような複数の実施形態は、プログラム製品とも呼ばれ得る。
【００９８】
エミュレーション（バイナリトランスレーション、コードモーフィング等を含む）
いくつかの場合に、命令変換器は、ソース命令セットからターゲット命令セットに、命令を変換するべく使用され得る。例えば、命令変換器は、命令を、コアにより処理される１または複数の他の命令にトランスレート（例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いる）、モーフィング、エミュレートし、そうでなければ変換し得る。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装され得る。命令変換器は、プロセッサ上にあってもよく、プロセッサから離れてもよく、または一部がプロセッサ上にあり、一部がプロセッサから離れてもよい。
【００９９】
図１６は、本発明の複数の実施形態による、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の使用を対比するブロック図である。図示される実施形態において、命令変換器は、ソフトウェア命令変換器であるが、別法では、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装され得る。図１６は、ｘ８６コンパイラ１６０４を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコア１６１６を用いるプロセッサによりネイティブに実行され得るｘ８６バイナリコード１６０６を生成し得る、ハイレベル言語１６０２のプログラムを示す。少なくとも１つのｘ８６命令セットコア１６１６を用いるプロセッサは、少なくとも１つのｘ８６命令セットコアを用いるインテル（登録商標）プロセッサと実質的に同一の結果を実現するべく、（１）インテル（登録商標）ｘ８６命令セットコアの命令セットの実質的部分、または（２）少なくとも１つのｘ８６命令セットコアを用いるインテル（登録商標）プロセッサ上で起動することを目的とする、複数のオブジェクトコードバージョンの複数のアプリケーションまたは他のソフトウェアを互換的に実行し、そうでなければ処理することにより、少なくとも１つのｘ８６命令セットコアを用いるインテル（登録商標）プロセッサと実質的に同一の複数の機能を実行し得るいずれのプロセッサも表す。ｘ８６コンパイラ１６０４は、追加のリンケージ処理を用い、もしくは用いずに、少なくとも１つのｘ８６命令セットコア１６１６を用いるプロセッサ上で実行され得る、ｘ８６バイナリコード１６０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図１６は、代替的な命令セットコンパイラ１６０８を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコア１６１４を用いないプロセッサ（例えば、カルフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｙのＭＩＰＳ命令セットを実行し、および／またはカリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セットを実行する複数のコアを用いるプロセッサ）によりネイティブに実行され得る、代替的な命令セットバイナリコード１６１０を生成し得る、ハイレベル言語１６０２のプログラムを示す。命令変換器１６１２は、ｘ８６バイナリコード１６０６を、ｘ８６命令セットコア１６１４を用いないプロセッサによりネイティブに実行され得るコードに変換するべく、使用される。この変換済みコードは、代替的な命令セットバイナリコード１６１０と同一である可能性は低い。これを行うことができる命令変換器は、作製するのが困難なためである。しかし、変換済みコードは、汎用オペレーションを遂行し、代替的な命令セットの複数の命令からなるであろう。従って、命令変換器１６１２は、エミュレーション、シミュレーション、またはその他の処理により、ｘ８６命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがｘ８６バイナリコード１６０６を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
【０１００】
本明細書において説明される装置のいずれかについて説明される複数の構成要素、特徴、および詳細は、また、そのような装置により、および／またはそのような装置と共に実行される、本明細書において説明される複数の方法のいずれかにおいて任意選択で使用され、および／またはこれに適用され得る。本明細書において説明されるプロセッサのいずれかは、本明細書において開示される複数のコンピュータシステムまたは他のシステムのいずれかに含まれ得る。いくつかの実施形態において、複数の命令は、本明細書において開示される複数の命令フォーマットの複数の特徴または詳細を有し得るが、これは必須ではない。
【０１０１】
明細書および特許請求の範囲において、「結合される」および／または「接続される」という用語は、それらの派生語と共に、使用されることがある。これらの用語は、互いの同義語として意図されない。むしろ、複数の実施形態において、「接続される」は、２またはそれ以上の要素が互いに直接物理的に、および／または電気的に接触していることを示すべく使用され得る。「結合される」は、２またはそれ以上の要素が互いに直接物理的に、および／または電気的に接触していることを意味し得る。しかし、「結合された」は、２またはそれ以上の要素が互いに直接接触しないが、互いに協働し、または相互作用することも意味し得る。例えば、リターンターゲット制限ユニットは、１または複数の介在部品を介してデコードユニットと結合され得る。複数の図面において、複数の矢印は、複数の接続および結合を示すべく使用される。
【０１０２】
「および／または」という用語が使用されることがある。本明細書において使用されるように、「および／または」という用語は、一方もしくは他方、または双方を意味する（例えば、Ａおよび／またはＢは、ＡもしくはＢ、またはＡおよびＢの双方を意味する）。
【０１０３】
上記の説明において、複数の実施形態の完全な理解を提供するべく、複数の具体的な詳細が記載される。しかし、他の複数の実施形態は、これらの具体的な詳細のいくつかを用いることなく実施され得る。本発明の範囲は、上記で提供された複数の具体的な例により決定されるのではなく、以下の特許請求の範囲により決定されるものである。他の複数の例において、複数の周知の回路、構造、デバイス、およびオペレーションは、説明の理解を不明瞭にするのを避けるべく、ブロック図の形式で、および／または詳細なしで示されている。適切とみなされる場合には、複数の参照番号、または複数の参照番号の最後の部分が、複数の図面中で反復され、対応する、または類似の複数の要素を示し、複数の要素は、特定され、そうでなければ明白に明らかでない限り、任意選択で類似または同一の複数の特性を有し得る。
【０１０４】
様々なオペレーションおよび方法が説明されている。複数の方法のいくつかは、フロー図において、比較的基本の形態で記載されているが、複数のオペレーションが、任意選択で複数の方法に追加され、および／またはこれらから取り除かれてもよい。加えて、複数のフロー図は、複数の実施形態による、複数のオペレーションの特定の順序を示すが、その順序は、例示的である。複数の代替的実施形態は、異なる順序で複数のオペレーションを実行し、一定の複数のオペレーションを組み合わせ、一定の複数のオペレーションを重複させるなどすることができる。
【０１０５】
一定の複数のオペレーションは、ハードウェアコンポーネントにより実行されてもよく、または複数のオペレーションを実行する複数の命令を用いてプログラミングされた機械、回路、またはハードウェアコンポーネント（例えば、プロセッサ、プロセッサの一部、回路等）を生じさせ、および／またはもたらすべく使用され得る機械実行可能、または回路実行可能な複数の命令で実施されてもよい。また、複数のオペレーションは、任意選択で、ハードウェアおよびソフトウェアの組み合わせにより実行されてもよい。プロセッサ、機械、回路、またはハードウェアは、命令を実行および／または処理し、命令に応答して結果を格納するように動作可能な、具体的もしくは特定の回路もしくは他のロジック（例えば、ファームウェアおよび／またはソフトウェアと潜在的に組み合わされるハードウェア）を含んでもよい。
【０１０６】
いくつかの実施形態は、機械可読媒体を含む製造物（例えば、コンピュータプログラム製品）を含む。媒体は、機械により可読な形式の情報を提供し、例えば、格納するメカニズムを含み得る。機械可読媒体は、機械により実行されたときおよび／または場合に、機械に、本明細書において開示される複数のオペレーション、方法、または技術のうち１つを実行させ、および／またはこれを実行する機械をもたらさせるように動作可能な命令または複数の命令のシーケンスを提供し、または機械可読媒体上に格納させ得る。機械可読媒体は、本明細書において開示される複数の命令の複数の実施形態の１または複数を格納し、そうでなければ提供し得る。
【０１０７】
いくつかの実施形態において、機械可読媒体は、有形および／または非一時的機械可読媒体を含み得る。例えば、有形および／または非一時的機械可読媒体としては、フロッピー（登録商標）ディスク、光ストレージ媒体、光ディスク、光データストレージデバイス、ＣＤ―ＲＯＭ、磁気ディスク、光磁気ディスク、リードオンリメモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データストレージ材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイス等が挙げられ得る。非一時的機械可読媒体は、一時的伝播信号からならない。
【０１０８】
好適な複数の機械の例としては、汎用プロセッサ、特定用途用プロセッサ、命令処理装置、デジタルロジック回路、集積回路等が挙げられるが、これらに限定されない。好適な複数の機械のなおも他の例としては、プロセッサ、命令処理装置、デジタルロジック回路、または集積回路を含む、コンピューティングデバイスまたは他の電子デバイスが挙げられる。そのような複数のコンピューティングデバイスおよび電子デバイスの例としては、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス（例えば、ルータおよびスイッチ）、モバイルインターネットデバイス（ＭＩＤ）、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、およびビデオゲームコントローラが挙げられるが、これらに限定されない。
【０１０９】
本明細書全体での「一実施形態」、「実施形態」、「１または複数の実施形態」、「いくつかの実施形態」への言及は、例えば、特定の特徴が本発明の実施に含まれ得るが、含まれることを必ずしも要求されないことを示す。同様に、説明において、様々な特徴は、時に、本開示を一連で説明し、様々な発明の態様の理解に役立つ目的のために、単一の実施形態、図面、またはそれらの説明に分類される。しかし、開示の本方法は、本発明が各請求項において明示的に列挙するよりも多くの特徴を要求するとの意図を反映するものとは解釈されるものではない。むしろ、以下の特許請求の範囲が反映するように、発明の複数の態様は、単一の開示される実施形態の全ての特徴よりも少ないものに存する。従って、詳細な説明に従う特許請求の範囲は、各請求項が本発明の別個の実施形態としてそれ自身存在する状態で、この詳細な説明に明示的に組み込まれる。
【０１１０】
例示的な複数の実施形態
以下の複数の例は、更なる複数の実施形態に関する。複数の例における具体的事柄は、１または複数の実施形態のいずれの箇所でも使用し得る。
【０１１１】
例１は、プロシージャからのリターンターゲット制限リターン（ＲＴＲリターン）命令をデコードするデコードユニットを含むプロセッサである。プロセッサは、デコードユニットと結合され、ＲＴＲリターン命令に応答して、ＲＴＲリターン命令による、ＲＴＲリターン命令に対応するリターンアドレスにおける命令への制御フロー移動の試みを制限するか否かを決定するリターンターゲット制限ユニットも備える。決定は、リターンアドレスにおける命令のタイプのＲＴＲリターン命令に対する互換性に基づき、ＲＴＲリターン命令の第１のリターンターゲット制限情報（ＲＴＲ情報）のリターンアドレスにおける命令の第２のＲＴＲ情報に対する互換性に基づく。また、プロセッサは、リターンターゲット制限ユニットおよびデコードユニットと結合された制御フロー移動ユニットを含み、制御フロー移動ユニットは、リターンターゲット制限ユニットが試みを制限しないことを決定すると、ＲＴＲリターン命令に応答して、リターンアドレスにおける命令に制御フローを移動させる。
【０１１２】
例２は、例１のプロセッサを備え、リターンターゲット制限ユニットは、第１のＲＴＲ情報に対応する第１の値が第２のＲＴＲ情報に対応する第２の値と一致する場合に、試みを制限しないことを決定し、第１の値が第２の値と一致しない場合に、試みを制限することを決定する。
【０１１３】
例３は、例２のプロセッサを備え、リターンターゲット制限ユニットは、第１の値が第２の値に等しい場合に、試みを制限しないことを決定し、第１の値が第２の値に等しくない場合に、試みを制限することを決定する。
【０１１４】
例４は、例１のプロセッサを備え、リターンターゲット制限ユニットは、リターンアドレスにおける命令のオペコードが、ＲＴＲリターン命令と互換性があるタイプの全ての命令に対応する５つ以下のオペコードのセットのうちの１つでない場合に、試みを制限することを決定する。複数の命令は、ＲＴＲリターン命令に対する潜在的に許可し得るリターンターゲットを表示するべく使用される。
【０１１５】
例５は、例１のプロセッサを備え、ＲＴＲリターン命令は、第１のＲＴＲ情報を提供する即値を有し、リターンアドレスにおける命令は、第２のＲＴＲ情報を提供する即値を有する。
【０１１６】
例６は、例１から５のいずれか１つのプロセッサを含み、リターンターゲット制限ユニットが試みを制限しないことを決定する場合に、プロセッサは、リターンアドレスにおける命令をノーオペレーションとして実行する。
【０１１７】
例７は、例１から５のいずれか１つのプロセッサを備え、リターンターゲット制限ユニットが試みを制限することを決定する場合に、リターンターゲット制限ユニットは、例外、フォールト、および割り込みのうち１つを生じさせる。
【０１１８】
例８は、例１のプロセッサを備え、デコードユニットは、即値、およびＲＴＲリターン命令前の命令セットに存在したプロシージャからのレガシーリターン命令と同一であるオペコードを有する、ＲＴＲリターン命令をデコードする。プロシージャからのレガシーリターン命令は、元々、スタックからポップされる即値により示されるバイト数を生じさせるものであった。プロセッサは、第１のＲＴＲ情報に対する即値を使用する。
【０１１９】
例９は、例１のプロセッサを備え、デコードユニットは、即値、およびＲＴＲリターン命令前の命令セットに存在したプロシージャからのレガシーリターン命令と同一であるオペコードを有する、ＲＴＲリターン命令をデコードする。プロセッサは、即値が第１のＲＴＲ情報に対応する第１のモードと、即値が無視される第２のモードとを任意選択で有する。
【０１２０】
例１０は、プロシージャからのリターンターゲット制限リターン（ＲＴＲリターン）命令を受信する段階を備えるプロセッサにおける方法である。ＲＴＲリターン命令に応答して、ＲＴＲリターン命令による、ＲＴＲリターン命令に対応するリターンアドレスにおける命令への制御フロー移動の試みを制限する。制限は、リターンアドレスにおける命令のタイプにＲＴＲリターン命令との互換性がないと判断する段階、およびＲＴＲリターン命令により示された第１のリターンターゲット制限情報（ＲＴＲ情報）にリターンアドレスにおける命令により示される第２のＲＴＲ情報との互換性がないと判断する段階のうち少なくとも１つに基づく。
【０１２１】
例１１は、例１０の方法を備え、制限する段階は、ＲＴＲリターン命令のＲＴＲ情報がリターンアドレスにおける命令のＲＴＲ情報に等しくないとの判断に基づく。
【０１２２】
例１２は、例１０の方法を備え、制限する段階は、リターンアドレスにおける命令のオペコードがＲＴＲリターン命令と互換性があるタイプの全ての命令に対応する、５つ以下のオペコードのセットのうちの１つではないとの判断に基づく。
【０１２３】
例１３は、例１０の方法を備え、受信する段階は、第１のＲＴＲ情報を提供する即値を有するＲＴＲリターン命令を受信する段階を有する。
【０１２４】
例１４は、第１のタイプのコードを受信するコード受信モジュールを含む、コード分析システムである。コード分析モジュールは、コード受信モジュールに結合され、第１のタイプのコードにおける全てのプロシージャからのリターンターゲット制限リターン（ＲＴＲリターン）命令が、第１のタイプについては許可されるが、１または複数の異なるタイプのコードについては許可されない、リターンターゲット制限情報（ＲＴＲ情報）のみを示すか否かを判断する。
【０１２５】
例１５は、例１４のコード分析システムを備え、第１のタイプは、非特権コード、および特権コードを含む１または複数の異なるタイプのコードを含む。
【０１２６】
例１６は、例１４のコード分析システムを備え、第１のタイプは、ユーザレベルアプリケーションを有し、１もしくは複数の異なるタイプのコードは、複数のユーザレベルのライブラリコード、デバイスドライバコード、システムレベルライブラリコード、およびオペレーティングシステムコードを有する。
【０１２７】
例１７は、例１４のコード分析システムを備え、コード分析モジュールは、第１のタイプのコードにおける全てのＲＴＲリターン命令が第１の範囲にある値のＲＴＲ情報のみを示すか否かを判断し、第１の範囲は、１または複数の異なるタイプのコードに対応する１または複数の他の範囲と相互排他的である。
【０１２８】
例１８は、例１４から１７のいずれか１つのコード分析システムを備え、コード分析モジュールは、デジタル配信プラットフォームおよびオペレーティングシステムモジュールを有する。
【０１２９】
例１９は、例１４から１７のいずれか１つのコード分析システムを備え、コード分析モジュールは、オペレーティングシステムモジュールを有する。
【０１３０】
例２０は、コードを受信するコード受信モジュールを有するコード分析システムである。本システムは、コード受信モジュールと結合されたコード分析モジュールも備え、少なくとも１ペアのプロシージャからの補助リターンターゲット制限リターン（ＲＴＲリターン）命令およびリターンターゲット命令についてのリターンターゲット制限情報（ＲＴＲ情報）を変更する。これは、補助ＲＴＲリターン命令およびリターンターゲット命令のペアのＲＴＲ情報を作成することが依然として相補的である場合に行われる。
【０１３１】
例２１は、例２０のコード分析システムを備え、コード受信モジュールは、コードにおける補助ＲＴＲリターン命令およびリターンターゲット命令の複数のペアを示す、メタデータを更に受信する。補助ＲＴＲリターン命令およびリターンターゲット命令の各ペアについてのＲＴＲ情報を作成することが依然として相補的である場合に、コード分析モジュールは、補助ＲＴＲリターン命令およびリターンターゲット命令の各ペアについてＲＴＲ情報を変更する。
【０１３２】
例２２は、例２０または２１のいずれかのコード分析システムを備え、コード分析モジュールは、オペレーティングシステムモジュールを有する。
【０１３３】
例２３は、例２０または２１のいずれかのコード分析システムを備え、コード分析モジュールは、デジタル配信プラットフォームのモジュールを有する。
【０１３４】
例２４は、相互接続、および相互接続に結合されたプロセッサを含む、複数の命令を処理するシステムである。プロセッサは、プロシージャからのリターンターゲット制限リターン（ＲＴＲリターン）命令を受信する。ＲＴＲリターン命令に応答して、プロセッサは、ＲＴＲリターン命令を用いるリターンアドレスにおける命令タイプの互換性の欠如、およびリターンアドレスにおける命令を用いるＲＴＲリターン命令の第１のリターンターゲット制限情報（ＲＴＲ情報）の互換性の欠如のうち１つに基づいて、ＲＴＲリターン命令による、ＲＴＲリターン命令に対応するリターンアドレスにおける命令への制御フロー移動の試みを制限することを決定する。システムは、相互接続に結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）も備える。
【０１３５】
例２５は、例２４のシステムを備え、プロセッサは、ＲＴＲリターン命令の即値の値がリターンアドレスにおける命令の即値の値に等しくないことに基づいて、試みを制限することを決定する。試みを制限すると決定することに応答して、プロセッサは、フォールトおよび例外のうち１つを生じさせ得る。
【０１３６】
例２６は、非一時的機械可読媒体を有する製造物である。非一時的機械可読媒体は、複数の命令を格納する。複数の命令は、機械により実行されると、機械に、第１のタイプのコードにおける全てのプロシージャからのリターンターゲット制限リターン（ＲＴＲリターン）命令に関するリターンターゲット制限情報（ＲＴＲ情報）を調査することを含む複数のオペレーションを実行させる。また、第１のタイプのコードにおける複数のＲＴＲリターン命令が、第１のタイプのコードについては許可されるが、１または複数の異なるタイプのコードについては許可されないＲＴＲ情報のみを示すか否かを判断する。
【０１３７】
例２７は、例２６の製造物を備え、複数の命令は、機械に、第１のタイプのコードにおける複数のＲＴＲ命令が、第１のタイプのコードについては許可されるが、１または複数の異なるタイプのコードについては許可されない第１の範囲における複数の値のみを示すか否かを判断させる。
【０１３８】
例２８は、例１０から１３のいずれかの方法を実行するように動作可能なプロセッサまたは他の装置である。
【０１３９】
例２９は、例１０から１３のいずれかの方法を実行する手段を備える、プロセッサまたは他の装置である。
【０１４０】
例３０は、例１０から１３のいずれかの方法を実行する複数のモジュール、複数のユニット、ロジック、回路、手段、またはこれらのいずれかの組み合わせを備える、プロセッサまたは他の装置である。
【０１４１】
例３１は、機械可読媒体を備える製造物であり、機械可読媒体は、任意選択で、プロセッサにより実行されるときおよび／または場合に、コンピュータシステムまたは他の機械が機械に、例１０から１３のいずれかの方法を実行させるように動作可能な命令を任意選択で格納し、そうでなければ提供する、非一時的機械可読媒体である。
【０１４２】
例３２は、相互接続と、相互接続と結合されたプロセッサと、例１０から１３のいずれかの方法を実行するように動作可能なダイナミックランダムアクセスメモリ（ＤＲＡＭ）、グラフィックスチップ、無線通信チップ、相変化メモリ、ならびにビデオカメラ、コンピュータシステム、または他の電子デバイスから選択される、相互接続と結合された少なくとも１つのコンポーネントを備える、コンピュータシステムまたは他の電子デバイスである。
【０１４３】
例３３は、本明細書において説明される１または複数のオペレーションまたはいずれかの方法を実質的に実行するように動作可能なプロセッサまたは他の装置である。
【０１４４】
例３４は、本明細書において説明される１または複数のオペレーションまたはいずれかの方法を実質的に実行する手段を備えるプロセッサまたは他の装置である。
【０１４５】
例３５は、本明細書において説明される複数の命令のいずれかを実質的に実行するプロセッサまたは他の装置である。
【０１４６】
例３６は、本明細書において説明される複数の命令のいずれかを実質的に実行する手段を備えるプロセッサまたは他の装置である。
【図１】
0005961288.tif 000002
【図２】
0005961288.tif 000003
【図３】
0005961288.tif 000004
【図４】
0005961288.tif 000005
【図５】
0005961288.tif 000006
【図６】
0005961288.tif 000007
【図７】
0005961288.tif 000008
【図８】
0005961288.tif 000009
【図９Ａ】
0005961288.tif 000010
【図９Ｂ】
0005961288.tif 000011
【図１０Ａ】
0005961288.tif 000012
【図１０Ｂ】
0005961288.tif 000013
【図１１】
0005961288.tif 000014
【図１２】
0005961288.tif 000015
【図１３】
0005961288.tif 000016
【図１４】
0005961288.tif 000017
【図１５】
0005961288.tif 000018
【図１６】
0005961288.tif 000019