(57)【要約】【課題】  メモリ上で分割された領域間の不正アクセスを抑制するとともに、当該領域間に渡る手続きの実行速度の低下を軽減させるようにした技術を提供する。【解決手段】  プログラムによる不正アクセスからメモリを保護するメモリ保護方法は、メモリ上の単一アドレス空間を複数の領域に分割する領域定義処理工程と、分割された領域間に渡るプログラムの手続きの呼び出しに際して、分割された領域を一時的に結合させる結合処理工程と、領域が結合された後、手続きを呼び出す処理工程と、呼び出された手続きの実行の終了後、結合された領域を該結合前の状態に戻す復帰処理工程とを含む。【選択図】  図１
2010086410.tif 000002
【特許請求の範囲】
【請求項１】
プログラムによる不正アクセスからメモリを保護するメモリ保護方法であって、
前記メモリ上の単一アドレス空間を複数の領域に分割する領域定義処理工程と、
前記領域定義処理工程で分割された領域間に渡る前記プログラムの手続きの呼び出しに際して、該分割された領域を一時的に結合させる結合処理工程と、
前記結合処理工程で領域が結合された後、前記手続きを呼び出す処理工程と、
前記処理工程により呼び出された前記手続きの実行の終了後、前記結合された領域を該結合前の状態に戻す復帰処理工程と
を含むことを特徴とするメモリ保護方法。
【請求項２】
前記プログラムは、
複数の手続きを含むとともに、前記分割された領域間に渡る手続きに際して前記結合処理工程を呼び出す記述がなされており、
前記結合処理工程は、
前記プログラムにより呼び出されることで前記結合を行なう
ことを特徴とする請求項１記載のメモリ保護方法。
【請求項３】
前記プログラムによる前記メモリに対するアクセスの正当性を判断するメモリ管理工程
を更に含み、
前記メモリ管理工程では、
前記プログラムにより前記結合処理工程が呼び出されず前記分割された領域間に渡るアクセスが行なわれた場合に該アクセスを不正アクセスであると判断する
ことを特徴とする請求項２記載のメモリ保護方法。
【請求項４】
前記プログラムの中から前記分割された領域間に渡る手続きを検出し、該検出した手続きが前記処理工程で呼び出されるように前記プログラムの処理内容を変換する変換工程
を更に含むことを特徴とする請求項１記載のメモリ保護方法。
【請求項５】
前記変換工程では、
前記プログラムのソースコードを変更する
ことを特徴とする請求項４記載のメモリ保護方法。
【請求項６】
前記変換工程では、
前記プログラムのオブジェクトコードの外部参照手続き名を変更する
ことを特徴とする請求項４記載のメモリ保護方法。
【請求項７】
前記変換工程では、
前記プログラムの実行前に前記変換を行なう
ことを特徴とする請求項４記載のメモリ保護方法。
【請求項８】
前記変換工程では、
前記分割された領域間で正当に呼び出すことが認められた手続き名を規定する手続き定義情報に基づいて前記検出した手続きの中から変換対象となる手続きを選択し前記変換を行なう
ことを特徴とする請求項４記載のメモリ保護方法。
【請求項９】
前記単一アドレス空間は、
物理アドレス空間、又は仮想アドレス空間である
ことを特徴とする請求項１記載のメモリ保護方法。
【請求項１０】
前記不正アクセスは、
読み出し、又は書き込みである
ことを特徴とする請求項１記載のメモリ保護方法。
【請求項１１】
前記プログラムは、
１つ以上のモジュールから構成される
ことを特徴とする請求項１記載のメモリ保護方法。
【請求項１２】
前記領域定義処理工程で分割された領域は、
１つ以上の前記モジュールを含む領域と、前記モジュールを含まない領域とを少なくとも有する
ことを特徴とする請求項１１記載のメモリ保護方法。
【請求項１３】
前記領域定義処理工程では、
分割される領域のサイズと該領域に配置されるモジュールとを規定する領域定義情報に基づいて前記分割を行なう
ことを特徴とする請求項１１記載のメモリ保護方法。
【請求項１４】
前記領域定義処理工程では、
前記分割を行なった後、前記分割される領域ごとにアクセス権を規定するアクセス権定義情報に基づいて前記モジュールを含まない領域に対してアクセス権を設定する
ことを特徴とする請求項１１記載のメモリ保護方法。
【請求項１５】
前記領域定義処理工程では、
前記分割を行なった後、前記モジュールを含まない領域に配置される情報を規定する配置定義情報に基づいて該領域に情報を配置する
ことを特徴とする請求項１１記載のメモリ保護方法。
【請求項１６】
前記領域定義処理工程で分割された領域は、
オペレーティングシステムにおける実行体ごとにその状態が管理される
ことを特徴とする請求項１記載のメモリ保護方法。
【請求項１７】
プログラムによる不正アクセスからメモリを保護する情報処理装置であって、
前記メモリ上の単一アドレス空間を複数の領域に分割する領域定義処理手段と、
前記領域定義処理手段により分割された領域間に渡る前記プログラムの手続きの呼び出しに際して、該分割された領域を一時的に結合させる結合処理手段と、
前記結合処理手段により領域が結合された後、前記手続きを呼び出す処理手段と、
前記処理手段により呼び出された前記手続きの実行の終了後、前記結合された領域を該結合前の状態に戻す復帰処理手段と
を具備することを特徴とする情報処理装置。
【請求項１８】
プログラムによる不正アクセスからメモリを保護するコンピュータを、
前記メモリ上の単一アドレス空間を複数の領域に分割する領域定義処理手段、
前記領域定義処理手段により分割された領域間に渡る前記プログラムの手続きの呼び出しに際して、該分割された領域を一時的に結合させる結合処理手段、
前記結合処理手段により領域が結合された後、前記手続きを呼び出す処理手段、
前記処理手段により呼び出された前記手続きの実行の終了後、前記結合された領域を該結合前の状態に戻す復帰処理手段
として機能させるためのメモリ保護プログラム。
【請求項１９】
請求項１８記載のメモリ保護プログラムを記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムによる不正アクセスに対してメモリを保護するメモリ保護方法、情報処理装置、メモリ保護プログラム及びメモリ保護プログラムを記録した記録媒体に関する。
【背景技術】
【０００２】
一般に、組み込みシステムでは、プログラムが全てのメモリ領域に（直接）アクセスできる。そのため、オーバヘッドは小さく抑えられることになるがその反面、プログラムのバグによる不正なアクセスからメモリを保護することはできなかった。
【０００３】
このような不正アクセスが生じると、開発効率が低下してしまう。すなわち、複雑化したソフトウエアの実行シーケンスを全て網羅してテストするには、多くの手間と時間が必要となるためである。なお、不正アクセスは、ある特定の実行シーケンスにおいてのみ障害を生じてしまうことが多い。複雑なソフトウエアは、論理的に複数のモジュールから構成されることが多いため、全モジュールを統合するまで不正アクセスが障害につながらない場合がある。
【０００４】
システムに生じた障害の原因が不正アクセスである場合、原因となったアクセスの特定は困難となる。それは、不正アクセスが行なわれた時点で即座にシステムダウン等して表面化すればよいが、たいていの場合、障害が表面化しないことが多いためである。例えば、不正アクセスが行なわれてから障害が実際に発生するまでの間に多くの処理が実施された場合、どの処理において不正アクセスが行なわれたのかを特定するのは困難である。
【０００５】
一方、ワークステーションなどの非組み込みシステムでは、一般的に、不正アクセスからメモリを保護するため、プログラム毎に固有の仮想アドレス空間を用いている。この場合、仮想アドレス空間で動作するプログラムは、その空間に対応付けられていないメモリ領域にアクセスすることはできない。別プログラムの仮想アドレス空間の内容を利用する場合には、例えば、オペレーティングシステム（ＯＳ）が異なる仮想アドレス空間におけるプログラム間のメッセージ交換を仲介する。また、対応付けられているメモリ領域を仮想アドレス空間から変更することで、元来アクセスが許可されていなかったメモリ領域へのアクセスを許可する技術も知られている（特許文献１参照）。
【特許文献１】特開２００５−２０９１７８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、保護されたメモリ領域へのアクセスは、オーバヘッドが大きく、システムの実行速度を大きく低下させてしまう。ＯＳを介してメッセージを交換する場合、該当するメモリ領域へのアクセスを許可されたプログラムに実行のコンテキストをスイッチしなければならない。その上、メッセージ交換には、データのコピーが必要となるので、アクセスに要するオーバヘッドが大きい。
【０００７】
一方、仮想アドレス空間の一部に複数のメモリ領域を対応付けるようにした場合、例えば、仮想アドレスをインデックスするキャッシュを用いるシステムでは、メモリ領域への対応関係を変更する毎にキャッシュをフラッシュし、無効化する作業が必要となる。更に、仮想アドレスと物理アドレスとの対応関係をキャッシュしている場合には、そのキャッシュも無効化しなければならない。これらの操作は、アクセスに要するオーバヘッドを増加させる上、アクセス後の実行速度を低下させる。
【０００８】
そこで、本発明は、上記課題に鑑みてなされたものであり、メモリ上で分割された領域間の不正アクセスを抑制するとともに、当該領域間に渡る手続きの実行速度の低下を軽減させるようにした技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明の一態様は、プログラムによる不正アクセスからメモリを保護するメモリ保護方法であって、前記メモリ上の単一アドレス空間を複数の領域に分割する領域定義処理工程と、前記領域定義処理工程で分割された領域間に渡る前記プログラムの手続きの呼び出しに際して、該分割された領域を一時的に結合させる結合処理工程と、前記結合処理工程で領域が結合された後、前記手続きを呼び出す処理工程と、前記処理工程により呼び出された前記手続きの実行の終了後、前記結合された領域を該結合前の状態に戻す復帰処理工程とを含むことを特徴とする。
【００１０】
また、本発明の一態様は、プログラムによる不正アクセスからメモリを保護する情報処理装置であって、前記メモリ上の単一アドレス空間を複数の領域に分割する領域定義処理手段と、前記領域定義処理手段により分割された領域間に渡る前記プログラムの手続きの呼び出しに際して、該分割された領域を一時的に結合させる結合処理手段と、前記結合処理手段により領域が結合された後、前記手続きを呼び出す処理手段と、前記処理手段により呼び出された前記手続きの実行の終了後、前記結合された領域を該結合前の状態に戻す復帰処理手段とを具備することを特徴とする。
【００１１】
また、本発明の一態様によるメモリ保護プログラムは、プログラムによる不正アクセスからメモリを保護するコンピュータを、前記メモリ上の単一アドレス空間を複数の領域に分割する領域定義処理手段、前記領域定義処理手段により分割された領域間に渡る前記プログラムの手続きの呼び出しに際して、該分割された領域を一時的に結合させる結合処理手段、前記結合処理手段により領域が結合された後、前記手続きを呼び出す処理手段、前記処理手段により呼び出された前記手続きの実行の終了後、前記結合された領域を該結合前の状態に戻す復帰処理手段として機能させる。
【発明の効果】
【００１２】
本発明によれば、メモリ上で分割された領域間の不正アクセスを抑制するとともに、当該領域間に渡る手続きの実行速度の低下を軽減させることができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明に係わるメモリ保護方法、情報処理装置、メモリ保護プログラム及びメモリ保護プログラムを記録した記録媒体の一実施の形態について添付図面を参照して詳細に説明する。
【００１４】
（実施形態１）
図１は、実施形態１に係わる情報処理装置１０の構成の一例を示すブロック図である。
【００１５】
１０１は、情報処理装置１０全体を制御するＣＰＵ（Central Processing Unit）である。
【００１６】
１０２は、メモリである。例えば、変更を必要としないプログラムやパラメータを格納するＲＯＭ（Read Only Memory）や、外部装置などから供給されるプログラムやデータを一時記憶するＲＡＭ（Random Access Memory）から構成される。
【００１７】
１０４は、外部記憶装置であり、例えば、ハードディスクやメモリカードで構成される。なお、外部記憶装置１０４は、上記例示した以外にも、情報処理装置から着脱可能なフレキシブルディスク（ＦＤ）やＣＤ（Compact Disk）等の光ディスク、磁気や光カード、ＩＣカード等で実現されてもよい。
【００１８】
１０５は、入出力インターフェースであり、情報処理装置内にデータを入力したり、装置外にデータを出力したりする。入出力インターフェース１０５は、例えば、情報処理装置１０とユーザとの間を繋ぐユーザインターフェースや、外部（例えば、ネットワーク）へ接続するための通信インターフェース等で実現される。１０６は、上述した各ユニット間におけるデータの授受を可能にするシステムバスである。
【００１９】
ここで、メモリ１０２上には、各種プログラムやデータが展開される。１０７は、検証プログラムであり、不正アクセスを引き起こすバグを含む可能性のあるプログラムを示している。この場合、検証プログラム１０７は、３つのモジュール、具体的には、モジュールＭ１１、モジュールＭ１２、モジュールＭ１３から構成される。なお、本実施形態においては、検証プログラム１０７の実行は、モジュールＭ１１から開始されるものとする。また、本実施形態においては、検証プログラム１０７に必要な実行体は１つであるとする。すなわち、２つ以上のタスクやスレッドを必要とすることはない。メモリ上の異なる領域に配置されるモジュール間の手続き（以下、公開手続きと言う）呼出しは、保護管理プログラム１０８における保護領域一時結合機能付き手続き呼出し処理（以下、結合機能付き手続き呼び出し処理と略す）を呼び出すことで実現される。すなわち、検証プログラム１０７には、この処理を呼び出す手続きが記述されているものとする。
【００２０】
１０８は、保護管理プログラム（メモリ保護プログラム）であり、領域定義処理や結合機能付き手続き呼び出し処理を実現する手続きを含む。１０９は、所定の設定情報を規定する保護機能設定表であり、例えば、領域定義情報を含んで構成される。
【００２１】
１０３は、メモリ管理ユニットであり、例えば、メモリ１０２に対するアクセスの正当性を判断するメモリ管理装置として機能する。メモリ管理ユニット１０３は、例えば、ＭＭＵ（Memory Management Unit）、或いはＭＰＵ（Memory Protection Unit）からなる。なお、メモリ管理ユニット１０３は、ＣＰＵ１０１に内蔵されて構成されてもよい。メモリ管理ユニット１０３は、ＣＰＵ１０１の特権モードでのみ機能する。メモリ管理ユニット１０３は、例えば、検証プログラム１０７の実行において、アクセスの許可されていないメモリ上の領域に対してアクセスがなされると、そのアクセス処理を不正アクセスとして検出する。不正アクセスを検出した場合、メモリ管理ユニット１０３は、ＣＰＵ１０１に例外を生じさせる。このとき、メモリ管理ユニット１０３は、不正アクセスに関する情報を保持する。例えば、不正アクセスのあったアドレス、読み出し及び書き込みいずれのアクセスであったかを示す情報が保持される。例外発生時には、ＣＰＵ１０１は、これらの情報を読み出し、不正アクセスが行なわれた箇所を特定する。
【００２２】
次に、図２を用いて、図１に示すＣＰＵ１０１において実現される機能的な構成の一例について説明する。なお、ＣＰＵ１０１において実現される機能的な構成は主に、ＣＰＵ１０１がメモリ１０２に記憶（又は展開）された保護管理プログラム１０８を読み出し実行することで実現される。
【００２３】
ＣＰＵ１０１においては、領域定義処理部１１と、アクセス制御部１２と、が機能的な構成として実現される。
【００２４】
領域定義処理部１１は、メモリ１０２上に領域を確保する。この領域の確保は、保護機能設定表１０９の参照に基づき行なわれ、メモリ上の単一アドレス空間は、複数の領域に分割されて確保される。以下、この分割された領域各々を保護領域と言う場合もある。なお、領域定義処理部１１は、各保護領域に対してモジュールを配置したり、アドレス空間を割り当てたり、また、アクセス権を設定したり等する。
【００２５】
アクセス制御部１２は、分割された保護領域間に渡る処理の実行を制御する機能を有し、一時結合処理部１３と、実行処理部１４と、復帰処理部１５とを具備して構成される。一時結合処理部１３は、領域定義処理部１１により分割された領域を一時的に結合させる。この結合により、例えば、アクセス元領域とアクセス先領域とが一時的に結合されるため、この結合中に呼び出される保護領域間に渡る公開手続きは、両方の領域に直接アクセスできることになる。
【００２６】
実行処理部１４は、結合された領域間に渡って実行される公開手続きを呼び出し実行させる。復帰処理部１５は、公開手続きの終了後、一時結合処理部１３により結合された領域を結合前の状態に復帰させる。
【００２７】
次に、図１に示す情報処理装置１０における動作について説明する。ここでは、メモリ管理ユニット１０３は、ＣＰＵ１０１からメモリ１０２に対する全てのアクセスを許可するように初期化されているものとする。
【００２８】
ここで、ＣＰＵ１０１は、常に特権モードで動作する。これにより、メモリ管理ユニット１０３の設定にかかるオーバヘッドが小さくなる。なお、メモリ管理ユニット１０３の設定時にのみＣＰＵ１０１を特権モードで動作させることも勿論可能である。また、メモリ管理ユニット１０３へのアクセスが非特権モードで行なえるのであれば、常に非特権モードで動作させてもよい。
【００２９】
ＣＰＵ１０１は、検証プログラム１０７の実行前に、保護管理プログラム１０８に従って領域定義処理を実行する。この処理は、例えば、情報処理装置１０を初期化する段階で、保護管理プログラム１０８を呼び出すことで行なわれる。なお、検証プログラム１０７の実行が要求された後、領域定義処理を行なうようにしてもよい。すなわち、検証プログラム１０７によりメモリアクセス処理が行なわれる前の段階であれば、そのタイミングは特に問わない。
【００３０】
図３は、領域定義処理の一例を示すフローチャートである。この処理は、ＣＰＵ１０１がメモリ１０２に記憶（又は展開）された保護管理プログラム１０８を読み出し実行することで実現される。
【００３１】
ＣＰＵ１０１は、領域定義処理部１１において、まず、図４に示す保護機能設定表１０９を参照し、要求されたサイズに相当する領域をメモリ１０２上に確保する（ステップＳ１０１）。なお、確保する領域は、必要であればメモリマップされたレジスタを含んでいてもよい。保護機能設定表１０９には、図４に示すように、領域定義情報３０１として、保護領域のサイズと配置されるモジュールとが規定される。図４の場合、保護領域Ｒ１１、保護領域Ｒ１２、保護領域Ｒ１３が定義されており、各保護領域のサイズは、メモリ管理ユニット１０３により異なる領域として認識されうる最小単位で切り上げられている。ここで、例えば、物理アドレス０ｘ００００から０ｘ９ｆｆｆにより特定されるメモリ領域を使用できる場合を考えてみる。この場合、０ｘ００００から０ｘ１ｆｆｆを保護領域Ｒ１１、０ｘ２０００から０ｘ５ｆｆｆを保護領域Ｒ１２、０ｘ６０００から０ｘ９ｆｆｆを保護領域Ｒ１３に割り当てれば、要求されたサイズの領域をメモリ上に確保できる。
【００３２】
次に、ＣＰＵ１０１は、領域定義処理部１１において、ステップＳ１０１で確保した領域にモジュール及び保護管理プログラムを配置する（ステップＳ１０２）。図４に示す保護機能設定表１０９によれば、モジュールＭ１１は保護領域Ｒ１１、モジュールＭ１２は保護領域Ｒ１２、モジュールＭ１３は保護領域Ｒ１３に配置される。プログラム（各モジュール）の配置は、メモリに格納された内容を該当の領域にコピーすることで行なわれる。この場合、プログラムの実行によってプログラム自体が変更されても、プログラムを再度コピーすることで再び初期状態に戻すことができる。なお、ステップＳ１０１の処理において、各モジュールが格納されているメモリ領域を確保し、ステップＳ１０３以降の処理において、その領域を直接使用してもよい。ここで、本実施形態においては、保護領域間の手続き呼出しに必要となる保護管理プログラム１０８と、モジュールＭ１１とを同一の保護領域Ｒ１１に配置する。これは、検証プログラム１０７において、最初に実行されるモジュールＭ１１から保護管理プログラム１０８を呼び出せるようにするためである。なお、保護領域間の手続き呼出しに必要となる処理（プログラム）のみを分離し、それのみを保護領域Ｒ１に配置するようにしてもよい。また、モジュールを配置しない別の保護領域を用意し、そこに保護管理プログラム１０８を配置してもよい。この場合、保護管理プログラム１０８を配置した領域に対しては、保護領域間の手続き呼出しを必要とするモジュールからのアクセスを許可するようにすればよい。
【００３３】
次に、ＣＰＵ１０１は、領域定義処理部１１において、ステップＳ１０１で確保した領域にアドレス空間を割り当てる（ステップＳ１０３）。アドレス空間の割り当ては、メモリ管理ユニット１０３を設定することで行なわれる。ここで、割り当てるアドレス空間は、ＣＰＵ１０１により各種制御を行なう際に使用するアドレス空間である。なお、本実施形態においては、割り当てるアドレス空間と物理アドレス空間とを一致させる。このようにした場合、検証プログラム１０７に不具合が発見された場合、ＣＰＵ１０１が使用するアドレスを直接用いることができるのでデバッグが容易になる。また、メモリ管理ユニット１０３としてアドレス変換機能がないＭＰＵを使用することも可能になる。仮想アドレス空間を定義した場合、保護領域に配置されるモジュールを連続した物理アドレス空間に配置できなくても、仮想アドレス空間上では連続した保護領域として扱うことができる。なお、物理アドレス空間と仮想アドレス空間とを異なる空間として定義することも勿論可能である。
【００３４】
最後に、ＣＰＵ１０１は、領域定義処理部１１において、保護領域に対してアクセス権を設定する（ステップＳ１０４）。アクセス権の設定は、検証プログラム１０７の開始時に最初に実行されるモジュールが配置される領域（この場合、モジュールＭ１１）に対して行なわれる。なお、アクセス権の設定は、メモリ管理ユニット１０３に設定することで実現される。すなわち、ＣＰＵ１０１は、（モジュールＭ１１の配置された）保護領域Ｒ１１に割り当てたアドレス範囲０ｘ００００から０ｘ１ｆｆｆに対して読み出し及び書き込みのアクセスを許可するようにメモリ管理ユニット１０３を設定する。このような設定がなされると、メモリ管理ユニット１０３は、ＣＰＵ１０１により提供されるアドレスに基づいて検証プログラム１０７によるアクセスの正当性を判断する。これにより、上記以外の範囲のアドレスに対するアクセスは、メモリ管理ユニット１０３が不正アクセスとして検出することができる。
【００３５】
以上により領域定義処理は終了する。なお、領域定義処理の終了後、例えば、動的メモリ割り当てにより保護領域のサイズを増加させる必要性が生じた場合には、メモリ管理ユニット１０３の設定を変更することで保護領域を再定義できることは言うまでもない。
【００３６】
図５は、結合機能付き手続き呼び出し処理の一例を示すフローチャートである。この処理は、ＣＰＵ１０１がメモリ１０２に記憶（又は展開）された保護管理プログラム１０８を読み出し実行することで実現される。結合機能付き手続き呼び出し処理は、上述した図３に示す領域定義処理の後、実施される。結合機能付き手続き呼び出し処理は、例えば、検証プログラム１０７が実行され、保護管理プログラム１０８（具体的には、結合機能付き手続き呼び出し処理）を実施する手続きが呼び出されることで開始される。
【００３７】
ＣＰＵ１０１は、まず、一時結合処理部１３において、対象となる複数の保護領域を一時的に結合する（ステップＳ２０１）。すなわち、モジュールＭ１１（実行の起点となるモジュール）及び保護管理プログラム１０８が配置された保護領域と、公開手続きを含むモジュールが配置された保護領域とを一時的に結合する。具体的には、メモリ管理ユニット１０３の設定を変更し、公開手続きを含むモジュールが配置された保護領域に対して、保護管理プログラム１０８等が配置された保護領域に設定されたアクセス権と同じアクセス権を設定する。これにより、両保護領域が結合され、モジュールＭ１１及び保護管理プログラム１０８は、公開手続きを含むモジュールが配置された保護領域へのアクセスが許可されることになる。
【００３８】
領域の結合がなされると、ＣＰＵ１０１は、実行処理部１４において、公開手続きを呼び出す（ステップＳ２０２）。この公開手続きに伴う処理の終了後、ＣＰＵ１０１は、復帰処理部１５において、ステップＳ２０１で結合した領域を再度分離し、結合前の状態に戻す（ステップＳ２０３）。なお、この処理は、上述したステップＳ２０１同様に、メモリ管理ユニット１０３の設定を変更することで行なわれる。これにより、公開手続きのアクセス先となる保護領域へのアクセスは、再度、禁止されることになる。
【００３９】
図６は、メモリ上に確保された複数の保護領域とそのアクセスとの関係を模式的に表した概念図である。
【００４０】
保護領域は、結合機能付き手続き呼び出し処理の実行前の段階では図６（ａ）に示す状態にある。この図６（ａ）に示す状態時には、保護領域Ｒ１１に配置されたモジュールＭ１１から同一の保護領域内に格納された保護管理プログラム１０８へのアクセス５０１は許可される。しかし、モジュールＭ１１からの、保護領域Ｒ１２に配置されたモジュールＭ１２に対するアクセス５０２や、保護領域Ｒ１３に配置されたモジュールＭ１３に対するアクセス５０３は禁止される。すなわち、アクセス５０２及びアクセス５０３は、不正アクセスとされる。
【００４１】
一方、結合機能付き手続き呼び出し処理が実行されている間、保護領域は、図６（ｂ）に示す状態になる。この図６（ｂ）に示す状態時には、ＣＰＵ１０１が保護管理プログラム１０８に従って、保護領域Ｒ１１と保護領域Ｒ１２とを結合している。この状態で行なわれる公開手続きの呼出しは、アクセス５０５に該当する。保護領域Ｒ１１及び保護領域Ｒ１２に配置されたモジュール間でのアクセスが可能になる。従って、アクセス５０６は正当なアクセスとなる、なお、モジュール１２からの結合されていない保護領域Ｒ１３に対するアクセス５０７は不正アクセスとなる。公開手続きの終了後、ＣＰＵ１０１が保護管理プログラム１０８に従って領域分離処理を実施すると、保護領域Ｒ１１と保護領域Ｒ１２とが再度分離される。これにより、保護領域は、図６（ａ）に示す状態に復帰する。
【００４２】
以上説明したように実施形態１によれば、メモリ上で分割された領域間の不正アクセスを抑制するとともに、当該領域間に渡る手続きの実行速度の低下を軽減させることができる。また、保護領域に関する定義情報を保護機能設定表１０９として検証プログラム１０７と分離しておくことにより、実際の保護領域のサイズや配置するメモリ領域を柔軟に設定することができる。
【００４３】
（実施形態２）
次に、実施形態２について説明する。実施形態１においては、保護管理プログラム１０８の結合機能付き手続き呼び出し処理を呼び出す手続きが検証プログラム１０７に記述されている場合について説明した。これに対して、実施形態２においては、このような記述がなされていないプログラムを対象にして上述した処理を実施する場合について説明する。例えば、検証過程を終えたプログラム等がこのようなプログラムに該当する。
【００４４】
図７は、実施形態２に係わる情報処理装置１０の構成の一例を示すブロック図である。なお、実施形態１を説明した図１と同様の機能を果たす構成には、同じ符号を付してある。ここでは、実施形態１を説明した図１と相違する点について説明する。相違点としては、まず、プログラム１１０は、保護管理プログラム１０８の結合機能付き手続き呼び出し処理を呼び出す手続きが記述されてはいない。また、プログラム１１０を構成するモジュールは、モジュールＭ２１、モジュールＭ２２、モジュールＭ２３となる。また、保護管理プログラム１０８は、手続き呼出し変換処理を実施する手続きを含む。
【００４５】
次に、図８を用いて、実施形態２に係わるＣＰＵ１０１において実現される機能的な構成の一例について説明する。なお、ＣＰＵ１０１において実現される機能的な構成は主に、ＣＰＵ１０１がメモリ１０２に記憶（又は展開）された保護管理プログラム１０８を読み出し実行することで実現される。
【００４６】
ＣＰＵ１０１においては、実施形態１の構成に加えて、変換処理部１６、が新たな機能的な構成として実現される。なお、実施形態１を説明した図２と同様の機能を果たす構成には、同じ符号を付してある。
【００４７】
変換処理部１６は、プログラム１１０の処理内容を変換する。具体的には、プログラム１１０の中から公開手続きとして定義されている手続きを検出し、それら手続きを、保護管理プログラム１０８の結合機能付き手続き呼び出し処理を呼び出すように変換する。
【００４８】
次に、実施形態２に係わる情報処理装置１０における動作について説明する。ここでは、実施形態１を説明した情報処理装置１０と相違する動作について説明する。相違点としては、上述した領域定義処理の前に手続き呼び出し変換処理を実施する点にある。
【００４９】
図９は、手続き呼出し変換処理の一例を示すフローチャートである。手続き呼出し変換処理は、領域定義処理が実施される前の段階で実施される。
【００５０】
ＣＰＵ１０１は、変換処理部１６において、まず、保護機能設定表１０９に基づいて、プログラム１１０における保護領域間の手続き呼出しを検出する（ステップＳ３０１）。実施形態２に係わる保護機能設定表１０９には、図１０に示すように、領域定義情報８０１として、保護領域のサイズと配置されるモジュールとが定義される。この場合、異なるモジュールへの手続き呼出しは、全て保護領域間の手続き呼出しとなる。
【００５１】
次に、ＣＰＵ１０１は、保護機能設定表１０９を参照し、検出した保護領域間の手続き呼出しのうち、公開手続きとして定義されている手続きを選択する（ステップＳ３０２）。ここで、実施形態２に係わる保護機能設定表１０９は、上述した領域定義情報の他、図１１に示す公開手続き定義情報９０１を含んで構成される。公開手続き定義情報９０１には、各モジュールにおいて外部モジュールからのアクセスが許可された公開手続きの名前の一覧が保持される。例えば、ステップＳ３０１で手続きＦ１が検出されれば、この手続きＦ１は、ステップＳ３０２において変換対象となる手続きとして選択される。一方、ステップＳ３０１で手続きＦ５が検出されていたとしても、手続きＦ５は公開手続き定義情報９０１に含まれていないので、ステップＳ３０２においては選択されない。すなわち、プログラム１１０を実行すると、手続きＦ５に対する呼出しは不正アクセスになる。このように、手続き呼出し変換処理では、プログラム１１０を実行しなくても不正なアクセスの一部を検出できるという利点がある。
【００５２】
次に、ＣＰＵ１０１は、ステップＳ３０２で選択した保護領域間の公開手続きの呼出しを、結合機能付き手続き呼び出し処理を実施する手続きに変換する（ステップＳ３０３）。手続き呼出しの変換は、プログラム１１０のソースコード内の公開手続きを呼び出している箇所において行なわれる。例えば、当該箇所において、手続き呼出しが参照する手続き名を保護管理プログラム１０８に含まれる結合機能付き手続き呼び出し処理を実現する手続きの参照名に置換する。また、プログラム１１０の実行前にコンパイル工程とリンク工程とが必要である場合、リンク工程の前にコンパイル工程で生成したオブジェクトコード内の外部参照手続き名（シンボル名）を、結合機能付き手続き呼び出し処理を実現する手続きの参照名に置換する。このようにしても手続き呼出しの変換は実現される。以上により、手続き呼出し変換処理は終了する。
【００５３】
なお、上述した図９の処理では、全ての手続きをプログラムの実行前に一括して変換する場合について説明したが、プログラムの実行中に必要となった箇所の変換を随時変換するようにしてもよい。
【００５４】
また、保護管理プログラム１０８に含まれる結合機能付き手続き呼び出し処理を実現する手続きは、公開手続き定義情報９０１を用いて生成することもできる。結合機能付き手続き呼び出し処理における手続き呼出しは全て同じ構造になっている。すなわち、領域の結合処理を実現する手続きと、それを元に戻す分離処理を実現する手続きとの間で、公開手続きを呼び出す構造になっている。上述したように、このうち保護領域の結合処理は、ステップＳ２０１により実現され、保護領域の分離処理は、ステップＳ２０３により実現される。そこで、この構造をもつ手続きを一つだけテンプレートとして用意し、そのテンプレートにおいて呼び出される公開手続きを、公開手続き定義情報９０１に定義された公開手続きに変更する。これを公開手続き毎に生成することで、結合機能付き手続き呼出し処理を生成できる。
【００５５】
なお、手続き呼出し変換処理と結合機能付き手続き呼出し生成処理とは、図７に示す情報処理装置とは別の情報処理装置で実行してもよい。この場合、手続き呼出し変換処理及び結合機能付き手続き呼出し生成処理を実行する情報処理装置は、メモリ管理装置を有する必要はない。
【００５６】
以上が、手続き呼出し変換処理の流れについての説明である。なお、実施形態２に係わる領域定義処理、結合機能付き手続き呼び出し処理は、実施形態１を説明した図３及び図５と同様となるため、その説明については省略する。
【００５７】
以上説明したように実施形態２によれば、プログラムが後方互換性を有する。すなわち、本実施形態に係わる処理の適用にあたって、新たにプログラムの記述を変更する必要がない。また、プログラムの変更を伴わずに、保護領域に配置するモジュールを変更できるため、実施形態１の構成よりも更に柔軟性が高くなる
（実施形態３）
次に、実施形態３について説明する。実施形態１、実施形態２においては、検証対象となるプログラムに必要な実行体が１つである場合について説明したが、実施形態３においては、２つ以上の実行体によりプログラムを実行する検証プログラムについて説明する。
【００５８】
ここで、メモリ管理ユニット１０３において、アクセス権の設定を実行体毎に保持し、更に各アクセスがどの実行体によるものであるかを判断することができれば、実施形態２と同じ形態で実現できる。しかし、一般的には、メモリ管理装置の設定を動的にソフトウェアにより変更することが必要である。そこで、実施形態３では、オペレーティングシステム（ＯＳ）によるマルチタスキングを利用して実行体毎のアクセスを管理する。
【００５９】
図１２は、実施形態３に係わる情報処理装置１０の構成の一例を示すブロック図である。なお、実施形態１を説明した図１、実施形態２を説明した図７と同様の機能を果たす構成には、同じ符号を付してある。
【００６０】
メモリ１０２上のプログラム１１１は、モジュールＭ３１、モジュールＭ３２、モジュールＭ３３から構成され、各モジュールは、一つずつの実行体を必要とする。実行体は、ＯＳ１１２により提供される。このうち、タスクＴ１は、モジュールＭ３１の実行に割り当てられ、タスクＴ２は、モジュールＭ３２の実行に割り当てられ、タスクＴ３はモジュールＭ３３の実行に割り当てられる。また、メモリ１０２上には、タスク毎に保護領域の結合状態を保持するアクセス権保持表１１３が格納されている。
【００６１】
以上が、情報処理装置１０の構成についての説明である。なお、実施形態３に係わるＣＰＵ１０１において実現される機能的な構成は、実施形態２を説明した図８と同様となるため、その説明については省略する。
【００６２】
次に、実施形態３に係わる情報処理装置１０における動作について説明する。ここでは、実施形態２を説明した情報処理装置１０と相違する動作についてのみ説明する。相違点としては、領域定義処理にある。
【００６３】
図１３は、領域定義処理の一例を示すフローチャートである。この処理は、ＣＰＵ１０１がメモリ１０２に記憶（又は展開）された保護管理プログラム１０８を読み出し実行することで実現される。なお、ここでは、実施形態１における図３と相違する処理についてのみ説明する。相違点としては、ステップＳ４０２の処理にある。それ以外の処理は、ステップＳ４０１は、図３に示すステップＳ１０１と、ステップＳ４０３は、図３に示すステップＳ１０３と、ステップＳ４０４は、図３に示すステップＳ１０４と同様となる。
【００６４】
ステップＳ４０２において、ＣＰＵ１０１は、領域定義処理部１１において、ステップＳ４０１で確保した領域に、モジュール、保護管理プログラム、ＯＳ、アクセス権保持表を配置する。すなわち、ステップＳ１０２の処理に加えて、ＯＳとアクセス権保持表を保護領域に配置することになる。
【００６５】
以上が、領域定義処理の流れについての説明である。なお、実施形態３に係わる手続き呼出し変換処理は、実施形態２を説明した図９と同様となるため、その説明については省略する。
【００６６】
次に、図１４〜図１６を用いて、実施形態３に係わる保護機能設定表１０９の一例について説明する。
【００６７】
図１４には、領域定義情報１２０１の一例が示される。モジュールが配置されない保護領域（この場合、Ｒ３３、Ｒ３４）に対しては、保護機能設定表１０９に含まれる配置定義情報を用いて、保護管理プログラム１０８、ＯＳ１１２、アクセス権保持表１１３を配置する領域を決定する。図１５には、配置定義情報１３０１の一例が示される。図１５に示す配置定義情報１３０１によれば、保護領域Ｒ３３には、保護管理プログラム１０８とアクセス権保持表１１３とが配置され、保護領域Ｒ３４には、ＯＳ１１２が配置される。
【００６８】
保護領域Ｒ３３と保護領域Ｒ３４とに対するアクセス権は、保護機能設定表１０９に含まれるアクセス権定義情報１４０１に基づいて設定する。図１６には、アクセス権定義情報１４０１の一例が示される。図１６に示すアクセス権定義情報１４０１におけるチェック記号は、アクセスが許可されていることを示す。例えば、保護領域Ｒ３３に対するアクセスは、全ての保護領域から許可されていることを示している。
【００６９】
保護領域Ｒ３３のように全ての領域からのアクセスが許可される領域に対しては、不正アクセスは検出できない。但し、保護領域Ｒ３３に対するアクセスは高速に行なえる。また、保護領域Ｒ３３をＲＯＭ上に確保すれば、不正アクセスによって内容が書き換えられる危険性はなくなる。
【００７０】
図１７は、実施形態３に係わる結合機能付き手続き呼び出し処理の一例を示すフローチャートである。この処理は、ＣＰＵ１０１がメモリ１０２に記憶（又は展開）された保護管理プログラム１０８を読み出し実行することで実現される。結合機能付き手続き呼び出し処理は、上述した図１３に示す領域定義処理の後、実施される。結合機能付き手続き呼び出し処理は、例えば、プログラム１１１が実行され、保護管理プログラム１０８（結合機能付き手続き呼び出し処理）を実施する手続きが呼び出されることで開始される。なお、ここでは、実施形態１における図５と相違する処理についてのみ説明する。相違点としては、ステップＳ５０２及びステップＳ５０４の処理にある。それ以外の処理は、ステップＳ５０１は、図５に示すステップＳ２０１、ステップＳ５０３は、図５に示すステップＳ２０２、ステップＳ５０５は、図５に示すステップＳ２０３と同様となる。
【００７１】
ステップＳ５０２において、ＣＰＵ１０１は、ステップＳ５０１の結果に基づいてアクセス権保持表１１３を更新する（ステップＳ５０２）。その後、ＣＰＵ１０１は、公開手続きを呼び出す（ステップＳ５０３）。そして、それに伴う処理が終了すると、ＣＰＵ１０１は、ステップＳ５０１で結合した領域を再度分離し、結合前の状態に戻す（ステップＳ５０４）。その後、ＣＰＵ１０１は、このステップＳ５０４の結果に基づいてアクセス権保持表１１３を再度更新する（ステップＳ５０５）。なお、ステップＳ５０１の処理の開始後、ステップＳ５０２の処理が終了するまでの間、コンテキストスイッチが禁止される。同様にステップＳ５０４の処理の開始後、ステップＳ５０５の処理が終了までの間もコンテキストスイッチが禁止される。コンテキストスイッチの禁止は、ＯＳの機能を利用すればよい。
【００７２】
図１８は、タスク毎に保護領域の結合状態を保持するアクセス権保持表１１３を示す。アクセス権保持表１１３におけるチェック記号はアクセスが許可されていることを示す。なお、ここでは、タスクＴ２が保護領域Ｒ３１に対する結合機能付き手続き呼出し処理を実行した場合のアクセス権保持表１１３の変更の態様について説明する。
【００７３】
図１８（ａ）に示すアクセス権保持表１１３は、結合機能付き手続き呼出し処理実行前の状態である。図１７に示すステップＳ５０１において、タスクＴ２から保護領域Ｒ３１へのアクセスが許可されると、アクセス権保持表１１３は、ステップＳ５０２において、図１８（ａ）から図１８（ｂ）に示す状態に変更される。その後、ステップＳ５０４において、タスクＴ２から保護領域Ｒ３１へのアクセスが禁止されると、アクセス権保持表１１３は、ステップＳ５０５において、図１８（ｂ）から図１８（ａ）に示す状態に変更される。
【００７４】
次に、ステップＳ５０３において、公開手続きが呼び出され、その実行中にＯＳ１１２によりコンテキストスイッチが行なわれ、タスクＴ２からタスクＴ３に実行が移る場合の動作について説明する。
【００７５】
ここで、例えば、コンテキストスイッチが行なわれる前の段階において、アクセス権保持表１１３は、図１８（ｂ）に示す状態にあるとする。図１８（ｂ）によれば、タスクＴ１による保護領域Ｒ３１に対するアクセスと、コンテキストスイッチ後実行されるタスクＴ２による保護領域Ｒ３１に対するアクセスとは許可されている。ここで、コンテキストスイッチにおいてメモリ管理ユニット１０３の設定を変更しなければ、スイッチ後のタスクＴ２は、結合機能付き手続き呼出し処理を実行しなくても、保護領域Ｒ３１に対してアクセスできてしまう。したがって、タスクＴ２の実行するモジュールに不正アクセスを生じるバグがあっても、それを検出できなくなってしまう。
【００７６】
そこで、ＯＳ１１２は、コンテキストスイッチにおいて、アクセス権保持表１１３に基づいてメモリ管理ユニット１０３の設定を変更し、保護領域Ｒ３１へのアクセスを禁止する。これにより、スイッチ後、保護領域Ｒ３１へ結合機能付き手続き呼出し処理を実施せずに、タスクＴ２が保護領域Ｒ３１にアクセスした場合、そのアクセスは不正アクセスとして検出される。以上のようにすることで、タスクＴ２が実行するモジュールに不正アクセスが生じてしまうバグがあったとしても、それを検出できる。
【００７７】
以上説明したように実施形態３によれば、実行体を複数必要とするプログラムを実行する情報処理装置においても、実施形態１及２と同様の処理を行なえる。また、モジュールが配置されない保護領域を利用することで、ＯＳが格納されたメモリ領域をも保護することができる。なお、モジュールが配置されていない保護領域には、ＯＳ以外のプログラムやデータ、例えば、共通ライブラリを配置し、保護することができることは言うまでもない。
【００７８】
なお、本発明は、上記及び図面に示す実施形態に限定することなく、その要旨を変更しない範囲内で適宜変形して実施できる。
【００７９】
例えば、本発明は、例えば、システム、装置、方法、プログラム若しくは記憶媒体等としての実施態様をとることもできる。具体的には、複数の機器から構成されるシステムに適用してもよいし、また、一つの機器からなる装置に適用してもよい。
【００８０】
また、本発明は、ソフトウェアのプログラムをシステム或いは装置に直接或いは遠隔から供給し、そのシステム或いは装置に内蔵されたコンピュータがそのプログラムコードを読み出して実行することにより前述した実施形態の機能が達成される場合を含む。この場合、供給されるプログラムは実施形態で図に示したフローチャートに対応したコンピュータプログラムである。
【００８１】
したがって、本発明の機能処理をコンピュータで実現するために、当該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳ（Operating System）に供給するスクリプトデータ等の形態であってもよい。
【００８２】
コンピュータプログラムを供給するためのコンピュータ読み取り可能な記憶媒体としては以下が挙げられる。例えば、フロッピー（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−Ｒ）などである。
【００８３】
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続し、該ホームページから本発明のコンピュータプログラムをハードディスク等の記録媒体にダウンロードすることが挙げられる。この場合、ダウンロードされるプログラムは、圧縮され自動インストール機能を含むファイルであってもよい。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるＷＷＷサーバも、本発明に含まれるものである。
【００８４】
また、本発明のプログラムを暗号化してＣＤ−ＲＯＭ等の記憶媒体に格納してユーザに配布するという形態をとることもできる。この場合、所定の条件をクリアしたユーザに、インターネットを介してホームページから暗号を解く鍵情報をダウンロードさせ、その鍵情報を使用して暗号化されたプログラムを実行し、プログラムをコンピュータにインストールさせるようにもできる。
【００８５】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される他、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどとの協働で実施形態の機能が実現されてもよい。この場合、ＯＳなどが、実際の処理の一部又は全部を行ない、その処理によって前述した実施形態の機能が実現される。
【００８６】
更に、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれて前述の実施形態の機能の一部或いは全てが実現されてもよい。この場合、機能拡張ボードや機能拡張ユニットにプログラムが書き込まれた後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部又は全部を行なう。
【図面の簡単な説明】
【００８７】
【図１】実施形態１に係わる情報処理装置１０の構成の一例を示すブロック図である。
【図２】図１に示すＣＰＵ１０１において実現される機能的な構成の一例を示すブロック図である。
【図３】図１に示す情報処理装置１０における動作の一例を示す第１のフローチャートである。
【図４】図１に示す保護機能設定表１０９の一例を示す図である。
【図５】図１に示す情報処理装置１０における動作の一例を示す第２のフローチャートである。
【図６】メモリ上に確保された複数の保護領域とそのアクセスとの関係を模式的に表した概念図である。
【図７】実施形態２に係わる情報処理装置１０の構成の一例を示すブロック図である。
【図８】図７に示すＣＰＵ１０１において実現される機能的な構成の一例を示すブロック図である。
【図９】図７に示す情報処理装置１０における動作の一例を示すフローチャートである。
【図１０】図７に示す保護機能設定表１０９の一例を示す第１の図である。
【図１１】図７に示す保護機能設定表１０９の一例を示す第２の図である。
【図１２】実施形態３に係わる情報処理装置１０の構成の一例を示すブロック図である。
【図１３】図１２に示す情報処理装置１０における動作の一例を示す第１のフローチャートである。
【図１４】図１２に示す保護機能設定表１０９の一例を示す第１の図である。
【図１５】図１２に示す保護機能設定表１０９の一例を示す第２の図である。
【図１６】図１２に示す保護機能設定表１０９の一例を示す第３の図である。
【図１７】図１２に示す情報処理装置１０における動作の一例を示す第２のフローチャートである。
【図１８】図１２に示す保護機能設定表１０９に含まれるアクセス権保持表１１３の一例を示す図である。
【符号の説明】
【００８８】
１０    情報処理装置
１１    領域定義処理部
１２    アクセス制御部
１３    一時結合処理部
１４    実行処理部
１５    復帰処理部
１６    変換処理部
１０１    ＣＰＵ
１０２    メモリ
１０３    メモリ管理ユニット
１０５    入出力インターフェース
１０６    システムバス
１０７    検証プログラム
１０８    保護管理プログラム
１０９    保護機能設定表
１１０、１１１    プログラム
１１２    ＯＳ
１１３    アクセス権保持表
【図１】
2010086410.tif 000003
【図２】
2010086410.tif 000004
【図３】
2010086410.tif 000005
【図４】
2010086410.tif 000006
【図５】
2010086410.tif 000007
【図６】
2010086410.tif 000008
【図７】
2010086410.tif 000009
【図８】
2010086410.tif 000010
【図９】
2010086410.tif 000011
【図１０】
2010086410.tif 000012
【図１１】
2010086410.tif 000013
【図１２】
2010086410.tif 000014
【図１３】
2010086410.tif 000015
【図１４】
2010086410.tif 000016
【図１５】
2010086410.tif 000017
【図１６】
2010086410.tif 000018
【図１７】
2010086410.tif 000019
【図１８】
2010086410.tif 000020