(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-01
(45)【発行日】2023-11-10
(54)【発明の名称】リンク付き分岐命令の分岐ターゲット・バリアント
(51)【国際特許分類】
G06F 9/30 20180101AFI20231102BHJP
G06F 9/32 20180101ALI20231102BHJP
【FI】
G06F9/30 380Z
G06F9/32 382A
G06F9/32 383A
G06F9/32 320A
(21)【出願番号】P 2020546090
(86)(22)【出願日】2019-02-13
(86)【国際出願番号】 GB2019050379
(87)【国際公開番号】W WO2019175530
(87)【国際公開日】2019-09-19
【審査請求日】2022-02-04
(32)【優先日】2018-03-16
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】バーンズ、グレイム ピーター
(72)【発明者】
【氏名】グリセンスウェイト、リチャード ロイ
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2005/0149781(US,A1)
【文献】米国特許出願公開第2017/0090933(US,A1)
【文献】国際公開第2017/032969(WO,A1)
【文献】特開2002-259118(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30
G06F 9/32
(57)【特許請求の範囲】
【請求項1】
命令をデコードするための命令デコーダと、
前記命令デコーダによりデコードされる命令に応答してデータ処理を遂行するための処理回路と
を備え、
分岐命令に応答して、前記命令デコーダは、ターゲット・アドレスにおける命令へのプログラム・フローの非逐次的変化をトリガするように、前記処理回路を制御するように構成され、
プログラム・フローの前記非逐次的変化が、リンク付き分岐命令に応答してトリガされるとき、前記命令デコーダは、復帰アドレスを、プログラム・フローの後続の復帰に対してセットするように、前記処理回路を制御するように構成され、
プログラム・フローの前記非逐次的変化が、少なくとも1つのターゲット・チェッキング・タイプの分岐命令に応答してトリガされるとき、前記命令デコーダは、
前記ターゲット・アドレスにおける前記命令が、少なくとも1つの許されるタイプの分岐ターゲット命令であるかどうかをチェックし、前記ターゲット・アドレスにおける前記命令が、
前記少なくとも1つの許されるタイプの分岐ターゲット命令以外の命令である
ことを判定したことに応じて、エラー・ハンドリング応答をトリガするように、前記処理回路を制御するように構成され、
少なくとも、前記少なくとも1つのターゲット・チェッキング・タイプの分岐命令のサブセットに対して、前記少なくとも1つの許されるタイプの分岐ターゲット命令は、前記リンク付き分岐命令の分岐ターゲット・バリアントを含む、装置。
【請求項2】
前記分岐ターゲット・バリアント以外のリンク付き分岐命令に応答して、前記処理回路は、前記復帰アドレスを、逐次的に前記リンク付き分岐命令の後に続く、次の命令のアドレスにセットするように構成される、
請求項1に記載の装置。
【請求項3】
前記リンク付き分岐命令の前記分岐ターゲット・バリアントに応答して、前記処理回路は、前記復帰アドレスを、前記リンク付き分岐命令の前記分岐ターゲット・バリアントのアドレスにセットするように構成される、
請求項1又は2に記載の装置。
【請求項4】
前記処理回路は、プログラム・フローが、前記少なくとも1つのターゲット・チェッキング・タイプの分岐命令から、前記リンク付き分岐命令の前記分岐ターゲット・バリアントに非逐次的に進むとき、前記リンク付き分岐命令の前記分岐ターゲット・バリアントと関連付けられるプログラム・フローの非逐次的変化を抑制するように構成される、
請求項1から3までのいずれか一項に記載の装置。
【請求項5】
第1のターゲット・チェッキング・タイプの分岐命令に対して、前記リンク付き分岐命令の前記分岐ターゲット・バリアントは、前記少なくとも1つの許されるタイプの分岐ターゲット命令のうちの1つであり、
第2のターゲット・チェッキング・タイプの分岐命令に対して、前記リンク付き分岐命令の前記分岐ターゲット・バリアントは、前記少なくとも1つの許されるタイプの分岐ターゲット命令のうちの1つでない、
請求項1から4までのいずれか一項に記載の装置。
【請求項6】
前記リンク付き分岐命令の第1の分岐ターゲット・バリアントは、1つ又は複数のターゲット・チェッキング・タイプの分岐命令の第1のサブセットに対する、前記少なくとも1つの許されるタイプの分岐ターゲット命令のうちの1つであり、
前記リンク付き分岐命令の第2の分岐ターゲット・バリアントは、前記第1のサブセットとは異なる、1つ又は複数のターゲット・チェッキング・タイプの分岐命令の第2のサブセットに対する、前記少なくとも1つの許されるタイプの分岐ターゲット命令のうちの1つである、
請求項1から5までのいずれか一項に記載の装置。
【請求項7】
前記リンク付き分岐命令の前記分岐ターゲット・バリアントは、前記少なくとも1つの許されるタイプの分岐ターゲット命令のうちの1つでない、前記リンク付き分岐命令の別のバリアントとは異なるエンコーディングを有する、請求項1から6までのいずれか一項に記載の装置。
【請求項8】
前記リンク付き分岐命令の前記分岐ターゲット・バリアントは、前記少なくとも1つの許されるタイプの分岐ターゲット命令のうちの1つでない、前記リンク付き分岐命令の別のバリアントと同じエンコーディングを有する、請求項1から6までのいずれか一項に記載の装置。
【請求項9】
前記命令デコーダ及び前記処理回路のうちの少なくとも1つは、所与のリンク付き分岐命令の前記バリアントを、前記所与のリンク付き分岐命令の前記命令エンコーディング以外の、少なくとも1つのパラメータに基づいて決定するように構成される、請求項1から6まで及び8のいずれか一項に記載の装置。
【請求項10】
前記少なくとも1つのパラメータは、構成レジスタ内に記憶される構成パラメータを含む、請求項9に記載の装置。
【請求項11】
前記少なくとも1つのパラメータは、前記所与のリンク付き分岐命令の命令アドレスを含む、請求項9又は10に記載の装置。
【請求項12】
プログラム・フローが、所与のターゲット・チェッキング・タイプの分岐命令から所与のリンク付き分岐命令に非逐次的に進むとき、前記少なくとも1つのパラメータは、前記所与のターゲット・チェッキング・タイプの分岐命令の命令アドレスを含む、請求項9から11までのいずれか一項に記載の装置。
【請求項13】
前記所与のターゲット・チェッキング・タイプの分岐命令と、前記所与のリンク付き分岐命令との間でとられる例外に応答して、前記処理回路は、前記所与のリンク付き分岐命令の前記バリアントを決定するための情報を記録するように構成される、請求項12に記載の装置。
【請求項14】
分岐命令に応答して、ターゲット・アドレスにおける命令へのプログラム・フローの非逐次的変化をトリガするステップと、
プログラム・フローの前記非逐次的変化が、リンク付き分岐命令に応答してトリガされるとき、復帰アドレスを、プログラム・フローの後続の復帰に対してセットするステップと、
プログラム・フローの前記非逐次的変化が、少なくとも1つのターゲット・チェッキング・タイプの分岐命令に応答してトリガされるとき、
前記ターゲット・アドレスにおける前記命令が、少なくとも1つの許されるタイプの分岐ターゲット命令であるかどうかをチェックし、前記ターゲット・アドレスにおける前記命令が、
前記少なくとも1つの許されるタイプの分岐ターゲット命令以外の命令である
ことを判定したことに応じて、エラー・ハンドリング応答をトリガするステップと
を含み、
少なくとも、前記少なくとも1つのターゲット・チェッキング・タイプの分岐命令のサブセットに対して、前記少なくとも1つの許されるタイプの分岐ターゲット命令は、前記リンク付き分岐命令の分岐ターゲット・バリアントを含む、データ処理方法。
【請求項15】
ターゲット・プログラム・コードの命令の実行のための命令実行環境を提供するように、ホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、
前記ターゲット・プログラム・コードの命令をデコードするための命令デコード・プログラム論理と、
前記命令デコード・プログラム論理によりデコードされる命令に応答してデータ処理を遂行するための処理プログラム論理と
を含み、
分岐命令に応答して、前記命令デコード・プログラム論理は、ターゲット・アドレスにおける命令へのプログラム・フローの非逐次的変化をトリガするように、前記処理プログラム論理を制御するように構成され、
プログラム・フローの前記非逐次的変化が、リンク付き分岐命令に応答してトリガされるとき、前記命令デコード・プログラム論理は、復帰アドレスを、プログラム・フローの後続の復帰に対してセットするように、前記処理プログラム論理を制御するように構成され、
プログラム・フローの前記非逐次的変化が、少なくとも1つのターゲット・チェッキング・タイプの分岐命令に応答してトリガされるとき、
前記ターゲット・アドレスにおける前記命令が、少なくとも1つの許されるタイプの分岐ターゲット命令であるかどうかをチェックし、前記命令デコード・プログラム論理は、前記ターゲット・アドレスにおける前記命令が、
前記少なくとも1つの許されるタイプの分岐ターゲット命令以外の命令である
ことを判定したことに応じて、エラー・ハンドリング応答をトリガするように、前記処理プログラム論理を制御するように構成され、
少なくとも、前記少なくとも1つのターゲット・チェッキング・タイプの分岐命令のサブセットに対して、前記少なくとも1つの許されるタイプの分岐ターゲット命令は、前記リンク付き分岐命令の分岐ターゲット・バリアントを含む、コンピュータ・プログラム。
【請求項16】
請求項15に記載のコンピュータ・プログラムを記憶する記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本技法は、データ処理の分野に関係する。
【背景技術】
【0002】
分岐命令は、プログラム・コードの所与のまとまりからの命令を実行するとき、プログラム・フローの非逐次的変化をトリガするための命令である。一部の分岐は静的分岐であり得るものであり、それらの静的分岐のターゲット・アドレスは、常に固定される、又は、現在の命令アドレスからの固定されたオフセットにより決定される。しかしながら、他の分岐はデータ依存分岐であり、その場合、(分岐がとられるならば)分岐の後に続いて実行されることになる命令を識別するターゲット・アドレスは、メモリから読み出される、又は、より早い命令により生成されるデータに依存する。例えば、データ依存分岐は、所定の関数が、プログラムのより早い部分のアウトカムに依存して、条件付きで実行されるということを確実にするために使用され得る。
【0003】
プロセッサに対する攻撃の1つの形式は、分岐命令をだまして、プログラム・コードの作成者により意図されなかったターゲット・アドレスにおける命令に分岐させるように、データ依存分岐命令によりプログラム・フローの方向を制御するデータを変造することを試みることであり得る。そのようなエクスプロイトは、攻撃者が、実行されることになる正しいプログラム・コードの一部分である正当な命令のセクションを、ただし、意図されるシーケンスとは異なるシーケンスで、一体につなぎ合わせることを可能とし得る。そのような攻撃は、プログラムが正しく機能することを妨げ、プログラムを実行するプロセッサへの他の望ましくない影響を引き起こし、又は、パスワード・チェックなどの所定のセキュリティ対策を迂回し得る。
【先行技術文献】
【非特許文献】
【0004】
【文献】「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁
【発明の概要】
【課題を解決するための手段】
【0005】
少なくとも一部の実例は、命令をデコードするための命令デコーダと、命令デコーダによりデコードされる命令に応答してデータ処理を遂行するための処理回路とを備え、分岐命令に応答して、命令デコーダは、ターゲット・アドレスにおける命令へのプログラム・フローの非逐次的変化をトリガするように、処理回路を制御するように構成され、プログラム・フローの非逐次的変化が、リンク付き分岐命令に応答してトリガされるとき、命令デコーダは、復帰アドレスを、プログラム・フローの後続の復帰に対してセットするように、処理回路を制御するように構成され、プログラム・フローの非逐次的変化が、少なくとも1つのターゲット・チェッキング・タイプの分岐命令に応答してトリガされるとき、命令デコーダは、ターゲット・アドレスにおける命令が、少なくとも1つの許されるタイプの分岐ターゲット命令(branch target instruction)以外の命令であるとき、エラー・ハンドリング応答をトリガするように、処理回路を制御するように構成され、少なくとも、前記少なくとも1つのターゲット・チェッキング・タイプの分岐命令のサブセットに対して、前記少なくとも1つの許されるタイプの分岐ターゲット命令は、リンク付き分岐命令の分岐ターゲット・バリアントを含む、装置を提供する。
【0006】
少なくとも一部の実例は、分岐命令に応答して、ターゲット・アドレスにおける命令へのプログラム・フローの非逐次的変化をトリガするステップと、プログラム・フローの非逐次的変化が、リンク付き分岐命令に応答してトリガされるとき、復帰アドレスを、プログラム・フローの後続の復帰に対してセットするステップと、プログラム・フローの非逐次的変化が、少なくとも1つのターゲット・チェッキング・タイプの分岐命令に応答してトリガされるとき、ターゲット・アドレスにおける命令が、少なくとも1つの許されるタイプの分岐ターゲット命令以外の命令であるとき、エラー・ハンドリング応答をトリガするステップとを含み、少なくとも、前記少なくとも1つのターゲット・チェッキング・タイプの分岐命令のサブセットに対して、前記少なくとも1つの許されるタイプの分岐ターゲット命令は、リンク付き分岐命令の分岐ターゲット・バリアントを含む、データ処理方法を提供する。
【0007】
少なくとも一部の実例は、ターゲット・プログラム・コードの命令の実行のための命令実行環境を提供するように、ホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、ターゲット・プログラム・コードの命令をデコードするための命令デコード・プログラム論理と、命令デコード・プログラム論理によりデコードされる命令に応答してデータ処理を遂行するための処理プログラム論理とを含み、分岐命令に応答して、命令デコード・プログラム論理は、ターゲット・アドレスにおける命令へのプログラム・フローの非逐次的変化をトリガするように、処理プログラム論理を制御するように構成され、プログラム・フローの非逐次的変化が、リンク付き分岐命令に応答してトリガされるとき、命令デコード・プログラム論理は、復帰アドレスを、プログラム・フローの後続の復帰に対してセットするように、処理プログラム論理を制御するように構成され、プログラム・フローの非逐次的変化が、少なくとも1つのターゲット・チェッキング・タイプの分岐命令に応答してトリガされるとき、命令デコード・プログラム論理は、ターゲット・アドレスにおける命令が、少なくとも1つの許されるタイプの分岐ターゲット命令以外の命令であるとき、エラー・ハンドリング応答をトリガするように、処理プログラム論理を制御するように構成され、少なくとも、前記少なくとも1つのターゲット・チェッキング・タイプの分岐命令のサブセットに対して、前記少なくとも1つの許されるタイプの分岐ターゲット命令は、リンク付き分岐命令の分岐ターゲット・バリアントを含む、コンピュータ・プログラムを提供する。
【0008】
記憶媒体が、上記で説明されたコンピュータ・プログラムを記憶するために提供され得る。記憶媒体は、非一時的記憶媒体であり得る。
【0009】
本技法のさらなる態様、特徴、及び利点は、添付図面と連関して読まれることになる、実例の、後に続く説明から明らかになることになる。
【図面の簡単な説明】
【0010】
【
図2】リンク付き分岐命令の挙動を例示する図である。
【
図3】リンク付き分岐命令と、別々の分岐ターゲット命令とを含む命令のシーケンスを、比較のために例示する図である。
【
図4】リンク付き分岐命令の分岐ターゲット・バリアントの使用の実例を示す図である。
【
図5】ターゲット・チェッキング分岐命令を処理する方法を示すフロー線図である。
【
図6】リンク付き分岐命令の処理を示すフロー線図である。
【
図7】本技法を実現するために使用され得るシミュレータ実例を示す図である。
【発明を実施するための形態】
【0011】
分岐命令により提供されるプログラム・フローを制御するデータを制御することを目標に定められる攻撃に対して防備するための1つの技法は、プログラム・コードの作成者が分岐に対する正当なターゲットであることを意図した、プログラムの安全な分岐ターゲット・ポイントをマーキングするために使用され得る、少なくとも1つの許されるタイプの分岐ターゲット命令をサポートする命令デコーダを用意することであり得る。プログラム・フローの非逐次的変化が、少なくとも1つのターゲット・チェッキング・タイプの分岐命令に応答してトリガされるとき、処理回路は、ターゲット・アドレスにおける命令が、少なくとも1つの許されるタイプの分岐ターゲット命令であるかどうかをチェックし得る。ターゲット・アドレスにおける命令が、少なくとも1つの許されるタイプの分岐ターゲット命令以外の命令であるとき、エラー・ハンドリング応答がトリガされ得る。例えば、エラー・ハンドリング応答は、例外をシグナリングすること、又は、障害が検出されたということを指示するステータス情報を記憶することであり得る。この手立てにおいて、アーキテクチャは、プログラム・フローの意図されない変化が存したときに検出するための機構を提供し得るものであり、そのため、上記で論考された形式の攻撃は、相当に、より困難にされ得るものであり、なぜならば、許されるタイプの分岐ターゲット命令によりマーキングされるポイント以外の、プログラム内の随意のポイントに分岐することは、もはや可能でないからである。
【0012】
1つのタイプの分岐命令は、リンク付き分岐命令である。プログラム・フローの非逐次的変化が、リンク付き分岐命令に応答してトリガされるとき、命令デコーダは、復帰アドレスを、プログラム・フローの後続の復帰に対してセットするように、処理回路を制御し得る。例えば、復帰アドレスは、例えば「リンク・レジスタ」として知られている、個別のレジスタに記憶され得る。後続の復帰分岐命令は、復帰アドレスを読み出し、次いで、復帰アドレスにより表されるアドレスに戻るように、プログラム・フローの変化をトリガし得る。この機能性は、リンク付き分岐命令を使用して関数をコールし、次いで、引き続いて、関数が完了してしまうと、プログラムの、先に実行された部分に処理を復帰させることに対して有用であり得る。リンク付き分岐命令の使用は、同じ関数が、プログラムの中の複数個の異なる位置からコールされることを可能にし得るものであり、なぜならば、復帰アドレスが、関数がコールされた起点のプログラムの部分を効果的に記億するために使用され得るからである。
【0013】
上記で論考された攻撃の形式に対する保護は、リンク付き分岐命令の後に、後続の許されるタイプの分岐ターゲット命令を含むことにより、リンク付き分岐命令に対して実現され得る。しかしながら、この事例において、プログラム内の命令の数は増大するものであり、リンク付き分岐命令は、相対的によく目にするので、このことは、相当な量だけ、総体的なコード分量を増大し得る。例えば、平均長さ、及び、リンク付き分岐命令の使用状況の平均レベルのコード内で、各々のリンク付き分岐命令の後に分岐ターゲット命令を含むことが、およそ6%だけ、命令の数を増やし得るということが、典型的なプログラムにおいて推定されている。所与のプログラムに対して要されるコードのサイズを増大することは、性能に影響を及ぼし得る、より効率的でない、キャッシュ使用状況及びパイプライン利用を結果的に生じさせ得る。
【0014】
上記で論考された技法において、少なくとも、少なくとも1つのターゲット・チェッキング・タイプの分岐命令のサブセットに対する、少なくとも1つの許されるタイプの分岐ターゲット命令のうちの1つとして取り扱われる、リンク付き分岐命令の分岐ターゲット・バリアントが提供され得る。ゆえに、リンク付き分岐命令の後に、別々の分岐ターゲット命令を含むことは必要ではなく、なぜならば、リンク付き分岐命令それ自体が、許されるタイプの分岐ターゲット命令として働き得るものであり、そのことによって、リンク付き分岐命令に戻るプログラム・フローの非逐次的変化は、有効なエントリ・ポイントとして取り扱われ得るからである。このことが活用するのは、リンク付き分岐命令のリンク及び復帰挙動に起因して、リンク付き分岐命令の後に続く命令は、ほとんど常に、有効な分岐ターゲット・ポイントであることが予想されることになり、そのため、明示的な分岐ターゲット命令を別々に指示することは冗長であり得るという事実である。代わりに、リンク付き分岐命令は、暗黙に、許されるタイプの分岐ターゲット命令それ自体として挙動し得る。このことは、総合的なコード分量を低減する助けとなり、そのことは、命令キャッシュ及び命令処理パイプラインの性能を改善し得る。
【0015】
リンク付き分岐命令に応答した復帰アドレスのセッティングは、リンク付き分岐命令が分岐ターゲット・バリアントであるかどうかに依存して変動し得る。分岐ターゲット・バリアント以外のリンク付き分岐命令に応答して、処理回路は、復帰アドレスを、逐次的にリンク付き分岐命令の後に続く、次の命令のアドレスにセットし得る。他方で、リンク付き分岐命令の分岐ターゲット・バリアントに応答して、復帰アドレスは、リンク付き分岐命令の分岐ターゲット・バリアントそれ自体のアドレスにセットされ得る。このことが意味するのは、リンク付き分岐命令の分岐ターゲット・バリアントは、分岐ターゲット命令として働き得るものであり、なぜならば、後続の復帰分岐は、同じリンク付き分岐命令に戻るように分岐することになるからであるということである。この挙動は、リンク付き分岐命令の分岐ターゲット・バリアント及び非分岐ターゲット・バリアントが、復帰アドレスを異なるようにセットするということを意味するが、実際上は、復帰アドレスが、復帰分岐それ自体以外の関数の中の任意の命令により参照されることはまれである。このことが意味するのは、関数の中の復帰アドレスの不定の規定物(関数が、リンク付き分岐命令の分岐ターゲット・バリアントによりコールされたか、それとも非分岐ターゲット・バリアントによりコールされたかに基づいて変動するアドレス)が、重大な問題を引き起こすことになるということは、公算が小さいということである(いかなる事例においても、関数本体の中で復帰アドレスの決定論的規定物を使用することをまさに必要とするコードは、必要ならば、他の手立てで、追加的な関数引数としてアドレスを渡し得る)。実際上は、大部分のコードは、リンク付き分岐命令のバリアントが、復帰アドレスをそのバリアント自体のアドレスにセットすることを可能とすることを、そのアドレスがそれ自体、許される分岐ターゲット・アドレスとして働き得るように行うことにより、低減されるコード分量から利益を得ることができる。
【0016】
リンク付き分岐命令の分岐ターゲット・バリアントの挙動は、プログラム・フローがリンク付き分岐命令に逐次的に進むか、それとも非逐次的に進むかに依存して変動し得る。プログラム・フローが、少なくとも1つのターゲット・チェッキング・タイプの分岐命令から、リンク付き分岐命令の分岐ターゲット・バリアントに非逐次的に進むとき、リンク付き分岐命令の分岐ターゲット・バリアントと関連付けられるプログラム・フローのいかなる非逐次的変化も抑制され得るものであり、そのことによって、代わりに、リンク付き分岐命令の分岐ターゲット・バリアントの後に実行される次の命令は、単純に、リンク付き分岐命令から逐次的に先に向かって後に続く次の命令であり得る。このことが認めるのは、プログラム・フローが、少なくとも1つのターゲット・チェッキング・タイプの分岐命令から、リンク付き分岐命令の分岐ターゲット・バリアントに非逐次的に進むとき、このことが意味するのは、リンク付き分岐命令により表される分岐は、典型的にはすでに履行されてしまっていることになり、今やプログラム・フローは、リンク付き分岐命令に復帰しているところであり、リンク付き分岐命令は、分岐ターゲット命令として働くということであるということである。
【0017】
他方で、プログラム・フローが、リンク付き分岐命令の分岐ターゲット・バリアントに逐次的に進む(すなわち、リンク付き分岐命令が、分岐がとられる前に初めて遭遇される)とき、プログラム・フローの非逐次的変化が許され得る(とられるならば - 分岐がとられるか否かは、さらには、他の条件付き情報に依存し得るということに留意されたい)。さらには、すべての分岐がターゲット・チェッキング・タイプの分岐命令として取り扱われるとは限らない事例において、プログラム・フローが、ターゲット・チェッキング・タイプ以外の分岐命令から、分岐ターゲット・バリアント又はリンク付き分岐命令に非逐次的に進むとき、リンク付き分岐命令と関連付けられるプログラム・フローの非逐次的変化は、そのまま許され得る。
【0018】
換言すれば、リンク付き分岐命令の分岐ターゲット・バリアントに逐次的に進む、又は、ターゲット・アドレスにおける命令の、その命令が分岐ターゲット命令であるかどうかを確認するためのチェックを要さない分岐から、リンク付き分岐命令の分岐ターゲット・バリアントに分岐するとき、リンク付き分岐命令は、(いかなる他の条件付き要件も満足させられるならば)プログラム・フローの非逐次的変化をまさにトリガする標準的なリンク付き分岐命令として取り扱われ得る。他方で、プログラム・フローが、ターゲット・アドレスにおける命令が、許されるタイプの分岐ターゲット命令であるかどうかのチェッキングをまさに要する分岐から、リンク付き分岐命令の分岐ターゲット・バリアントに非逐次的に進むとき、命令は、アーキテクチャ上のレベルにおいて非演算挙動を提供し得る分岐ターゲット命令として取り扱われ、そのことによって、命令と関連付けられるいかなる分岐(プログラム・フローの非逐次的変化)も抑制される。同じ命令の、この二重挙動は、これらの2つの目的のために別々の命令を提供することの必要性を回避することにより、コード分量の低減を可能にする。
【0019】
本出願において、用語「分岐命令」は、プログラム・フローの非逐次的変化をトリガし得る任意の命令を指し得る。この用語は、例えば、命令を分岐命令としてマーキングする命令オペコードを伴う、分岐と明示的に定義される、所定のタイプの分岐命令を含み得る。しかしながら、分岐命令は、さらには、何らかの他のタイプの処理演算を表明するオペコードを有する、ただし、その分岐命令の宛先レジスタとして、プログラム内で達されるプログラム・フローの現在のポイントを制御するプログラム・カウンタを提供するレジスタを指定する、別のタイプの命令であり得る。例えば、分岐命令は、その分岐命令の宛先レジスタとしてプログラム・カウンタ・レジスタを指定する、算術命令、論理命令、ロード命令、又はレジスタ移動命令(データ値を1つのレジスタから別のものに移動させるための命令)であり得る。
【0020】
一部の実現例において、すべての分岐命令は、少なくとも1つのターゲット・チェッキング・タイプの分岐命令として取り扱われ得るものであり、その分岐命令に対して、分岐ターゲット・アドレスにおける命令のチェックが遂行され、ターゲット・アドレスにおける命令が、許されるタイプのターゲット命令のうちの1つでないならば、エラー・ハンドリング応答がトリガされる。しかしながら、他の実例において、分岐ターゲット・アドレスにおける命令のチェックは、所定のターゲット・チェッキング・タイプの分岐命令に対して要されるのみであり得るものであり、このチェックは、他のタイプの分岐命令に対して省略され得る。例えば、常に同じ位置に(固定された絶対ターゲット・アドレス、又は、プログラムのより早い部分から導出されるデータに依存しないオフセットを使用して分岐命令のアドレスに相対的に規定される相対ターゲット・アドレスのいずれかを使用して)分岐する静的分岐は、ターゲット・アドレスにおける命令のチェックを必要としないことがあり、なぜならば、そのような分岐を、分岐制御データを修正することによって変造することは可能でないことになるからである。ゆえに、一部の事例において、ターゲット・アドレスにおける命令のチェックは、データ依存分岐であって、それらのターゲット・アドレスが、より早い命令から導出されるデータに依存する、データ依存分岐に対してのみ遂行され得る。
【0021】
リンク付き分岐命令の分岐ターゲット・バリアントは、一部の実現例において、すべてのターゲット・チェッキング・タイプの分岐命令に対する、許されるタイプの分岐ターゲット命令として取り扱われ得る。しかしながら、他の実例において、リンク付き分岐命令の分岐ターゲット・バリアントは、ターゲット・チェッキング・タイプの分岐命令の所定の(限定される)サブセットに対する、許されるタイプの分岐ターゲット命令であり得る。例えば、リンク・レジスタ内に記憶される復帰アドレスに分岐するために使用され得る分岐命令のみが、リンク付き分岐命令の分岐ターゲット・バリアントに分岐することを許され得るものであり、復帰アドレスに分岐しない他の分岐は、それでも、ターゲット・アドレスにおける命令が、リンク付き分岐命令の分岐ターゲット・バリアントであるならば、エラー・ハンドリング応答をトリガし得る。
【0022】
ゆえに、一部の事例において、第1のターゲット・チェッキング・タイプの分岐命令に対して、リンク付き分岐命令の分岐ターゲット・バリアントは、少なくとも1つの許されるタイプの分岐ターゲット命令のうちの1つであり得るものであり、一方で、第2のターゲット・チェッキング・タイプの分岐命令に対して、リンク付き分岐命令の分岐ターゲット・バリアントは、少なくとも1つのタイプの許される分岐ターゲット命令のうちの1つでない。ターゲット・チェッキング・タイプの分岐命令のサブセットであって、それに対して、リンク付き分岐命令の分岐ターゲット・バリアントが、有効なタイプの許されるタイプの分岐ターゲット命令である、サブセットを限定することにより、このことは、攻撃者が、プログラム、又は、コードを生成したコンパイラにより意図されない手立てでプログラム・フローを方向設定し直す範囲を低減し、セキュリティを改善する。
【0023】
一部の事例において、リンク付き分岐命令の、2つ以上の分岐ターゲット・バリアントが規定され得る。リンク付き分岐命令の異なるバリアントは、ターゲット・チェッキング・タイプの分岐命令の異なるサブセットに対する、許されるタイプの分岐ターゲット命令として取り扱われ得る。例えば、リンク付き分岐命令の第1の分岐ターゲット・バリアントは、ターゲット・チェッキング・タイプの分岐命令の第1のサブセットに対する、少なくとも1つのタイプの許される分岐ターゲット命令のうちの1つであり得るものであり、リンク付き分岐命令の第2の分岐ターゲット・バリアントは、ターゲット・チェッキング・タイプの分岐命令の第2の(異なる)サブセットに対する、許されるタイプの分岐ターゲット命令であり得る。
【0024】
どのタイプのターゲット・チェッキング・タイプの分岐命令が、リンク付き分岐命令の所与のバリアントに分岐することを可能とされるかにおいて、より特異的になることにより、このことは、やはり、攻撃者が、望ましくない挙動をトリガする範囲を低減することになる。例えば、ターゲット・チェッキング・タイプの分岐命令のうちの1つは、先のリンク付き分岐命令によりセット・アップされるリンク・レジスタ内のアドレスに常に分岐する、専用復帰分岐命令であり得る。
【0025】
一部の実現例は、その専用復帰分岐命令に対する、許されるタイプの分岐ターゲット命令として取り扱われるのみであるが、復帰アドレス以外の随意のターゲット・アドレスを受け入れる、他のより一般的なタイプの分岐に対する、許されるタイプの分岐ターゲット命令のうちの1つでない、リンク付き分岐命令のバリアントをサポートし得る。
【0026】
他方で、一部のプログラム・コードは、一般的なタイプの分岐であって、リンク・レジスタを、その分岐のターゲット・アドレスに対するソース・レジスタとして指定することを、関数を処理する後の復帰分岐を制御するために行う、一般的なタイプの分岐を使用し得るものであり、この事例において、次いで、さらには、リンク付き分岐命令の分岐ターゲット・バリアントを、そのような一般的な分岐に対する、許される分岐ターゲット命令のうちの1つにすることが望ましくあり得る。
【0027】
復帰分岐のみに対する有効な分岐ターゲットである第1の分岐ターゲット・バリアント、及び、復帰分岐、又は、より一般的な形式の分岐のいずれかによりターゲットにされることを可能とされ得る第2の分岐ターゲット・バリアントの両方を規定することにより、このことは、コンパイラ又はプログラマが、どのバリアントをそれらのコンパイラ又はプログラマが使用することを希望するかを、要されるセキュリティのレベルに依存して決めることを可能とする。第1のバリアントは、よりセキュアであり得るが、より多くの、より厳しいプログラミング要件を要し得るものであり、なぜならば、一般的な分岐を、復帰アドレスに戻る分岐として使用することは、もはや可能でないからであり、一方で、第2のバリアントは、より緩いプログラミング実践を許し得るが、いくらかの追加的な脆弱性を有し得るものであり、なぜならば、そのことは、復帰を実現することを実際には意図されない、異なる一般的な分岐が、リンク付き分岐命令の位置に有効に分岐し得るということを意味し得るからである。ゆえに、リンク付き分岐命令に有効に分岐する、ターゲット・チェッキング・タイプの分岐命令の異なるサブセットをサポートする、異なる形式のリンク付き分岐命令をサポートすることにより、このことは、プログラマが、セキュリティをプログラミングの容易さに対して釣り合わせる柔軟性を供する。
【0028】
一部の実現例において、リンク付き分岐命令の分岐ターゲット・バリアントは、異なるタイプの分岐命令のうちの1つとして取り扱われない、リンク付き分岐命令の別のバリアントとは異なるエンコーディングを有し得る。さらには、上記で論考されたリンク付き分岐命令の第1/第2の分岐ターゲット・バリアントは、異なる命令エンコーディングを使用して規定され得る。
【0029】
しかしながら、他の実例において、リンク付き分岐命令の分岐ターゲット・バリアントは、許されるタイプの分岐ターゲット命令でない、リンク付き分岐命令の別のバリアントと同じエンコーディングを有し得るものであり、又は、第1/第2の分岐ターゲット・バリアントは、同じエンコーディングを有し得る。この事例において、命令デコーダ又は処理回路は、所与のリンク付き分岐命令の個別のバリアントを(例えば、それが、分岐ターゲット・バリアントであるか、それとも別の非分岐ターゲット・バリアントであるか、又は、分岐ターゲット・バリアントが、第1の分岐ターゲット・バリアントであるか、それとも第2の分岐ターゲット・バリアントであるかを)、所与のリンク付き分岐命令の命令エンコーディング以外の、少なくとも1つのパラメータに基づいて決定し得る。
【0030】
例えば、少なくともパラメータは、構成レジスタ内に記憶される構成パラメータであり得る。このことは、リンク付き分岐命令の分岐ターゲット・バリアントの機能性をサポートするアーキテクチャを有さないレガシー・システム、及び、より新しい機械の両方において正しく動作し得るコードを書き表すことをより容易にし得るものであり、そのコードは、上記で論考されたような、異なる復帰アドレス・セッティング挙動、並びに、分岐ターゲット・バリアントへのプログラム・フローの非逐次的及び逐次的な進むことに関する異なる挙動を伴う、リンク付き分岐命令の分岐ターゲット・バリアントに応答するように書き表される。リンク付き分岐命令の分岐ターゲット・バリアント及び非分岐ターゲット・バリアントの両方に対して、厳密に同じエンコーディングを使用することにより、同じコードが、両方のデバイス上で実行し得る。しかしながら、分岐ターゲット・バリアントの機能性をまさにサポートする装置は、分岐ターゲット・バリアント機能性がアクティブ化されたということを指定するパラメータを伴う構成レジスタを有し得る。例えば、レガシー・システムにおいて、固定された値にデフォルトでセットされる、ハードワイヤードの予備ビットを有する構成レジスタが使用され得るものであり、そのことによって、すべての装置は、デフォルトで、すべてのリンク付き分岐命令を非分岐ターゲット・バリアントとして取り扱い得る。しかしながら、より新しいデバイスにおいて、構成レジスタの、このビットは、リンク付き分岐命令は分岐ターゲット・バリアントとして取り扱われるべきであるということを指示するために、異なる値にセットされ得るものであり、そのことによって、それらのリンク付き分岐命令は、別々にエンコーディングされる分岐ターゲット命令を必要とすることなく、復帰分岐により、正当にターゲットにされ得る。
【0031】
リンク付き分岐命令のバリアントを決定し得るパラメータの他の実例が提供され得る。1つの実例において、少なくとも1つのパラメータは、リンク付き分岐命令の命令アドレスを含み得る。例えば、プログラム・コードの所定の部分におけるリンク付き分岐命令は、分岐ターゲット・バリアントとして取り扱われ得るものであり、一方で、プログラム・コードの他の部分において、リンク付き分岐命令は、非分岐ターゲット・バリアントとして取り扱われ得る。このことは、コードの一部の部分が、コードの個別の小部分に対して要されるセキュリティのレベルに依存して、許される分岐ターゲット命令の、他のものより限定されるセットを有することを可能とし得る。
【0032】
さらには、リンク付き分岐命令の挙動を制御するパラメータは、プログラム・フローが所与のリンク付き分岐命令に非逐次的に進むことを引き起こす、所与のターゲット・チェッキング・タイプの分岐命令の命令アドレスであり得る。すなわち、プログラム・フローが所与のリンク付き分岐命令に戻るように進むことを引き起こす、復帰分岐のアドレスは、リンク付き分岐命令のバリアントを、例えば、命令が第1の分岐ターゲット・バリアント(分岐タイプの第1のサブセットにより、有効にターゲットにされ得る)として取り扱われるか、それとも第2の分岐ターゲット・バリアント(分岐タイプの第2のサブセットにより、有効にターゲットにされ得る)として取り扱われるかを決定し得る。このことは、例えば、より古いコードが第1のアドレス・レンジにおいて記憶され、より新しいコードが第2のアドレス・レンジにおいて記憶される事例において有用であり得る。より古いコードは、復帰分岐に対する、分岐命令タイプの、より広いセットを使用し得るものであり、そのことによって、より古いコードのアドレス・レンジ内の分岐命令から分岐させられる先方の、リンク付き分岐命令は、分岐タイプの、より広いサブセットが、リンク付き分岐命令を有効にターゲットにすることを可能とするバリアントであることを好まれ得る。他方で、分岐タイプの、より限定されるサブセットを使用して、復帰分岐を遂行するようにコンパイルされる、より新しいコードに対して、セキュリティは、リンク付き分岐命令を、分岐タイプの、より限定されるサブセットに対する有効な分岐ターゲット命令として働く異なるバリアントと解釈することにより改善され得る。ゆえに、バリアントを、リンク付き分岐に分岐する分岐のアドレスに基づいて選択することにより、このことは、レガシー・コードに関する互換性と、より新しいコードに対する増大されるセキュリティとの間の、より良好なバランスを可能とし得る。
【0033】
この手法によって、例外が、所与のターゲット・チェッキング・タイプの分岐命令が遭遇される直後に、ただし、所与のリンク付き分岐命令の処理の前にとられるならば、情報が、所与のリンク付き分岐命令のバリアントを決定することを支援するために記録され得る。例えば、この情報は、例外をとるときに捕捉される状態の一部分として、又は、例外復帰アドレスの1つ若しくは複数のビット(例えば、アドレスの最上位又は最下位小部分内の使用されないビット)を修正することにより記録され得る。このことが意味するのは、例外から復帰するとき、例外の直前にトリガされた分岐命令の、関連性のある特性は失われないことになり、そのことによって、リンク付き分岐命令の適切な挙動が、例外の後の処理を再開することを機に決定され得るということである。
【0034】
図1は、データ処理装置2の実例を概略的に例示する。これは、単純に、装置の構成要素のサブセットの高レベル表現であり、装置は、例示されない多くの他の構成要素を含み得るということが察知されるであろう。装置2は、命令デコーダ6によりデコードされる命令に応答してデータ処理を遂行するための処理回路4を備える。命令デコーダ6は、命令キャッシュ8からフェッチされる命令をデコードして、処理回路4を制御するための制御信号10を生成して、命令により表される対応する処理演算を遂行する。処理回路4は、レジスタ14内に記憶される値に関する演算を遂行して、レジスタに書き戻されることになる結果値を生成するための、1つ又は複数の実行ユニットを含み得る。例えば、実行ユニットは、算術演算若しくは論理演算を実行するための算術/論理ユニット(ALU:arithmetic/logic unit)、浮動小数点オペランドを使用する演算を実行するための浮動小数点ユニット、及び/又は、複数個の非依存的データ要素を含むオペランドに関するベクトル演算を遂行するためのベクトル処理ユニットを含み得る。処理回路は、さらには、レジスタ14とメモリ・システムとの間のデータの転送を制御するためのメモリ・アクセス・ユニット(又は、ロード/ストア・ユニット)15を含む。この実例において、メモリ・システムは、命令キャッシュ8、レベル1データ・キャッシュ16、データと命令との間で共有されるレベル2キャッシュ17、及び主メモリ18を含む。他のキャッシュ階層が、さらには可能であり、これは、ほんの1つの実例であるということが察知されるであろう。メモリ管理ユニット(MMU:memory management unit)20が、ロード/ストア・ユニット15によりトリガされるメモリ・アクセスをサポートするためのアドレス変換機能性を提供するために用意される。MMUは、メモリ・システム16、17、18内に記憶されるページ・テーブルからのエントリのサブセットをキャッシュするための変換索引バッファ(TLB:translation lookaside buffer)22を有する。各々のページ・テーブル・エントリは、アドレスの対応するページに対するアドレス変換マッピングを提供し得るものであり、さらには、ページが読み出しのみの領域であるか、それとも読み出し可能及び書き込み可能の両方であるかを指定するアクセス許可、又は、どの特権レベルがページにアクセスし得るかを指定するアクセス許可などの、アクセス制御パラメータを指定し得る。
【0035】
図2は、リンク付き分岐命令の処理の実例を示す。
図2において、リンク付き分岐命令は、プログラム・フローが、分岐がとられるときに方向設定されることになる先方の、命令のターゲット・アドレスを指示するソース・レジスタXnを指定する、レジスタ指定形式の命令である。他の実例において、ターゲット・アドレスは、レジスタ内の代わりに、リンク付き分岐命令の命令エンコーディングにおいて指定される即値により規定され得るということが察知されるであろう。即値又はレジスタ値は、ターゲット・アドレスを、絶対アドレスとして、又は、リンク付き分岐命令のアドレスに相対的なターゲット・アドレスを計算するために使用される相対値として識別し得る。ゆえに、ターゲット・アドレスをエンコーディングする、あるレンジの手立てが提供され得る。
図2の実例、及び、後続の実例において、リンク付き分岐命令は、ターゲット・アドレスにおける命令でプログラム・フローの非逐次的変化を無条件にトリガする無条件分岐である。しかしながら、本技法は、さらには、条件付き分岐に適用され得るものであり、その場合、処理回路は、先の命令のアウトカムに依存し得る、レジスタ14内で表されるソース・オペランド又は条件ステータス・コードに依存して、分岐をとるべきか否かを決定する。
【0036】
他のタイプの分岐とは違い、リンク付き分岐命令に対して、プログラム・フローの変化に加えて、分岐がとられるとき、レジスタ14の中に用意されるリンク・レジスタが、さらには、リンク付き分岐命令のアドレスに依存して決定される復帰アドレスによって更新される。
図2において示されるリンク付き分岐命令の非分岐ターゲット・バリアントに対して、リンク・レジスタ内の復帰アドレスは、リンク付き分岐命令から逐次的に後に続く、次の命令のアドレスにセットされる。例えば、連続的な命令のアドレスの間のオフセットが4であるならば、リンク・レジスタは、#add1+4にセットされる、その復帰アドレスを有し得るものであり、ただし#add1は、リンク付き分岐命令のアドレスである。リンク付き分岐命令が実行されるとき、その命令は、ターゲット・アドレス(この実例においては#add2)における何らかの関数コードに分岐する。後続の復帰分岐命令(RET)が遭遇されるとき、このことは、命令であって、そのアドレスがリンク・レジスタ内の復帰アドレスとして指示される、命令への復帰分岐をトリガし、そのことは、この実例において、処理が、リンク付き分岐命令BLRの後に続く(アドレス#add1+4における)加算命令ADDに方向設定されることを引き起こす。
図2は、専用タイプの復帰分岐命令RETを示すが、リンク・レジスタを、分岐のターゲット・アドレスを規定するソース・レジスタとして指定することにより、より一般的な形式の分岐命令を使用して、リンク・レジスタ内のアドレスに分岐することが、さらには可能である。
【0037】
図3は、復帰アドレスを変造することを目標に定められる攻撃に対して保護するための分岐ターゲット命令(BTI)の使用を例示する。例えば、ネスティングされる関数コールが為されるとき、リンク付き分岐命令によりセットされる復帰アドレスは、スタック上に配置され得る。復帰アドレスがスタック上にある間、攻撃者は、プロセッサをだまして、実行されているコードを作成するプログラマ又はコンパイラにより意図されないプログラムの異なる部分に分岐させる試みで、スタック上のデータを変造して、復帰アドレスを、リンク付き分岐命令により元々意図されるものとは異なる値に変化させることができ得る。一部の分岐は、ターゲット・チェッキング分岐命令であり得るものであり、それらの命令に対して、プロセッサは、分岐のターゲット・アドレスにおける命令が分岐ターゲット命令(BTI)であるかどうかをチェックする。このことは、プログラマ/コンパイラが、安全な分岐ターゲット・ポイントを分岐ターゲット命令によってマーキングすることを可能とし得るものであり、そのため、他の潜在的に安全でない位置への分岐は、誤っていると検出され得るものであり、そのことが、障害又は例外をシグナリングすることなどのエラー・ハンドリング応答をトリガする。リンク付き分岐命令それ自体、及び復帰分岐命令の両方は、両方が、ターゲット・チェッキング命令として取り扱われ得るものであり、そのことによって、リンク付き分岐命令のターゲット・アドレスにおいて実行される関数コードの第1の命令、及び、復帰分岐に対するターゲット命令として働く、リンク付き分岐命令の後に続く次の命令の両方は、エラー・ハンドリング応答を回避するために、分岐ターゲット命令(BTI)であることを必要とすることになるということに留意されたい。
【0038】
この技法は、セキュリティ・エクスプロイトに対して防備することに対して有用であり得る。しかしながら、あらゆるリンク付き分岐命令に対して、分岐ターゲット命令が後に続かなければならないならば、このことは、プログラム・コード内の命令の総数を増大し、そのことは、より大である負担を、メモリ、キャッシュ、及びパイプライン利用にかける。
【0039】
図4は、コード密度を低減する助けとなるための、リンク付き分岐命令の分岐ターゲット・バリアント(BLRTI)の使用を例示する。BLRTI命令は、異なる命令エンコーディング(例えば、異なる命令オペコード、又は、個別のバリアントを指定する命令コーディングの別のパラメータ)を有することによって、
図2のBLR命令から区別され得るものであり、そうでなければ、構成レジスタ内に記憶される構成パラメータなどの、情報の何らかの他のまとまりによって、又は、リンク付き分岐命令それ自体のアドレスに基づいて、又は、リンク付き分岐命令に分岐する分岐のアドレスに基づいて区別され得るということが察知されるであろう。
【0040】
リンク付き分岐命令の分岐ターゲット・バリアントは、二重機能性を有する。リンク付き分岐命令への制御フローの逐次的変化、又は、ターゲット・アドレスにおける命令が分岐ターゲット命令であるかどうかのチェッキングを要さない分岐からリンク付き分岐命令への制御フローの非逐次的変化において、リンク付き分岐命令の分岐ターゲット・バリアントは、正規のリンク付き分岐命令として挙動し、そのことによって、そのバリアントは、分岐がとられることになるならば、分岐アドレスにおける命令への制御フローの変化をトリガし、さらには、復帰アドレスのセッティングをトリガする。
図2及び3において示される非分岐ターゲット・バリアントとは違い、復帰は、後に続く命令のアドレス#add1+4よりむしろ、リンク付き分岐命令のアドレス#add1にセットされる。このことは、分岐がとられ、関数コードが完了するとき、復帰分岐が、次の命令に、よりむしろ、リンク付き分岐命令それ自体に戻るように分岐することになるということを確実にする。
【0041】
データ依存分岐、又は、他の分岐であって、それらの分岐に対して、ターゲット・アドレスにおける命令が分岐ターゲット命令であるかどうかのチェッキングが要される、それらの分岐によりトリガされる、リンク付き分岐命令の分岐ターゲット・バリアントへの制御フローの非逐次的変化である、そのような復帰分岐において、リンク付き分岐命令の分岐ターゲット・バリアントは、分岐ターゲット命令BTIとして取り扱われる。ゆえに、リンク付き分岐命令と関連付けられる分岐は抑制され、そのため、処理は、リンク付き分岐命令の後、次の逐次的命令に、先に向かって移る。ゆえに、同じ命令が、リンク付き分岐命令、及び、有効な分岐ポイントをマーキングする分岐ターゲット命令の両方として働くことを可能とすることにより、このことは、リンク付き分岐の後に続く明示的なBTI命令に対する必要性を回避する。リンク付き分岐命令は、プログラム・コード内で非常によく目にするので、この技法は、相当な数の命令を消失させることにおいて非常に有用であり得るものであり、例えば、命令の推定される6%が、いくらかの共通の処理作業負荷に対して消失させられ得る。
【0042】
図5は、プロセッサによるターゲット・チェッキング分岐命令の処理を示すフロー線図である。ステップ40において、ターゲット・チェッキング分岐命令(リンク付き分岐命令以外)が、命令デコーダ6によりデコードされる。リンク付き分岐命令の処理は、下記で説明される
図6において、別々に論考されることになる。一部の事例において、すべての分岐命令が、ターゲット・チェッキング・タイプの分岐命令であるとみなされ得る。代替的には、所定のタイプの分岐のみが、ターゲット・チェッキング分岐命令とみなされ得る。例えば、命令デコーダ6は、分岐命令は、それが、データ依存分岐であって、そのターゲット・アドレスが、より早い命令により指定されるデータに依存する、データ依存分岐であるならば、ターゲット・チェッキング分岐であると決定し得る。
【0043】
ステップ42において、処理回路4は、分岐がとられるべきであるかどうかを決定又は予測する。プロセッサが、分岐のアウトカムが実際に知られる前に、分岐がとられる公算が大きいか、それともとられない公算が大きいかを予測するための分岐予測器を用意されることは普通であり、そのことによって、後続の命令は、分岐のアウトカムが解決される前に、フェッチ、デコード、及び実行され得る。分岐予測が、正しくないことが判明するならば、処理は、分岐ポイントに巻き戻され、次いで、正しい分岐アウトカムによって再開し得る。分岐が、とられないと決定又は予測されるならば、ステップ44において、次の逐次的命令が、分岐をとることなく処理される。他方で、分岐が、とられると予測又は決定されるならば、ステップ46において、命令デコーダ6は、分岐のターゲット・アドレスにおける命令が、許されるタイプの分岐ターゲット命令であるかどうかを決定するように、処理回路4を制御する。どのタイプの分岐ターゲット命令が許されるかは、実行されている分岐の個別のタイプに依存し得るものであり、又は、プロセッサの個別の挙動を構成し得る構成レジスタ内の構成値などの他のパラメータに依存し得る。分岐に対するターゲット・アドレスにおける命令が、許されるタイプの分岐ターゲット命令のうちの1つでないならば、ステップ48において、エラー・ハンドリング応答がトリガされる。エラー・ハンドリング応答は、例えば、障害をハンドリングし、その障害をユーザに報告するように、例外ハンドラをトリガし得る、障害又は例外のシグナリングであり得る。他方で、分岐のターゲット・アドレスにおける命令が、許されるタイプの分岐ターゲット命令であるならば、ステップ50において、処理回路4は、エラー・ハンドリング応答をトリガすることなく、分岐の後の継続される処理を許し得る。この手法が確実にするのは、分岐は、攻撃者が、意図されない様式でコードのまとまりを一体につなぎ合わせるために分岐制御データを変造する範囲を限定するために、コード内の所定のあらかじめ決定された位置に分岐するのみであり得るということである。
【0044】
図6は、リンク付き分岐命令の処理を例示するフロー線図である。ステップ60において、命令デコーダが、リンク付き分岐命令をデコードする。ステップ62において、命令デコーダ6は、リンク付き分岐命令が分岐ターゲット・バリアントであるかどうかを決定する。リンク付き分岐命令のバリアントは、命令エンコーディングから、例えば、命令オペコードから、又は、リンク付き分岐命令に関する個別のバリアントを指示する値を指定するエンコーディングの別のフィールドから決定され得る。代替的には、命令デコーダ6は、バリアントを、レジスタ・バンク14内の構成レジスタ内に記憶される構成値から決定し得る。さらには、リンク付き分岐命令のバリアントは、分岐リンク命令のアドレスに、又は、リンク付き分岐命令に分岐する先立つ分岐のアドレスに依存し得る。別の実例において、例外が、先立つ分岐が実行されたのでまさしく発生したのであるならば、リンク付き分岐命令のバリアントを決定する、より早い分岐の特性を規定するデータが、例外がとられたときにセーブされた例外状態情報から、又は、アドレスであって、それから処理が、例外の、後に続くハンドリングを再開することになる、アドレスを指示する例外復帰アドレスの所定のビット(これらのビットは、例外をとるとき、後続のリンク付き分岐命令のバリアントを決定する、先立つ分岐の特性に基づいて修正されている)から決定され得る。
【0045】
リンク付き分岐命令が分岐ターゲット・バリアントでないならば、ステップ64において、分岐がとられることになるかどうかが決定又は予測される。そうでないならば、処理は、ステップ66において、分岐をとることなく、リンク付き分岐命令から逐次的に先に向かって後に続く次の命令に進行する。分岐がとられるならば、ステップ68において、命令デコーダ6は、リンク・レジスタ内の復帰アドレスを、リンク付き分岐命令から逐次的に後に続く次の命令のアドレスにセットするように、処理回路4を制御する。ステップ70において、プログラム・フローは、リンク付き分岐命令のターゲット・アドレスにおける命令に分岐するように制御される。分岐ターゲット・アドレスは、リンク付き分岐命令により指定されるレジスタ値から、又は即値から決定され得るものであり、絶対アドレス、又は、プログラム・カウンタに相対的に規定される相対アドレスのいずれかと規定され得る。
【0046】
ステップ72において、命令デコーダは、リンク付き分岐命令がターゲット・チェッキング・タイプの分岐命令であるかどうかを決定する。そうでないならば、ステップ74において、処理は、単純に、分岐の後に継続することを許される。しかしながら、リンク付き分岐命令がターゲット・チェッキング・タイプの分岐命令であるならば、ステップ76において、命令デコーダ6は、分岐のターゲット・アドレスにおける命令が、許されるタイプの分岐ターゲット命令であるかどうかを決定するように、処理回路4を制御する。そうでないならば、ステップ78において、エラー・ハンドリング応答が、
図5のステップ48においてと同じ手立てでトリガされ、一方で、ターゲット・アドレスにおける命令が、許されるタイプの分岐ターゲット命令であるならば、ステップ74において、処理は、分岐の後に継続する。どのタイプの命令が、リンク付き分岐命令に対する、許されるタイプの分岐ターゲット命令として取り扱われるかは、実現例ごとに変動し得る。一部の事例において、一般的な分岐ターゲット命令BTIが、任意のタイプの分岐に対する、許される分岐ターゲット命令として取り扱われ得る。他の事例において、所定のタイプの分岐により、有効にターゲットにされるのみであり得る、所定の分岐タイプ固有分岐ターゲット命令が用意され得る。
【0047】
ステップ62において、リンク付き分岐命令が命令の分岐ターゲット・バリアントであるならば、ステップ80において、制御フローが、ターゲット・チェッキング・タイプの分岐命令からの分岐の結果として非逐次的にリンク付き分岐命令に進んだかどうかが決定される。そうでないならば、ステップ81において、分岐がとられることになるかどうかが決定又は予測される。そうでないならば、処理は、ステップ66において、分岐をとることなく、リンク付き分岐命令から逐次的に先に向かって後に続く次の命令に進行する。分岐がとられるならば、ステップ82において、後続の復帰分岐に対する復帰アドレスが、リンク付き分岐命令それ自体のアドレスに等しくセットされ、次いで、処理はステップ70に進行し、その場合、ステップ70から78が、上記で論考されたのと同じ手立てで遂行される。ゆえに、リンク付き分岐命令の分岐ターゲット・バリアントへのプログラム・フローの逐次的変化、又は、ターゲット・チェッキング・タイプのものでない分岐からの分岐ターゲット・バリアントへのプログラム・フローの非逐次的変化において、リンク付き分岐挙動が起動されるが、ステップ68においてのように、復帰アドレスを次の命令のアドレスにリセットすることの代わりに、アドレスは、リンク付き分岐命令のアドレスに等しくセットされ、そのことによって、後続の復帰分岐は、処理をリンク付き分岐命令に復帰させることになり、そのことによって、そのリンク付き分岐命令は、次いで、分岐ターゲット命令として機能し得る。
【0048】
ステップ80において、制御フローが、ターゲット・チェッキング・タイプの分岐命令(復帰分岐命令RET、又は、一般的な形式の分岐命令であって、リンク・レジスタを、ターゲット・アドレスを規定するその分岐命令のソース・レジスタとして指定する、それらの分岐命令を含み得る、データ依存分岐など)から非逐次的にリンク付き分岐命令に進むということが決定されるならば、方法はステップ84に進行する。ステップ84において、命令デコーダ6又は処理回路4は、リンク付き分岐命令の分岐ターゲット・バリアントが、制御フローがリンク付き分岐命令に進むことを引き起こした分岐に対する、許されるタイプの分岐ターゲット命令であるかどうかを決定する。そうでないならば、エラー・ハンドリング応答が、ステップ86において、ステップ78においてトリガされるものと同様にトリガされる。しかしながら、リンク付き分岐命令が、関連性のある分岐に対する、許されるタイプの分岐ターゲット命令であるならば、ステップ88において、エラー・ハンドリング応答は抑制される。リンク付き分岐命令と関連付けられる分岐が、さらには抑制されるものであり、なぜならば、その分岐はすでに一度履行されているからであり、復帰分岐の後に続いて、処理は、代わりに、リンク付き分岐命令から逐次的に継続するべきである。ゆえに、継続される処理が、リンク付き分岐命令から逐次的に後に続く命令に対して許される。リンク付き分岐命令が、ステップ84において、許されるタイプの分岐ターゲット命令であるかどうかは、処理がリンク付き分岐命令に方向設定し直されることを引き起こした分岐の個別のタイプに依存し得る。例えば、リンク付き分岐命令の分岐ターゲット・バリアントの1つのタイプは、単に、専用分岐復帰命令RETに対する有効な分岐ターゲット命令であり得るものであり、一方で、リンク付き分岐命令の別のバリアントは、より一般的な分岐に対する、許されるタイプの分岐ターゲット命令であり得る。
【0049】
図7は、使用され得るシミュレータ実現例を例示する。前述した実施例は、本発明を、当該の技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の見地において実現するが、コンピュータ・プログラムの使用を通して実現される、本明細書において説明される実施例による命令実行環境を提供することが、さらには可能である。そのようなコンピュータ・プログラムは、しばしば、シミュレータと呼称されることが、それらのシミュレータが、ハードウェア・アーキテクチャのソフトウェア・ベースの実現例を提供する限りにおいて行われる。シミュレータ・コンピュータ・プログラムの異形は、エミュレータ、仮想機械、モデル、及び、動的バイナリ・トランスレータを含むバイナリ・トランスレータを含む。典型的には、シミュレータ実現例は、シミュレータ・プログラム110をサポートする、ホスト・オペレーティング・システム120を任意選択で作動させる、ホスト・プロセッサ130上で作動し得る。一部の配置構成において、ハードウェアと、提供される命令実行環境、及び/又は、同じホスト・プロセッサ上で提供される複数個の別個の命令実行環境との間に、シミュレーションの複数個の層が存し得る。歴史的には、強力なプロセッサが、程よいスピードで実行するシミュレータ実現例を提供するために要されてきたが、そのような手法は、互換性又は再使用の理由のために、別のプロセッサに対してネイティブなコードを作動させることの所望が存するときなど、所定の状況においてはもっともなことであり得る。例えば、シミュレータ実現例は、ホスト・プロセッサ・ハードウェアによりサポートされない追加的な機能性を伴う命令実行環境を提供し、又は、典型的には異なるハードウェア・アーキテクチャと関連付けられる命令実行環境を提供し得る。シミュレーションの概観は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁において与えられる。
【0050】
実施例が、個別のハードウェア構築物又は特徴を参照して先に説明された程度まで、シミュレートされる実施例において、等価の機能性が、適したソフトウェア構築物又は特徴により提供され得る。例えば、個別の回路は、シミュレートされる実施例において、コンピュータ・プログラム論理として実現され得る。同様に、レジスタ又はキャッシュなどのメモリ・ハードウェアは、シミュレートされる実施例において、ソフトウェア・データ構造として実現され得る。先に説明された実施例において言及されたハードウェア要素のうちの1つ又は複数が、ホスト・ハードウェア(例えば、ホスト・プロセッサ130)上に存在する配置構成において、一部のシミュレートされる実施例は、適する場合に、ホスト・ハードウェアを利用し得る。
【0051】
シミュレータ・プログラム110は、コンピュータ可読記憶媒体(非一時的媒体であり得る)上に記憶され得るものであり、シミュレータ・プログラム110によりモデリングされているハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェイスと同じである、ターゲット・コード100(アプリケーションと、オペレーティング・システムと、ハイパーバイザとを含み得る)に対するプログラム・インターフェイス(命令実行環境)を提供する。かくして、上記で説明された、リンク付き分岐命令の分岐ターゲット・バリアントを含む、ターゲット・コード100のプログラム命令は、シミュレータ・プログラム110を使用する命令実行環境の中から実行され得るものであり、そのことによって、上記で論考された装置2のハードウェア特徴を実際には有さないホスト・コンピュータ130は、これらの特徴をエミュレートし得る。シミュレータ・プログラム110は、例えば、命令デコード・プログラム論理114(例えば、ターゲット・コード100内で遭遇される命令のエンコーディングに依存して選択される個別の処理関数を呼び出すための、一連の「if-then」ステートメント)と、命令デコード・プログラム論理114により選択される関数を遂行する、シミュレータ・プログラム110のコードに対応する処理プログラム論理116とを含み得る。ゆえに、処理プログラム論理116は、上記で論考されたようなリンク付き分岐命令の分岐ターゲット・バリアントの機能性を提供するための論理を含み得る。
【0052】
本出願において、単語「~するように構成される」は、装置の要素が、規定される動作を履行することができる構成を有するということを意味するように使用される。この文脈において、「構成」は、ハードウェア又はソフトウェアの相互接続の、配置構成又は様式を意味する。例えば、装置は、規定される動作を提供する専用ハードウェアを有し得るものであり、又は、プロセッサ若しくは他の処理デバイスは、機能を遂行するようにプログラムされ得る。「するように構成される」は、装置要素が、規定される動作を提供するために任意の手立てで変化させられることを必要とするということを含意しない。
【0053】
本発明の例示的な実施例が、添付図面を参照して、本明細書において詳細に説明されたが、本発明は、それらの寸分違わない実施例に限定されないということ、並びに、様々な変化及び変更が、それらの実施例において、当業者により、添付される特許請求の範囲により定義されるような本発明の範囲及び趣旨から逸脱することなくもたらされ得るということが理解されることになる。