(57)【特許請求の範囲】
【請求項１】
メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスから前記メモリを保護するメモリ保護方法であって、
情報処理装置の定義手段が、保護領域の間の関係を定義する定義工程と、
前記情報処理装置の判定手段が、前記保護領域の間の前記関係が包含関係である場合に、被包含保護領域から包含保護領域へは直接アクセス不可として、包含保護領域から被包含保護領域へは直接アクセス可能として判定する判定工程と、
前記情報処理装置のメモリ管理手段が、直接アクセス可能と判定されたアクセスに対して直接的なアクセスを許可し、直接アクセス不可と判定されたアクセスについて直接的なアクセスを禁止するメモリ管理工程と、
を有し、
前記判定工程は、前記直接アクセス可能と判定された保護領域と、前記直接アクセス不可と判定された保護領域と、の判定の結果を、前記保護領域の間の関係を定めたアクセス権管理テーブルに格納し、
前記直接アクセス不可と判定された保護領域に対するアクセスが要求された場合に、前記メモリ管理工程は、前記アクセス権管理テーブルに格納されている前記直接アクセス不可と判定された保護領域を前記直接アクセス可能な保護領域として変更し、前記直接アクセス不可と判定された保護領域への間接的なアクセスを許可することを特徴とするメモリ保護方法。
【請求項２】
前記判定工程は、前記保護領域の間の前記関係が包含関係でない場合に、互いの保護領域は直接アクセス不可であると判定することを特徴とする請求項１に記載のメモリ保護方法。
【請求項３】
前記直接アクセス不可と判定された保護領域への間接的なアクセスが終了した後に、前記メモリ管理工程は、前記直接アクセス可能な保護領域として変更された保護領域を、前記直接アクセス不可の保護領域に戻し、当該保護領域への直接的なアクセスを不正アクセスとして禁止することを特徴とする請求項１に記載のメモリ保護方法。
【請求項４】
前記メモリには、例外処理ごとにアクセスされる可能性のある保護領域を定義する例外時アクセス領域定義テーブルが格納されていることを特徴とする請求項１に記載のメモリ保護方法。
【請求項５】
前記情報処理装置の入力手段が、例外処理として割込み処理の入力を受け付ける入力工程を更に有し、
前記メモリ管理工程は、前記入力工程で前記例外処理として割込み処理の入力が受け付けられた場合に、前記例外時アクセス領域定義テーブルを参照して、前記割込み処理によりアクセスされる可能性のある保護領域を求め、当該保護領域が、前記アクセス権管理テーブルにおいて前記直接アクセス可能と判定された保護領域として格納されている場合に、前記アクセスする可能性のある保護領域に対する直接的なアクセスを許可することを特徴とする請求項４に記載のメモリ保護方法。
【請求項６】
前記割込み処理により前記アクセスされる可能性のある保護領域が、前記アクセス権管理テーブルにおいて前記直接アクセス不可と判定された保護領域として格納されている場合に、
前記メモリ管理工程は、前記アクセス権管理テーブルに格納されている前記直接アクセス不可と判定された保護領域を前記直接アクセス可能な保護領域として変更し、前記アクセスされる可能性のある保護領域への間接的なアクセスを許可することを特徴とする請求項５に記載のメモリ保護方法。
【請求項７】
前記割込み処理が終了した後に、前記メモリ管理工程は、前記アクセス権管理テーブルに格納されている、前記直接アクセス可能な保護領域として変更された保護領域を、前記直接アクセス不可の保護領域に戻し、当該保護領域への直接的なアクセスを不正アクセスとして禁止することを特徴とする請求項６に記載のメモリ保護方法。
【請求項８】
前記メモリ管理工程はプログラムの記述を生成する工程であって、直接的なアクセスを許可するアクセスは関数コールによって記述され、直接的なアクセスを禁止するアクセスは間接的な手続き呼び出しによって記述されることを特徴とする請求項１に記載のメモリ保護方法。
【請求項９】
前記メモリ管理工程はプログラムを実行する工程であって、直接的なアクセスを許可する場合には関数コールによるアクセスを実行し、直接的なアクセスを禁止する場合には間接的な手続き呼び出しによるアクセスを実行することを特徴とする請求項１に記載のメモリ保護方法。
【請求項１０】
メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスから前記メモリを保護するメモリ保護方法であって、
情報処理装置のメモリ管理手段が、信頼度が高いモジュールから前記保護領域へのアクセスに対して関数コールによって直接アクセスし、信頼度が高くないモジュールから前記保護領域への関数コールによる直接アクセスを禁止して間接的な手続き呼び出しによってアクセスする工程を有し、
前記工程は、前記直接アクセスが可能な保護領域と、前記直接アクセスが禁止された保護領域とを、前記保護領域の間の関係を定めたアクセス権管理テーブルに格納し、
前記直接アクセスが禁止された保護領域に対するアクセスが要求された場合に、前記工程は、前記アクセス権管理テーブルに格納されている前記直接アクセスが禁止された保護領域を前記直接アクセスが可能な保護領域として変更し、前記直接アクセスが禁止された保護領域への間接的なアクセスを許可することを特徴とするメモリ保護方法。
【請求項１１】
メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスから前記メモリを保護する情報処理装置であって、
保護領域の間の関係を定義する定義手段と、
前記保護領域の間の前記関係が包含関係である場合に、被包含保護領域から包含保護領域へは直接アクセス不可として、包含保護領域から被包含保護領域へは直接アクセス可能として判定する判定手段と、
直接アクセス可能と判定されたアクセスに対して直接的なアクセスを許可し、直接アクセス不可と判定されたアクセスについて直接的なアクセスを禁止するメモリ管理手段と、
を備え、
前記判定手段は、前記直接アクセス可能と判定された保護領域と、前記直接アクセス不可と判定された保護領域と、の判定の結果を、前記保護領域の間の関係を定めたアクセス権管理テーブルに格納し、
前記直接アクセス不可と判定された保護領域に対するアクセスが要求された場合に、前記メモリ管理手段は、前記アクセス権管理テーブルに格納されている前記直接アクセス不可と判定された保護領域を前記直接アクセス可能な保護領域として変更し、前記直接アクセス不可と判定された保護領域への間接的なアクセスを許可することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラムによる不正アクセスからメモリを保護するメモリ保護方法および情報処理装置に関する。
【背景技術】
【０００２】
従来、プログラムによる不正アクセスからメモリを保護する方法としては、中央処理装置（ＣＰＵ）の実行モードとメモリ管理装置（ＭＭＵ）の機能とを連動させることが一般的であった。例えば、特権モードと非特権モード（もしくは複数のレベルを有する特権モード）の実行を区別するＣＰＵを用いて、ＭＭＵの機能により特権モード（もしくは高特権モード）でアクセス可能な領域といずれの実行モードでもアクセス可能な領域とを設定する。これにより、非特権モードによる不正アクセスから特権モードでのみ使用することが可能なメモリ領域を設けることが出来る。この方法では、保護される領域を実行モードに依存せずに自由に設定することは出来ないが、組込みソフトウェアはすべてが特権モードで実行されることが多くある。
【０００３】
同一の実行モードで実行されるプログラムによる不正アクセスからメモリを保護する方法としては、プログラムを一つ以上のモジュールに分割し、それぞれを固有の仮想アドレス空間に配置する方法が知られている。一般的に、異なる仮想アドレス空間に配置された機能モジュールは別のアドレス空間に配置されたメモリ領域に直接アクセスする（ＯＳ等を介さずにアクセスする）ことが出来ない。そのため、アドレス空間に配置されたモジュール間の不正アクセス（unauthorized access）を防ぐことが出来る。一方、この方法ではモジュール間の機能呼び出しに伴い異なるモジュールのデータにアクセスするためにはオペレーティングシステム（ＯＳ）の機能を利用する必要がある。OS内部では一般的にデータのコピーが行われるため、別モジュールのデータを直接アクセスする場合と比べて実行効率の面で劣る。
【０００４】
単一アドレス空間で不正アクセスからメモリを保護する方法としては、単一アドレス空間を区分した領域とモジュールとの両方に識別子を用いる方法が知られている（例えば、特許文献１）。モジュールは自身の識別子と異なる識別子が付与された領域にはアクセスすることが許されていない。そこで、異なるモジュールにアクセスする際には特殊な空間切り替えプログラムを実行することでアクセス先の識別子をアクセス前にプログラムの識別子に変更する。さらに、アクセス後に元の識別子に復帰させることで機能呼び出し以外のアクセスを制限する。この場合、データへのアクセスはアドレス指定により直接行うことが可能であるが、機能呼び出しにおいて識別子に関する操作が必要なので直接的な関数コールにおけるデータ参照より実行効率の面で劣る。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−１８９６３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来、メモリ保護機能を利用する場合には、異なる保護領域に含まれるデータにアクセスする際に間接的な機能呼び出しを用いる必要があった。そのため、保護領域が異なる特定のモジュールからのアクセスを信頼できる場合でも、アクセス元のモジュールは間接的な機能呼び出しを用いなければならなかった。間接的な機能呼び出しは直接的な機能呼び出しよりも実行効率が低く、実行効率が低下するという問題があった。
【課題を解決するための手段】
【０００７】
本発明はアクセス先のモジュールから信頼度が高いと判定されたモジュールからは直接的な手続き呼び出しおよびアクセスを可能にして実行効率の低下を軽減し、信頼度が低いと判定されたモジュールからのアクセスは間接的な機能呼び出しを実行していない場合には不正アクセスとして検出し、間接的な機能呼び出しを実行している場合には正当なアクセスとして許可するメモリ保護技術を提供する。
【０００８】
本発明の一つの側面にかかるメモリ保護方法は、メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスから前記メモリを保護するメモリ保護方法であって、
情報処理装置の定義手段が、保護領域の間の関係を定義する定義工程と、
前記情報処理装置の判定手段が、前記保護領域の間の前記関係が包含関係である場合に、被包含保護領域から包含保護領域へは直接アクセス不可として、包含保護領域から被包含保護領域へは直接アクセス可能として判定する判定工程と、
前記情報処理装置のメモリ管理手段が、直接アクセス可能と判定されたアクセスに対して直接的なアクセスを許可し、直接アクセス不可と判定されたアクセスについて直接的なアクセスを禁止するメモリ管理工程と、を有し、
前記判定工程は、前記直接アクセス可能と判定された保護領域と、前記直接アクセス不可と判定された保護領域と、の判定の結果を、前記保護領域の間の関係を定めたアクセス権管理テーブルに格納し、
前記直接アクセス不可と判定された保護領域に対するアクセスが要求された場合に、前記メモリ管理工程は、前記アクセス権管理テーブルに格納されている前記直接アクセス不可と判定された保護領域を前記直接アクセス可能な保護領域として変更し、前記直接アクセス不可と判定された保護領域への間接的なアクセスを許可することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、信頼度が高いと判定された保護領域に対しては直接的なアクセスを可能にして実行効率の低下を軽減し、信頼度が低いと判定された保護領域への直接的なアクセスを不正アクセスとして抑制するメモリ保護技術の提供が可能になる。
【図面の簡単な説明】
【００１０】
【図１Ａ】実施形態１の情報処理装置の構成を説明する図。
【図１Ｂ】実施形態１の情報処理装置の構成を説明する図。
【図１Ｃ】保護領域間の階層関係を説明するための図。
【図２】（ａ）単一アドレス空間上の保護領域の配置を説明するための図、（ｂ）アクセス権管理テーブルの初期設定を説明するための図。
【図３】実施形態１における間接的な手続き呼び出しを実現する処理を説明するためのフローチャート。
【図４Ａ】実施形態２の情報処理装置の構成を説明する図。
【図４Ｂ】例外時アクセス権管理テーブルの初期設定を示す図。
【図５】実施形態２の例外ハンドラを実行する処理のフローチャート。
【図６Ａ】実施形態３の情報処理装置の構成を説明する図。
【図６Ｂ】図７のフローチャートに従って手続き呼び出しを変換した後の呼び出し関係を例示的に説明する図。
【図７】保護領域以外への手続き呼び出しを間接的な手続き呼び出しに変換する処理を説明するフローチャート。
【図８】（ａ）保護領域階層関係定義テーブルを説明するための図、（ｂ）例外時アクセス領域定義テーブルが保持する情報を示す図。
【図９Ａ】アクセス識別子を有するアクセス権管理テーブルを説明するための図。
【図９Ｂ】アクセス制御ベクタを説明するための図。
【発明を実施するための形態】
【００１１】
＜実施形態１＞
実施形態１における情報処理システムは情報処理装置１および情報処理装置２の二つの情報処理装置から構成される。情報処理装置１では検証対象プログラムから検証対象イメージを生成し、情報処理装置２では検証対象イメージを実行し検証する。
【００１２】
図１Ａに実施形態１にかかる情報処理装置１の構成を示す。中央処理装置（CPU）１０１は図１Ａの情報処理装置１の全体を制御する。メモリ１０２は、変更を必要としないプログラムやパラメータを格納するＲＯＭや外部装置などから供給されるプログラムやデータを一時記憶するＲＡＭから構成される。入出力インタフェース１０３は情報処理装置２との接続を確保する。システムバス１０４はＣＰＵ１０１、メモリ１０２、および入出力インタフェース１０３の各ユニットを通信可能に接続する。
【００１３】
メモリ１０２上の検証対象プログラム１０５は不正アクセスを含む可能性があるプログラムであり、本実施形態ではモジュールＡ、モジュールＢ、モジュールＣ、モジュールＤから構成されるとする。不正アクセスはプログラムの欠陥などにより発生するアクセスであり、意図通りに発生するアクセスは正当アクセス（authorized access）とする。検証対象プログラム１０５では、呼び出し元モジュールを信頼可能な場合の機能呼び出しは直接的な関数コールとして記述されているとする。それ以外の機能呼び出しは後述の間接的な手続き呼び出しとして記述されているとする。また、モジュール間のアクセスは機能呼び出しにおいてのみ必要とされるものとする。テーブル１０６（保護領域階層関係定義テーブル）は保護領域間の階層関係を定義する。プログラム（検証対象イメージ生成プログラム１０７）は検証対象イメージを生成する。
【００１４】
図１Ｂに実施形態１にかかる情報処理装置２の構成を示す。情報処理装置２は、メモリのアドレス空間を二つ以上の保護領域に分割し、プログラムによる保護領域への不正アクセスからメモリを保護することが可能である。中央処理装置（ＣＰＵ）１１１は情報処理装置２の全体を制御する。メモリ１１２は、変更を必要としないプログラムやパラメータを格納するＲＯＭや情報処理装置１から供給されるプログラムやデータを一時記憶するＲＡＭから構成される。メモリ管理装置としてのメモリ管理ユニット１１３はＣＰＵ１０１から他のユニットへ要求されたアクセスの正当性を判断する。メモリ管理ユニット１１３はMemory Management Unit （ＭＭＵ）あるいはMemory Protection Unit（ＭＰＵ）であり、ＣＰＵ１１１に内蔵されていてもよい。メモリ管理ユニット１１３はアクセス権管理テーブル１１９を参照して、ＣＰＵ１１１からメモリ１１２へのアクセスを許可あるいは制限する。アクセス権管理テーブル１１９はメモリ１１２上に配置されてもよい。メモリ管理ユニット１１３は、CPU１１１からのアクセス要求を受けると、アクセス先アドレスに対応するエントリをアクセス権管理テーブル１１９から検索し、アクセス可能な保護領域へのアクセスか、アクセス不可の保護領域へのアクセスかを判定する。メモリ管理ユニット１１３は、制限されたアクセスの要求を検出するとＣＰＵ１１１にその事象を伝達する。入出力インタフェース１１４は情報処理装置１との接続を確保する。ただし、入出力インタフェース１１４は検証対象イメージ１１６の実行中に割り込みを発生させることはない。システムバス１１５はＣＰＵ１１１、メモリ１１２、メモリ管理ユニット１１３、および入出力インタフェース１１４の各ユニットを通信可能に接続する。
【００１５】
メモリ１１２上の検証対象イメージ１１６は情報処理装置１から渡される。オペレーティングシステム１１７はメモリ管理ユニット１１３の初期設定を行う。初期アクセス権保持テーブル１１８はアクセス権管理テーブル１１９の初期設定値を保持する。
【００１６】
図１Ｃに保護領域間の階層関係を概念的に示す。保護領域はモジュールのデータを保護するための領域である。例えば、モジュールA用の保護領域はモジュールAのデータを保護するための領域である。モジュールＣ用の保護領域はモジュールＡ用の保護領域とモジュールＢ用の保護領域とに包含され、モジュールＡ、Ｂ、Ｃ、Ｄ用の保護領域はオペレーティングシステムの保護領域に包含されているものとする。それ以外の関係（包含関係でない関係）は対等関係であるとする。保護領域が包含関係にある場合、包含する保護領域から被包含保護領域へのアクセスには不正アクセスは含まれないとする。それに対し、被包含保護領域から包含領域へのアクセスや対等関係にある保護領域へのアクセスには不正アクセスが含まれる可能性があるとする。
【００１７】
図８（ａ）は図１Ｃに示した保護領域間の関係を定義する保護領域階層関係定義テーブル１０６を例示する図である。保護領域の階層関係を定義するには、保護領域の包含関係のみを保護領域階層関係定義テーブル１０６に記述する。記述されない保護領域間の関係は対等関係である。例えば、モジュールＡ用の保護領域とモジュールＢ用の保護領域の関係は対等関係である。
【００１８】
まず、情報処理装置１における処理を説明する。情報処理装置１では検証対象イメージ生成プログラム１０７が保護領域階層関係定義テーブル１０６を参照して保護領域間の信頼関係を判定する。保護領域間の関係が包含関係である場合、被包含保護領域から包含保護領域に対しては信頼度が高いと判定し、包含保護領域から被包含保護領域に対しては信頼度が低いと判定する。それに対し、対等関係にある場合（包含関係でない場合）、互いの保護領域に対しては信頼度が低いと判定する。例えば、図１Ｃにおいては、オペレーティングシステム１１７用の保護領域１２１（包含保護領域）は他の全ての保護領域（被包含保護領域）を包含する。したがって、オペレーティングシステム１１7用の保護領域１２１は他のすべての保護領域から信頼度が高いと判定される。一方、モジュールＡ用の保護領域１２２とモジュールＢ用の保護領域１２３は対等関係にある。そのため、モジュールＡ用とモジュールＢ用の保護領域は、それぞれから信頼度が低いと判定される。
【００１９】
検証対象イメージ生成プログラム１０７はさらに検証対象プログラム１０５をコンパイルし、検証対象イメージ１１６を生成する。コンパイル結果には検証対象イメージ１１６に関する単一アドレス空間上の配置情報が含まれる。検証対象イメージ、単一アドレス空間上の配置情報、保護領域間の信頼関係に関する判定結果は情報処理装置１から情報処理装置２に入出力インタフェース１０３および入出力インタフェース１１４経由で渡される。
【００２０】
次に、情報処理装置２における処理を説明する。情報処理装置２では検証対象イメージ１１６の単一アドレス空間上の配置情報と保護領域の信頼関係の判定結果を、OSの単一アドレス空間上の配置情報と併せて初期アクセス権保持テーブル１１８に保持する。
【００２１】
図２（ａ）に、オペレーティングシステムおよび検証対象イメージに割り当てられた領域の単一アドレス空間上での配置例を示す。各モジュールの保護領域に割り当てられたアドレス範囲はそれぞれのプログラムに割り当てられたメモリ領域に対応する。例えば、オペレーティングシステム用の保護領域に対するアドレス範囲は0x0000から0x0FFFであり、オペレーティングシステム１１７に割り当てられたメモリ上の領域はこの範囲のアドレスによってのみアクセス可能である。
【００２２】
図２（ｂ）に、初期アクセス権保持テーブル１１８の例を示す。この初期設定により、信頼度が高いと判定された保護領域と、信頼度が低いと判定された保護領域と、の判定の結果をアクセス権管理テーブル１１９に格納する。この初期設定によれば、アクセス元のモジュールから信頼度が高いと判定された保護領域からのアクセスが許可され、信頼度が低いと判定された保護領域からのアクセスが制限される。
【００２３】
信頼度が低いと判定された保護領域からのアクセスを情報処理装置２において実現するには間接的な手続き呼び出しを用いる。間接的な手続き呼び出しを用いれば、その手続き呼び出しを実行中においてのみ、信頼度が低いと判定された保護領域からのアクセスが可能になる。
【００２４】
図３に、間接的な手続き呼び出しを実現する処理を示す。ここでは、モジュールＡがモジュールＢの手続きを間接的に呼び出す場合を例に処理の流れを説明する。まず、モジュールAの実行において間接的な手続き呼び出しが行われた場合、モジュールAは間接手続き呼び出しの処理としてモジュールＡ用の保護領域とモジュールＢ用の保護領域を一時的に融合（結合）する。これはステップＳ３０２において、モジュールAがアクセス権管理テーブル１１９の内容を書き換えることにより実現する。すなわち、アクセス先であるモジュールＢの保護領域に割り当てられたアドレス範囲0x2800から0x2FFFに対するモジュールＡからのアクセスに対するエントリをアクセス禁止からアクセス許可に書き換える。これによりモジュールAによるモジュールBへのアクセスが許可される。次に、ステップＳ３０３において、アクセス先のモジュールＢが提供する所望の手続きをモジュールAが関数コールにより直接的に呼び出す。最後に、関数コールからのリターン後に、融合した保護領域をモジュールAが再度融合前の保護領域に分離する。これはステップＳ３０４において、アクセス権管理テーブル１１９を元の設定値に書き戻し、アドレス範囲0x2800から0x2FFFに対するモジュールＡからのアクセスを禁止することで実現する。
【００２５】
上述の保護領域の融合あるいは分離は、モジュールＡに対するアクセス権管理テーブルの有効範囲を変更することで実現してもよい。例として図９Ａに示すアクセス権管理テーブル９６１および図９Ｂに示すアクセス権制御ベクタ９６２を有するMMUを利用する場合の実現方法を説明する。アクセス権管理テーブル９６１はアクセス先のアドレス範囲に対してアクセス識別子を保持し、アクセス識別子とアクセス権制御ベクタ９６２の組み合わせによりアクセスの可否を判定する。アクセス権制御ベクタ９６２は３２ビットのビット列であり、各ビットがアクセス識別子１から３１に対応する。アクセス先のアドレス範囲に付与されたアクセス識別子に対応するビットがアクセス権制御ベクタ９６２において設定されている場合、そのアドレス範囲へのアクセスが許可される。そうではなく、対応するビットがクリアされている場合にはアクセスが制限される。例えば、モジュールAの実行開始時にはアクセス権制御ベクタ９６２は0xaになる。間接的な手続き呼び出しにおいて保護領域を融合あるいは分離する場合にはそれぞれアクセス権制御ベクタ９６２の対応ビットを設定、クリアすることにより実現する。例えば、モジュールAの実行において、モジュールAの保護領域とモジュールBの保護領域を融合するには、アクセス権制御ベクタ９６２においてアクセス識別子３に対応するビットを設定する。逆に分離するには、アクセス識別子３に対応するビットをクリアする。
【００２６】
以上の構成によれば、信頼度が低いと判定された保護領域からの機能呼び出しには間接的な手続き呼び出しが用いられ、信頼度が高いと判定された保護領域からの機能呼び出しには直接的な手続き呼び出しが用いられる。間接的な機能呼び出し以外における信頼度が低いと判定された保護領域からの直接的なアクセスは不正アクセスとして検出される（直接アクセス不可）。一方、信頼度が高いと判定された保護領域からのアクセスは直接的な関数コールにおいても許可される（直接アクセス可能）。直接的な手続き呼び出しは間接的な手続き呼び出しより実行効率が高いため、メモリ保護による実行効率の低下を抑えることが出来る。
【００２７】
本実施形態によれば、信頼度が高い保護領域に対しては直接的な手続き呼び出しを可能にして実行効率の低下を軽減し、信頼度が低いと判定された保護領域への間接的な手続き呼び出し以外におけるアクセスを不正アクセスとして禁止するメモリ保護技術の提供が可能になる。
【００２８】
＜実施形態２＞
実施形態２の情報処理システムは情報処理装置１および情報処理装置３の二つの情報処理装置から構成され、情報処理装置１は実施形態１のものと同じである。図４Ａに実施形態２にかかる情報処理装置３の構成を示す。実施形態２の情報処理装置３のメモリ管理ユニット４０２は例外時アクセス権管理テーブル４０６を有する。例外時アクセス権管理テーブル４０６はメモリ４０８上にあってもよい。単一アドレス空間上の保護領域の配置および保護領域間の関係は実施形態１と同様である。
【００２９】
入出力インタフェース１１４は、外部記憶装置や情報処理装置３のユーザとのやりとりを実現する入出力機器として機能することが可能である。さらに入出力インタフェース１１４は外部装置へ接続するネットワーク機器を接続可能にし、ＣＰＵ４０１に対して割込みを通知することが可能である。割り込みは検証対象イメージ１１６の実行中にも発生する可能性がある。ＣＰＵ４０１は例外処理を実行するための例外モードとそれ以外の処理を実行するための通常モードとを有し、割込みの入力を受理すると例外モードに遷移する。メモリ管理ユニット４０２はＣＰＵ４０１の実行モードを認識し、CPU４０１が通常モードのときはアクセス権管理テーブル４０５を参照してアクセスの可否を判断する。そして、メモリ管理ユニット４０２はCPU４０１が例外モードのときは例外時アクセス権管理テーブル４０６を参照してアクセスの可否を判断する。アクセス権管理テーブル４０５および例外時アクセス権管理テーブル４０６に保持される情報は実施形態１におけるアクセス権管理テーブル１１９と同じである。
【００３０】
メモリ４０８上の例外時アクセス領域定義テーブル４０７は情報処理装置３において生成されてもよいし、検証対象イメージ１１６とともに情報処理装置１から渡されてもよい。図８（ｂ）に例外時アクセス領域定義テーブル４０７が保持する情報を示す。例外時アクセス領域定義テーブル４０７は、例外処理ごとにアクセスする可能性のある領域を定義するテーブルである。例えば、例外ハンドラEXP1は0x0000から0x0FFFのアドレス範囲にのみアクセスする可能性があり、例外ハンドラISR2は0x0000から0x0FFFおよび0x3A00から0x37FFのアドレス範囲にアクセスする可能性がある。
【００３１】
図４Ｂに、例外時アクセス権管理テーブル４０６の初期設定を例示する。この初期設定によれば、ＣＰＵ４０１が例外モードに遷移した直後には、オペレーティングシステムに割り当てたアドレス空間0x0000から0x0FFFのみがアクセス可能である。
【００３２】
図５に、例外の発生により例外ハンドラを実行する処理を示す。ここでは、ISR2を呼び出す場合の処理を例に処理を説明する。まず、CPUが例外モードになるとOSに制御が移る。OSはステップＳ５０２において、例外時アクセス領域定義テーブル４０７を参照して、例外ハンドラISR2がアクセスする保護領域を特定する。ステップＳ５０３では、例外時アクセス権管理テーブル４０６の設定（図４Ｂ）を変更し、例外ハンドラISR2による0x0000から0x0FFFおよび0x3A00から0x3FFFのアドレス範囲に対するアクセスを許可する。次に、ステップＳ５０４で例外ハンドラISR2を呼び出す。例外ハンドラISR2の終了後、ステップＳ５０５において、例外時アクセス権管理テーブル４０６の設定を変更し、例外発生前の状態に復帰させる。上記以外の動作は実施形態１と同様である。
【００３３】
以上の構成によれば、例外ハンドラの実行において、アクセスを必要としない保護領域のメモリを不正アクセスによる破壊から防ぐことができる。また、例外ハンドラはアクセスを必要とする保護領域に対して間接的な機能呼び出しを用いずに直接的にアクセス可能であるため、メモリ保護による割り込み処理の応答性の低下を抑えることが出来る。
【００３４】
＜実施形態３＞
実施形態３の情報処理システムは情報処理装置２および情報処理装置４の二つの情報処理装置から構成され、情報処理装置２は実施形態１のものと同じである。図６Ａに実施形態３にかかる情報処理装置４の構成を示す。実施形態１との違いは、検証対象プログラム６０５における機能呼び出しが全て直接的な関数コールとして記述されていることである。また、公開手続き一覧テーブル６０６を有することも、実施形態１と相違する。公開手続き一覧テーブル６０６は保護領域間で呼び出すことが許可された手続きのシンボル名を列挙したテーブルである。
【００３５】
図７に、異なる保護領域への直接的な手続き呼び出しを間接的な手続き呼び出しに変換する処理を示す。検証対象イメージ生成プログラム６０７は検証対象プログラム６０５における手続き呼び出しの置換をコンパイル時に行う。まず、ステップＳ７０２において、別モジュールから呼び出される手続きのリストを生成する。ステップＳ７０３において、ステップＳ７０２で生成されたリストから、公開手続き一覧テーブル６０６に含まれない手続きを削除する。次に、ステップＳ７０４において、リストに残ったそれぞれの手続きを図３に示した手順に従って間接的に呼び出す手続きを検証対象プログラム６０５に追加する。さらに、ステップＳ７０５において、ステップＳ７０４で追加された手続きのシンボル名を、そこから間接的に呼び出される手続きのシンボル名にプレフィックス__を付与した文字列とする。最後に、ステップＳ７０６において、検証対象プログラム６０５における保護領域をまたぐ手続き呼び出しにおいて、呼び出される手続き名がステップS７０３で生成したリストに含まれていれば、手続き名にプレフィックス__を付与する。
【００３６】
ステップＳ７０４で追加された手続きは、それを呼び出すモジュールが直接呼び出せる領域に配置する。例えば、どのモジュールにも割り当てられていない0x3800から0x39FFのアドレス範囲を全てのモジュールからアクセス可能な領域として設定して、そこに追加された手続きを配置すれば全てのモジュールから直接的に呼び出すことが可能になる。
【００３７】
図６Ｂは、図７のフローチャートに従って手続き呼び出しを変換した後の呼び出し関係を例示的に説明する概念図である。図６Ｂでは、モジュールＡ６５１からモジュールＢ６５２に対する直接的な関数コール（ｐｒｏｃＢ）が、変換処理において追加された手続き６５３への呼び出し（＿ｐｒｏｃＢ）に変換されている。一方、追加された手続き６５３は直接的な関数コールによりモジュールＢ６５２の手続きを呼び出す。その結果、モジュールＡ６５１からモジュールＢ６５２への機能呼び出しは間接的な手続き呼び出しになる。上記以外の動作は実施形態１と同様である。
【００３８】
本発明は、複数の保護領域における包含関係に基づいて直接的なアクセスを禁止するか否かを判定し、判定結果に応じて記述を変えるコンパイラに適用してもよい。
【００３９】
以上の構成によれば、検証対象プログラム６０５を開発者が変更しなくても保護領域間の関係を変更することが可能であり、プログラムを変更する場合と比較して開発効率を向上させることが出来る。  
（その他の実施例）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１Ａ】
0005582971.tif 000002
【図１Ｂ】
0005582971.tif 000003
【図１Ｃ】
0005582971.tif 000004
【図２】
0005582971.tif 000005
【図３】
0005582971.tif 000006
【図４Ａ】
0005582971.tif 000007
【図４Ｂ】
0005582971.tif 000008
【図５】
0005582971.tif 000009
【図６Ａ】
0005582971.tif 000010
【図６Ｂ】
0005582971.tif 000011
【図７】
0005582971.tif 000012
【図８】
0005582971.tif 000013
【図９Ａ】
0005582971.tif 000014
【図９Ｂ】
0005582971.tif 000015