(57)【要約】【課題】確実に実行しなければならない、手続（プログラムコード）を含むプログラムを実行する場合、プログラムを安全に動作させることができるプログラム実行装置を提供する。【解決手段】記憶領域に保存された、手続きを含むプログラムを実行するプログラム実行装置１００は、手続きのうち、所定の手続きをユーザ空間プログラムにおける飛び越し防止領域に設定し、飛び越し防止領域へ分岐できるアドレスを設定する領域設定手段１０１と、領域設定手段１０１によって設定された分岐可能アドレスに基づいて、飛び越し防止領域への分岐が許可されているか否か判定する分岐判定手段１０２と、飛び越し防止領域内の命令を実行する領域内実行手段１０４とを備える。【選択図】図１
2006243833.tif 000002
【特許請求の範囲】
【請求項１】
記憶領域に保存された、手続きを含むプログラムを実行するプログラム実行装置であって、
ユーザ空間で実行されるプログラム内に存在する、前記手続きのうち、所定の手続きを飛び越し防止領域に設定する領域設定手段と、
前記飛び越し防止領域に分岐できる分岐可能アドレスに基づいて、前記飛び越し防止領域への分岐が許可されているか否か判定する分岐判定手段と、
前記飛び越し防止領域内の命令を実行する領域内実行手段と
を備えることを特徴とするプログラム実行装置。
【請求項２】
前記飛び越し防止領域に設定された前記手続の入口アドレスを、前記飛び越し防止領域の外から分岐可能な前記分岐可能アドレスとして設定する分岐先設定手段を更に備えることを特徴とする請求項１に記載のプログラム実行装置。
【請求項３】
前記分岐判定手段は、分岐先アドレスの命令に基づいて、前記飛び越し防止領域への分岐が許可されているか否か判定することを特徴とする請求項１又は２に記載のプログラム実行装置。
【請求項４】
前記分岐判定手段は、前記飛び越し防止領域への分岐が許可されていないと判定された場合に、投機的実行が行われている前記飛び越し防止領域内の命令をすべて無効にすることを特徴とする請求項１〜３のいずれか１項に記載のプログラム実行装置。
【請求項５】
実行可能と実行不可とが制御可能な特殊命令を実行不可に設定する実行不可設定手段と、
前記分岐判定手段によって分岐が許可されていると判定された場合に、前記特殊命令を実行可能に設定する実行可能設定手段と
を更に備えることを特徴とする請求項３に記載のプログラム実行装置。
【請求項６】
前記実行不可設定手段は、前記手続き内の前記特殊命令を実行し終えるときに、実行不可に設定することを特徴とする請求項５に記載のプログラム実行装置。
【請求項７】
前記分岐判定手段は、分岐が許可されていないと判定した場合、投機的実行が行われている前記特殊命令をすべて無効にすることを特徴とする請求項５又は６に記載のプログラム実行装置。
【請求項８】
前記分岐判定手段によって、前記飛び越し防止領域の外から前記分岐可能アドレスへ分岐していると判定された場合に、分岐可能アドレスへ分岐したことを分岐情報に設定する分岐状況設定手段と、
前記分岐情報に基づいて、前記飛び越し防止領域内の分岐可能アドレスへ分岐したか否かを判定する分岐状況判定手段とを更に備え、
前記領域内実行手段は、前記分岐状況判定手段によって、前記飛び越し防止領域内の分岐可能アドレスへ分岐したと判定された場合に、前記飛び越し防止領域内の命令を実行することを特徴とする請求項１〜７のいずれか１項に記載のプログラム実行装置。
【請求項９】
記憶領域に保存された、手続きを含むプログラムを実行するプログラム実行方法であって、
ユーザ空間で実行されるプログラム内に存在する、前記手続きのうち、所定の手続きを飛び越し防止領域に設定するステップと、
前記飛び越し防止領域へ分岐できるアドレスに基づいて、前記飛び越し防止領域への分岐が許可されているか否か判定するステップと、
前記飛び越し防止領域内の命令を実行するステップと
を含むことを特徴とするプログラム実行方法。
【請求項１０】
前記判定するステップは、分岐先アドレスの命令に基づいて、前記飛び越し防止領域への分岐が許可されているか否か判定することを特徴とする請求項９に記載のプログラム実行方法。
【請求項１１】
実行可能と実行不可とが制御可能な特殊命令を実行不可に設定するステップと、
前記分岐するステップによって分岐が許可されていると判定された場合に、前記特殊命令を実行可能に設定するステップと
を更に含むことを特徴とする請求項９又は１０に記載のプログラム実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ライブラリ等の形で提供されたプログラムコードを含むプログラムを実行するプログラム実行装置及びプログラム実行方法に関する。
【背景技術】
【０００２】
ユーザがプログラムを作成するとき、既存のプログラムコードを利用せずに、すべての処理を自分で記述することは事実上困難である。既存のプログラムコードの例としては、オペレーティングシステム（ＯＳ）が提供するシステムコールや、ウインドウシステムやセキュリティの機能を提供するライブラリなどがある。これらのコードは、製品として提供される場合もあれば、個人や各種団体によって無償で提供される場合もある。ユーザはこれらのコードをサブルーチンとして呼び出す処理をプログラムに記述することで機能を実現することができる。これにより、プログラムを作成する負担を軽減することができる。
【０００３】
前者のシステムコールは、カーネルによって実行される。カーネルのコード全体はＣＰＵによって保護されているため、ユーザは直接カーネルのコードを呼び出すことはできない（例えば、非特許文献１参照。）。その代わりに、カーネルのコードを実行するために特別な命令をＣＰＵに与える。ＣＰＵは、この特別な命令によってカーネル全体に対する保護を解除して、ユーザ空間内のコードからカーネル内のコードを実行するように切り替える。尚、この切り替え処理には多大なオーバヘッドが生じることが知られている。
【０００４】
一方、後者のライブラリは、ユーザが記述したコードに付随する形で実行される。ユーザが記述したコードとライブラリのコードは対等な関係にある。したがって、ライブラリのコードはユーザコードから直接呼び出される形で実行される。このため、ライブラリの実行においてはシステムコールの場合とは異なり、プログラムを切り替えるためのオーバヘッドは生じない。
【０００５】
一方、このことは、ユーザコードからライブラリ内の任意の場所に存在する命令に分岐可能であることを意味する。よって、サブルーチンの途中から実行を開始することもできてしまう。
【非特許文献１】Marshall Kirk McKusick, Keith Bostic, Michael J.Karels, John S.Quarterman, "The Design and Implementation of the 4.4BSD Operating System," Addison-Wesley, 1996.
【発明の開示】
【発明が解決しようとする課題】
【０００６】
従来、ライブラリは、ユーザに対する負担の軽減や、移植性の向上などを目的として提供されることが多かった。ところが、最近のセキュリティ事情を反映して、安全性を保つ処理を行うコードを含むことも多くなっている。
【０００７】
しかしながら、前述の理由から、悪意のあるコードが安全性を保つための処理を記述したコードを飛び越す形でライブラリ中のサブルーチンに処理を移すことにより、システムの安全性を脅かすようなプログラムが動作する可能性がある。このように、ライブラリ内に、確実に実行してほしいコードを含めたとしても、その部分を飛び越して実行されることで、安全にプログラムが実行されないという問題がある。
【０００８】
本発明は、上記の問題に鑑み、確実に実行しなければならない、手続（プログラムコード）を含むプログラムを実行する場合、プログラムを安全に動作させることができるプログラム実行装置及びプログラム実行方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明の第１の特徴は、記憶領域に保存された、手続きを含むプログラムを実行するプログラム実行装置であって、（ａ）ユーザ空間で実行されるプログラム内に存在する、手続きのうち、所定の手続きを，分岐できるアドレスがある飛び越し防止領域に設定する領域設定手段と、（ｂ）領域設定手段によって設定された分岐可能アドレスに基づいて、飛び越し防止領域への分岐が許可されているか否か判定する分岐判定手段と、（ｃ）飛び越し防止領域内の命令を実行する領域内実行手段とを備えるプログラム実行装置であることを要旨とする。ここで、「手続」とは、ウインドウシステムやセキュリティの機能など、組み込み済みのライブラリ,またはユーザが新規に作成したライブラリやサブルーチンなどのプログラムコードをいう。
【００１０】
第１の特徴に係るプログラム実行装置によると、例えば、ライブラリを用いて動作するプログラムに対して、ライブラリ作成者の意図どおりに正しく手続きを実行させる場合に、ライブラリ全体を飛び越し防止領域に設定する。この飛び越し防止領域には、飛び越し防止領域外から飛び越し防止領域内に分岐することができる分岐可能アドレスがある。したがって、飛び越し防止領域に設定するときには、手続きの入口アドレスが分岐可能アドレスになるように設定する。
【００１１】
このようにすれば、プログラムの本体からの飛び越し防止領域への分岐は、分岐先のアドレスが分岐可能アドレスである場合にのみ許可され、手続きの途中へ分岐して実行することを防止することができる。
【００１２】
又、第１の特徴に係るプログラム実行装置は、飛び越し防止領域に設定された手続の入口アドレスを、飛び越し防止領域の外から分岐可能な分岐可能アドレスとして設定する分岐先設定手段を更に備えてもよい。
【００１３】
このプログラム実行装置によると、例えば、プログラムに存在する手続きを複数含んでいるライブラリを飛び越し防止領域に設定するとき、手続きの入口アドレスをそのまま分岐可能アドレスとして設定することができるようになる。これにより、飛び越し防止領域を有効に利用することができる。
【００１４】
上記に述べた構成の場合、飛び越し防止領域に設定された分岐可能アドレスは装置のどこかに保持しておく必要がある。このとき、アドレスの保持の場所や領域、格納方法などを管理する必要がある。したがって、第１の特徴に係るプログラム実行装置の分岐判定手段は、飛び越し防止領域内の命令に基づいて、飛び越し防止領域への分岐が許可されているか否か判定してもよい。
【００１５】
このプログラム実行装置によると、飛び越し防止領域内に分岐可能なアドレスは、飛び越し防止領域の外からの分岐を許可する特別な命令があるアドレスになる。そして、プログラム本体から飛び越し防止領域への分岐は、分岐先の命令が分岐を許すのであれば許可されることにより、分岐可能アドレスを保持しておく必要がなくなる。
【００１６】
第１の特徴に係るプログラム実行装置の分岐判定手段は、飛び越し防止領域への分岐が許可されていないと判定された場合に、投機的実行が行われている飛び越し防止領域内の命令をすべて無効にしてもよい。
【００１７】
最近のプロセッサの多くはパイプライン処理を行っており、現在の命令を実行し終える前に、それ以降の複数の命令を前もって実行し始める。
【００１８】
このため、プログラムの分岐時には投機的実行が行われる。多くの分岐命令は、直前の命令に実行結果によって条件が確定しないと、分岐するか否かが確定しない。したがって、プロセッサは分岐命令の後に実行する命令列を予測した上で投機的に実行する。
【００１９】
このような制御の下では、判定が確定した時点で、実行が許可されていない命令が実行中になっている場合もある。そこで、このような場合に実行中の命令をキャンセルするため、上記の手段を備えることが望ましい。
【００２０】
又、第１の特徴に係るプログラム実行装置は、実行可能と実行不可とが制御可能な特殊命令を実行不可に設定する実行不可設定手段と、分岐判定手段によって分岐が許可されていると判定された場合に、特殊命令を実行可能に設定する実行可能設定手段とを更に備えてもよい。
【００２１】
このプログラム実行装置によると、飛び越し防止領域の設定や管理などの手間を削減して、ライブラリ作製者の意図どおりに手続きを実行することができる。
【００２２】
又、上記のプログラム実行装置において、実行不可設定手段は、手続き内の特殊命令を実行し終えるときに、実行不可に設定してもよい。
【００２３】
このプログラム実行装置によると、手続きを記述する特殊命令の実行が終了するときに特殊命令を実行できないよう再び元の状態に戻すことができる。
【００２４】
又、上記のプログラム実行装置において、分岐判定手段は、分岐が許可されている判定した場合、投機的実行が行われている特殊命令をすべて無効にしてもよい。
【００２５】
このプログラム実行装置によると、手続きの途中などへの分岐により、分岐が許可されていないにもかかわらず、飛び越し防止領域内の命令、又は、特殊命令が投機的実行によって実行中だったとしても、それらの実行を適切に取り消すことができる。
【００２６】
又、第１の特徴に係るプログラム実行装置は、分岐判定手段によって、飛び越し防止の外から飛び越し防止領域の分岐可能アドレスへ分岐していると判定された場合に、分岐可能アドレスへ分岐したことを分岐情報に設定する分岐状況設定手段と、分岐情報に基づいて、飛び越し防止領域内の分岐可能アドレスへ分岐したか否かを判定する分岐状況判定手段とを更に備え、領域内実行手段は、分岐状況判定手段によって、飛び越し防止領域内の分岐可能アドレスへ分岐したと判定された場合に、飛び越し防止領域内の命令を実行してもよい。
【００２７】
このプログラム実行装置によると、分岐情報に基づいて、飛び越し防止領域内の命令を実行するとき、分岐可能アドレスに正しく分岐していれば、命令を実行することができる。
【００２８】
本発明の第２の特徴は、記憶領域に保存された、手続きを含むプログラムを実行するプログラム実行方法であって、（ａ）ユーザ空間で実行されるプログラム内に存在する、所定の手続きのうち、所定の手続を飛び越し防止領域に設定するステップと、（ｂ）前記分岐可能アドレスに基づいて、飛び越し防止領域への分岐が許可されているか否か判定するステップと、（ｃ）飛び越し防止領域内の命令を実行するステップとを含むプログラム実行方法であることを要旨とする。
【００２９】
第２の特徴に係るプログラム実行方法によると、確実に実行しなければならない、手続（プログラムコード）を含むプログラムを実行する場合、プログラムを安全に動作させることができる。
【００３０】
又、第２の特徴に係るプログラム実行方法において、判定するステップは、分岐先アドレスの命令に基づいて、飛び越し防止領域への分岐が許可されているか否か判定してもよい。
【００３１】
又、第２の特徴に係るプログラム実行方法において、実行可能と実行不可とが制御可能な特殊命令を実行不可に設定するステップと、分岐するステップによって分岐が許可されていると判定された場合に、特殊命令を実行可能に設定するステップとを更に含んでもよい。
【発明の効果】
【００３２】
本発明によると、確実に実行しなければならない、プログラムコードを含むプログラムを実行する場合、プログラムを安全に動作させることができるプログラム実行装置及びプログラム実行方法を提供することができる。
【発明を実施するための最良の形態】
【００３３】
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には、同一又は類似の符号を付している。ただし、図面は模式的なものであることに留意すべきである。
【００３４】
＜第１の実施の形態＞
（プログラム実行装置の構成）
第１の実施の形態に係るプログラム実行装置１００は、図１に示すように、領域設定手段１０１と、分岐判定手段１０２と、分岐実行手段１０３と、領域内実行手段１０４と、記憶領域１０５とを備える。領域設定手段１０１、分岐判定手段１０２、分岐実行手段１０３、領域内実行手段１０４は、例えば、ＣＰＵによって実行されるモジュールとして構成することができる。これらのモジュールは、パーソナルコンピュータ等の汎用コンピュータにおいて、所定のプログラム言語を利用するための専用プログラムを実行することにより実現することができる。
【００３５】
領域設定手段１０１は、ユーザ空間で実行されるプログラム内に存在する手続きのうち、バッファの境界チェックを飛び越すバッファオーバフローを防ぐなど安全性の理由により、処理の途中から実行できないようにしたい手続きを、ユーザ空間プログラムにおける特定の領域（以下において、「飛び越し防止領域」という。）に設定する。プログラムには、複数のライブラリをリンクさせることができ、飛び越し防止領域には、図２に示すように、単一又は複数のライブラリや、単一又は複数のサブルーチンが含まれる。もしくは、これらの単位を組み合わせたものが含まれる。又、飛び越し防止領域には、飛び越し防止領域以外の領域（以下において、「本体領域」という。）から、飛び越し防止領域へ分岐できるアドレスが、事前に設定されている。図２では、0x100毎に分岐可能なアドレスが設定されており、例えば、サブルーチン０の入口アドレスである、0xf0000100には分岐可能である（図２のＯＫが付与された矢印）が、サブルーチン１の入口以外のアドレスには分岐できない（図２のＮＧが付与された矢印）。このように、サブルーチン処理の開始アドレスが分岐可能アドレスとなるように飛び越し防止領域へサブルーチンを配置する。
【００３６】
分岐判定手段１０２は、領域設定手段１０１によって設定された、飛び越し防止領域における分岐可能なアドレスに基づいて、本体領域から飛び越し防止領域へ分岐して命令の実行を許可するか否か判定する。飛び越し防止領域には、分岐可能なアドレスが決められているので、分岐判定手段１０２は、命令の分岐先アドレスが、飛び越し防止領域に保持されたアドレスと一致するか否かによって判定する。尚、この判定が実行されるタイミングは、本体領域から飛び越し防止領域へ分岐する命令が発行されたとき、又は本体領域から飛び越し防止領域へ分岐した直後の命令を実行するときである。
【００３７】
又、分岐判定手段１０２は、飛び越し防止領域への分岐が許可されていないと判定された場合に、投機的実行が行われている飛び越し防止領域内の命令をすべて無効にしてもよい。ここで、「投機的実行」とは、現在の分岐命令の実行が終了する前に、分岐に必要な判定結果を事前に予測し、分岐後の命令を投機的に実行し始めることをいう。
【００３８】
分岐実行手段１０３は、分岐判定手段１０２において、飛び越し防止領域へ分岐して命令の実行を許可すると判定された場合に、飛び越し防止領域内のアドレスへの分岐を実行する。
【００３９】
領域内実行手段１０４は、飛び越し防止領域内に分岐した後、飛び越し防止領域内に存在する命令を実行する。領域内実行手段１０４が命令を実行するタイミングは、分岐判定手段１０２において分岐して命令の実行を許可すると判定された場合、又は分岐実行手段１０３によって分岐が完了した場合である。領域内実行手段１０４は、飛び越し防止領域内に存在する命令の処理が終了すると、本体領域へ処理を戻す。
【００４０】
記憶領域１０５は、プログラム本体や、プログラムを実行するために用いられるライブラリを保持する。又、記憶領域１０５は、プログラムの実行管理やシステムコールの処理などを行うオペレーティングシステム（ＯＳ）、システムやアプリ用の設定ファイル、ユーザが生成したファイルなどを保持する。
【００４１】
又、図示していないが、プログラム実行装置１００は、領域設定処理、分岐判定処理、分岐実行処理、領域内実行処理などをＣＰＵに実行させるためのプログラムを蓄積するプログラム保持部を備えてもよい。プログラム保持部は、例えば、ＲＡＭ、ＲＯＭ、ハードディスク、フレキシブルディスク、コンパクトディスク、ＩＣチップ、カセットテープなどの記録媒体である。このような記録媒体によれば、プログラムの蓄積、運搬、販売などを容易に行うことができる。
【００４２】
（プログラム実行方法）
次に、第１の実施の形態に係るプログラム実行装置の動作（プログラム実行方法）について、図３〜５を用いて説明する。図３は、プログラムの実行するときのルーチンを示し、図４及び図５は、プログラムが飛び越し防止領域へ分岐するときのルーチンを示す。
【００４３】
まず、ステップＳ１０１において、プログラム実行装置１００は、プログラム内に存在するライブラリやサブルーチンなどの手続きのうち、処理の途中に飛び越して実行することを防止する手続きを、飛び越し防止領域として設定する。飛び越し防止領域には、本体領域から、飛び越し防止領域へ分岐できるアドレスが、事前に決められている。
【００４４】
次に、ステップＳ１０２において、プログラム実行中に飛び越し防止領域内の手続きを呼び出す必要があるときは、ステップＳ１０３において、呼び出しを指定された手続きへ分岐するため、図４及び図５に示す、飛び越し防止領域への分岐ルーチンが実行される。ステップＳ１０３の詳細については、後に説明する。
【００４５】
ステップＳ１０３による手続き呼び出しが終了すると、ステップＳ１０４において実行を続けるか否かを検証する。その結果、実行する処理があればステップＳ１０２に移行し、実行する処理がなければプログラムを終了する。
【００４６】
次に、図３のステップＳ１０３における分岐処理の詳細を図４及び図５を用いて、説明する。図４は、分岐判定が実行されるタイミングが、本体領域から飛び越し防止領域へ分岐する命令が発行されたときである場合のフローチャートである。
【００４７】
図４のステップＳ２０１において、プログラム実行装置１００は、本体領域から飛び越し防止領域へ分岐するとき、飛び越し防止領域の分岐可能アドレスに基づいて、飛び越し防止領域への分岐が許可されているか否か判定する。
【００４８】
飛び越し防止領域への分岐が許可されていると判定された場合は、ステップＳ２０２へ進み、許可されていないと判定された場合は、ステップＳ２０３へ進む。
【００４９】
ステップＳ２０２において、プログラム実行装置１００は、ステップＳ２０１において判定した分岐先へ，処理を分岐する。そして、ステップＳ２０４において、呼び出しによって指定された分岐先の処理を実行する。
【００５０】
一方、ステップＳ２０３において、プログラム実行装置１００は、エラー処理を実行して終了する。
【００５１】
次に、もう一つの飛び越し防止領域への分岐ルーチンについて、図５を用いて説明する。図５は、分岐判定が実行されるタイミングが、本体領域から飛び越し防止領域へ分岐した直後である場合のフローチャートである。
【００５２】
図５のステップＳ３０１において、本体領域から飛び越し防止領域へ分岐したとき、飛び越し防止領域の分岐可能アドレスに基づいて、飛び越し防止領域への分岐が許可されているか否か判定する。
【００５３】
飛び越し防止領域への分岐が許可されていると判定された場合は、ステップＳ３０２へ進み、許可されていないと判定された場合は、ステップＳ３０３へ進む。
【００５４】
次に、ステップＳ３０２において、プログラム実行装置１００は、呼び出しによって指定された分岐先の処理を実行する。
【００５５】
一方、ステップＳ３０３において、プログラム実行装置１００は、エラー処理を実行して終了する。
【００５６】
（作用及び効果）
第１の実施の形態では、処理途中への飛び越しを防止するために飛び越し防止領域を設定する。領域の外から分岐可能なアドレスは決まっており,手続きの入口は分岐可能なアドレスに配置する。この場合、手続きの途中へ分岐して手続きを実行しようとしても、分岐可能なアドレスではないため、分岐ができないようになる。
【００５７】
このように、第１の実施の形態に係るプログラム実行装置及びプログラム実行方法によると、ユーザ空間で実行されるプログラムにおいて、確実に実行しなければならないコードを含んだライブラリにあるサブルーチンを呼び出す際に、手続きの途中への分岐を防止することにより、手続きの入口から順に確実に実行することができる。尚、これらの処理には、特にプログラムの切り替え処理は必要でないため、高速に動作させることができる。
【００５８】
又、このようなライブラリ制御を実現することにより、システムコールを利用する場合に必要とされるオーバヘッドなしで、システムに対して危険を及ぼすような重要な処理を提供することが可能になる。ただし、この目的を解決するとき、システムコールと同様の切り替えのオーバヘッドが生じないように留意する必要がある。
【００５９】
＜第２の実施の形態＞
第１の実施の形態では、飛び越し防止領域への分岐が可能なアドレスは、予め決められており、そのアドレスに合わせた形で保護したい手続きを配置する必要があった。しかし、それぞれ手続の処理量は一定ではないため、分岐不可となった領域を処理によって使い切ることができない。つまり、飛び越し防止領域には、未使用部分が多数存在するので、領域の使用効率がよくない場合がある。
【００６０】
そこで、第２の実施の形態では、手続きの入口アドレスを分岐可能なアドレスとして設定することにより、飛び越し防止領域に未使用部分が存在しないようにする。
【００６１】
（プログラム実行装置の構成）
第２の実施の形態に係るプログラム実行装置は、図６に示すように、領域設定手段１０１と、分岐先設定手段１０６と、分岐判定手段１０２と、分岐実行手段１０３と、領域内実行手段１０４と、記憶領域１０５とを備える。
【００６２】
領域設定手段１０１は、ユーザ空間で実行されるプログラム内に存在する手続きのうち、処理の途中から実行できないようにしたい手続きを飛び越し防止領域に設定する。プログラムには、複数のライブラリをリンクさせることができ、飛び越し防止領域には、図７に示すように、単一又は複数のライブラリや、単一又は複数のサブルーチンが含まれる。もしくは、これらの単位を組み合わせたものが含まれる。この時点では、飛び越し防止領域へ分岐可能なアドレスは決まっていない。処理の途中へ飛び越すことを防ぐ処理を行う領域を設定するのみである。
【００６３】
分岐先設定手段１０６は、領域設定手段１０１によって、飛び越し防止領域内に設定された手続きの入口アドレスを、分岐可能なアドレスとして設定する。図７のように、本体領域から飛び越し防止領域へ分岐するときには、手続きの入口のみ分岐できるようにする。
【００６４】
分岐判定手段１０２、分岐実行手段１０３、領域内実行手段１０４、記憶領域１０５については、第１の実施の形態と同様であるので、ここでは説明を省略する。
【００６５】
（プログラム実行方法）
次に、第２の実施の形態に係るプログラム実行装置の動作（プログラム実行方法）について、図８を用いて説明する。
【００６６】
まず、ステップＳ４０１において、プログラム実行装置１００は、プログラム内に存在するライブラリやサブルーチンなどの手続きのうち、処理の途中に飛び越して実行することを防止する手続きを飛び越し防止領域に設定する。
【００６７】
次に、ステップＳ４０２において、プログラム実行装置１００は、飛び越し防止領域に、飛び越し防止領域内に設定された手続きの入口アドレスを、飛び越し防止領域内へ分岐可能なアドレスとして設定する。
【００６８】
そして、ステップＳ４０３において、プログラム実行装置１００は、プログラムを実行する。
【００６９】
次に、プログラム実行中に飛び越し防止領域内の手続きを呼び出す必要があるときは、ステップＳ４０４において、呼び出しを指定された手続きへ分岐するため、図４及び図５に示す、飛び越し防止領域への分岐ルーチンが実行される。ステップＳ４０４の詳細については、第１の実施の形態と同様であるので、ここでは説明を省略する。
【００７０】
ステップＳ４０４による手続き呼び出しが終了すると、ステップＳ４０５において実行を続けるか否かを検証する。その結果、実行する処理があればステップＳ４０３に移行し、実行する処理がなければプログラムを終了する。
【００７１】
（作用及び効果）
第２の実施の形態では、飛び越し防止領域内に設定された手続きの入口アドレスを、分岐可能なアドレスとして設定する。この場合、手続きの途中へ分岐して手続きを実行しようとしても、分岐可能なアドレスではないため、分岐ができないようになる。
【００７２】
この手順により、第２の実施の形態に係るプログラム実行装置及びプログラム実行方法によると、ユーザ空間で実行されるプログラムにおいて、手続きの途中への分岐を防止することにより、手続きの入口から順に確実に実行することができる。
【００７３】
又、第２の実施の形態では、飛び越し防止領域内に設定された手続きの入口アドレスを、分岐可能なアドレスとして設定するため、飛び越し防止領域の未使用部分をなくし、飛び越し防止領域の使用効率を向上させることができる。
【００７４】
＜第３の実施の形態＞
第２の実施の形態では、飛び越し防止領域内で分岐可能なアドレスを設定する。このとき設定したアドレスに関する情報を何らかの形で保持する仕組みが必要になる。そこで、第３の実施の形態では、分岐可能なアドレスなどの追加情報を減らすようにする。
【００７５】
（プログラム実行装置の構成）
第３の実施の形態に係るプログラム実行装置１００は、図１に示すように、領域設定手段１０１と、分岐判定手段１０２と、分岐実行手段１０３と、領域内実行手段１０４と、記憶領域１０５とを備える。
【００７６】
分岐実行手段１０３と、領域内実行手段１０４と、記憶領域１０５とは、第１の実施の形態と同様であるので、ここでは説明を省略する。又、領域設定手段１０１は、第２の実施の形態と同様であるので、ここでは説明を省略する。
【００７７】
分岐判定手段１０２は、飛び越し防止領域内に存在する、分岐先アドレスの命令に基づいて、本体領域から飛び越し防止領域へ分岐して実行することを許可するか否かを判定する。この命令は、本体領域から飛び越し防止領域への分岐を許可する命令である。この命令へ分岐すれば、飛び越し防止領域内を実行することができる。逆に、本体領域から飛び越し防止領域への分岐を許可しない命令もある。この命令へ分岐すると、飛び越し防止領域内を実行することができない。
【００７８】
処理の途中へ分岐されてほしくない手続きを作成するときに、本体領域から飛び越し防止領域への分岐を許可する命令を手続きの入口に配置すると、処理の途中に分岐できないようになる。
【００７９】
尚、この判定が実行されるのは、本体領域から飛び越し防止領域へ分岐する命令が発行されたとき、又は本体領域から飛び越し防止領域へ分岐した直後の命令を実行するときである。
【００８０】
（プログラム実行方法）
次に、第３の実施の形態に係るプログラム実行装置の動作（プログラム実行方法）について、図９〜１１を用いて説明する。図９は、プログラムの実行するときのルーチンを示し、図１０及び図１１は、プログラムが飛び越し防止領域へ分岐するときのルーチンを示す。
【００８１】
図９に示す処理は、第２の実施の形態における図８のステップＳ４０２が省略されているルーチンであるため、ここでは、説明を省略する。
【００８２】
次に、図９のステップＳ５０３における分岐処理の詳細を図１０及び図１１を用いて、説明する。図１０は、分岐判定が実行されるタイミングが、本体領域から飛び越し防止領域へ分岐する命令が発行されたときである場合のフローチャートである。
【００８３】
図１０のステップＳ６０１において、プログラム実行装置１００は、本体領域から飛び越し防止領域へ分岐するとき、飛び越し防止領域内に存在する分岐先の命令に基づいて、飛び越し防止領域への分岐が許可されているか否か判定する。
【００８４】
飛び越し防止領域への分岐が許可されていると判定された場合は、ステップＳ６０２へ進み、許可されていないと判定された場合は、ステップＳ６０３へ進む。
【００８５】
ステップＳ６０２において、プログラム実行装置１００は、ステップＳ６０１において判定した分岐先へ、処理を分岐する。そして、ステップＳ６０４において、呼び出しによって指定された分岐先の処理を実行する。
【００８６】
一方、ステップＳ６０３において、プログラム実行装置１００は、エラー処理を実行して終了する。
【００８７】
次に、もう一つの飛び越し防止領域への分岐ルーチンについて、図１１を用いて説明する。図１１は、分岐判定が実行されるタイミングが、本体領域から飛び越し防止領域へ分岐した直後である場合のフローチャートである。
【００８８】
図１１のステップＳ７０１において、本体領域から飛び越し防止領域へ分岐したとき、飛び越し防止領域に存在する分岐先の命令に基づいて、飛び越し防止領域への分岐が許可されているか否か判定する。
【００８９】
飛び越し防止領域への分岐が許可されていると判定された場合は、ステップＳ７０２へ進み、許可されていないと判定された場合は、ステップＳ７０３へ進む。
【００９０】
次に、ステップＳ７０２において、プログラム実行装置１００は、呼び出しによって指定された分岐先の処理を実行する。
【００９１】
一方、ステップＳ７０３において、プログラム実行装置１００は、エラー処理を実行して終了する。
【００９２】
（作用及び効果）
第３の実施の形態では、本体領域からの分岐を許可する命令を導入することにより、分岐可能なアドレスに関する情報を保持しておく必要がない。
【００９３】
このとき、手続きの途中へ分岐して実行しようとしても、本体領域からの分岐を許可する命令ではないため、分岐ができないようになる。
【００９４】
この手順により、第３の実施の形態に係るプログラム実行装置１００及びプログラム実行方法によると、ユーザ空間で実行されるプログラムにおいて、手続きの途中への分岐を防止することにより、手続きの入口から順に確実に実行することができる。
【００９５】
＜第４の実施形態＞
第１、第２及び第３の実施の形態では、本体領域から飛び越し防止領域へ分岐するとき、もしくは分岐した後に、正しい分岐先であるか否かを判定する。
【００９６】
第４の実施の形態では、飛び越しを防止したい手続きを特殊命令で記述する。手続きを実行するとき、正しい分岐先へ分岐していることが確認できるのであれば、この特殊命令が実行可能になる。
【００９７】
（プログラム実行装置の構成）
第４の実施の形態に係るプログラム実行装置１００は、図１２に示すように、分岐先設定手段１０６と、実行不可設定手段１０７と、分岐判定手段１０２と、実行可能設定手段１０８と、特殊命令判定手段１０９と、特殊命令実行手段１１０と、記憶領域１０５とを備える。ここでは、第１、第２及び第３の実施形態とは異なる手段のみを説明する。
【００９８】
分岐先設定手段１０６は、飛び越しを防止するために、実行可能と実行不可とが制御可能な特殊命令を用いて記述された手続きの入口アドレスを分岐可能なアドレスとして設定する。図１３に示すように、飛び越しを防止する特殊命令からなる手続きへ分岐するとき、手続きの入口となるアドレスを、プログラムを実行する前に特定する。
【００９９】
実行不可設定手段１０７は、飛び越しを防止するための特殊命令を実行できないように設定する。この特殊命令は、実行可能と設定されたときのみに実行ができる。
【０１００】
分岐判定手段１０２は、分岐先設定手段１０６において設定したアドレスに基づいて、飛び越しを防止する手続きの入口へ分岐しているか否か判定する。入口アドレスへ分岐したか否かについては、分岐先アドレスを確認することで判定する。尚、この判定が実行されるのは、特殊命令からなる手続きへ分岐する命令が発行されたとき、又は特殊命令からなる手続きへ分岐した直後の命令を実行するときである。
【０１０１】
実行可能設定手段１０８は、分岐判定手段１０２において、飛び越しを防止する手続きの入口アドレスへ分岐していると判定された場合に、特殊命令を実行可能に設定する。飛び越しを防止したい手続きは特殊命令で記述されているので、入口アドレスに分岐すれば、この設定によって手続き内の命令全体が実行できるようになる。
【０１０２】
特殊命令判定手段１０９は、実行可能設定手段１０８における、特殊命令に関する設定に基づいて、特殊命令が実行可能であるか否か判定する。ここでは、入口アドレスへ分岐していれば、特殊命令が実行可能に設定されている。そうでなく、手続きの途中へ分岐している場合には、特殊命令は実行不可になったままであるために命令を実行できない。
【０１０３】
特殊命令実行手段１１０は、特殊命令判定手段１０９において、特殊命令が実行可能であると判定された場合に、特殊命令を実行する。
【０１０４】
（プログラム実行方法）
次に、第４の実施の形態に係るプログラム実行装置の動作（プログラム実行方法）について、図１４及び図１５を用いて説明する。図１４は、プログラムの実行するときのルーチンを示し、図１５は、手続を実行するときのルーチンを示す。
【０１０５】
事前に、処理の途中に飛び越した実行を防止するために用いる特殊命令によって、飛び越しを防止したい手続きを生成しておく。
【０１０６】
まず、図１４のステップＳ８０１において、プログラム実行装置１００は、プログラム内に存在するライブラリやサブルーチンなどの手続きのうち、飛び越しを防止したい手続きの入口アドレスを特定する。そして、ステップＳ８０２において、プログラム実行装置１００は、特殊命令を実行不可に設定する。
【０１０７】
次に、ステップＳ８０３において、プログラム実行装置１００は、プログラムを実行する。
【０１０８】
次に、ステップＳ８０３において、プログラム実行中に手続きを呼び出す必要があるときは、ステップＳ８０４において、呼び出しを指定された手続きへ分岐するため、図１５に示す、手続の実行ルーチンが実行される。ステップＳ８０４の詳細については、後に説明する。
【０１０９】
ステップＳ８０４による手続き呼び出しが終了すると、ステップＳ８０５において実行を続けるか否かを検証する。その結果、実行する処理があればステップＳ８０３に移行し、実行する処理がなければプログラムを終了する。
【０１１０】
次に、図１５のステップＳ８０４における分岐処理の詳細を、図１５を用いて説明する。
【０１１１】
まず、ステップＳ９０１において、プログラム実行装置１００は、実行前に特定された入口アドレスに基づいて、手続きの入口へ分岐しているか否か判定する。
【０１１２】
手続きの入口へ分岐していると判定された場合は、ステップＳ９０２へ進み、分岐していないと判定された場合は、ステップＳ９０３へ進む。
【０１１３】
ステップＳ９０２において、プログラム実行装置１００は、特殊命令を実行可能に設定する。
【０１１４】
次に、ステップＳ９０３において、プログラム実行装置１００は、特殊命令に対する設定に基づいて、特殊命令が実行可能であるか否かを判定する。特殊命令が実行可能であると判定された場合は、ステップＳ９０５へ進み、実行可能でないと判定された場合は、ステップＳ９０４へ進む。
【０１１５】
ステップＳ９０４において、プログラム実行装置１００は、エラー処理をして終了する。
【０１１６】
一方、ステップＳ９０５において、プログラム実行装置１００は、実行可能と設定された特殊命令を実行する。そして、手続きを終了するとき、ステップＳ９０６において、特殊命令を実行不可に設定する。
【０１１７】
（作用及び効果）
第４の実施の形態では、処理途中への飛び越しを防止するための特殊命令によって手続きを生成する。そして、手続きの入口に分岐するときのみ、これら特殊命令が実行可能になる。
【０１１８】
このとき、手続きの途中に分岐して手続きを実行しようとしても、特殊命令が実行可能でないため、手続きの中身を実行することができなくなる。
【０１１９】
この手順により、第４の実施の形態に係るプログラム実行装置及びプログラム実行方法によると、ユーザ空間で実行されるプログラムにおいて、手続きの途中への分岐を防止することにより、手続きの入口から確実に実行することができる。
【０１２０】
＜第５の実施形態＞
第４の実施の形態では、処理途中へ飛び越した実行を防止するために特殊な命令を導入した。命令は非常に多種多様であるため、対応させるには手間がかかる場合がある。そこで、第５の実施の形態では、第１〜第３の実施の形態で用いた、飛び越し防止領域を利用することで、対応のための手間を軽減する。
【０１２１】
（プログラム実行装置の構成）
第５の実施の形態に係るプログラム実行装置１００は、図１６に示すように、領域設定手段１０１と、分岐先設定手段１０６と、分岐状況解除手段１１１と、分岐判定手段１０２と、分岐状況設定手段１１２と、分岐状況判定手段１１３と、領域内実行手段１０４と、記憶領域１０５とを備える。
【０１２２】
領域設定手段１０１と、分岐先設定手段１０６とは、第２の実施の形態と同様であるので、ここでは説明を省略する。
【０１２３】
したがって、ここでは、第１、第２及び第３の実施の形態とは異なるその他の手段のみを説明する。
【０１２４】
分岐状況解除手段１１１は、図１７に示すように、本体領域から分岐先設定手段１０６において設定された分岐可能なアドレスへ分岐していないことを分岐情報に設定する。ここで、「分岐情報」とは、飛び越し防止領域内の分岐可能なアドレスへ分岐したか否かを示す情報であり、後述の分岐状況設定手段１１２においても設定される。この分岐状況解除手段１１１は、プログラムを実行する前の初期化処理と、飛び越し防止領域から本体領域に戻る際に設定を戻す処理を行う。
【０１２５】
分岐判定手段１０２は、飛び越し防止領域における分岐可能なアドレスに基づいて、本体領域から飛び越し防止領域内における分岐可能アドレスへ分岐しているか否かを判定する。飛び越し防止領域には、分岐可能なアドレスが決められているので、そのアドレスに一致するか否かで判定する。
【０１２６】
尚、この判定が実行されるのは、本体領域から飛び越し防止領域へ分岐する命令が発行されたとき、又は本体領域から飛び越し防止領域へ分岐した直後の命令を実行するときである。
【０１２７】
分岐状況設定手段１１２は、分岐判定手段１０２において、本体領域から飛び越し防止領域内の分岐可能なアドレスへ分岐していると判定された場合に、分岐可能なアドレスへ分岐したことを分岐情報に設定する。
【０１２８】
分岐状況判定手段１１３は、分岐情報に基づいて、飛び越し防止領域内の分岐可能なアドレスへ分岐したか否かを判定する。この手段が実行されるのは、飛び越し防止領域内の命令を実行するときである。正しく分岐可能なアドレスへ分岐した場合には、分岐情報にその状態が設定してあるので、命令を実行できる。しかし、分岐可能なアドレス以外に分岐すると、直接この手段で判定されることになる。このとき、分岐情報には、正しく分岐していないことが設定されているので、飛び越し防止領域内の命令を実行できなくなる。
【０１２９】
領域内実行手段１０４は、分岐状況判定手段１１３において、飛び越し防止領域内の分岐可能なアドレスへ分岐したと判定された場合に、飛び越し防止領域内の命令を実行する。
【０１３０】
（プログラム実行方法）
次に、第５の実施の形態に係るプログラム実行装置の動作（プログラム実行方法）について、図１８及び図１９を用いて説明する。図１８は、プログラムの実行するときのルーチンを示し、図１９は、プログラムが飛び越し防止領域へ分岐するときのルーチンを示す。
【０１３１】
まず、ステップＳ１００１において、プログラムを実行する装置１００は、プログラム内に存在するライブラリやサブルーチンなどの手続きのうち、処理の途中に飛び越して実行することを防止する手続きを飛び越し防止領域として設定する。
【０１３２】
次に、ステップＳ１００２において、飛び越し防止領域内に設定された手続きの入口アドレスを、飛び越し防止領域内へ分岐可能なアドレスとして設定する。そして、ステップＳ１００３において、分岐可能なアドレスへ分岐していないことを分岐情報に設定する。
【０１３３】
そして、ステップＳ１００４において、プログラム実行装置１００は、プログラムを実行する。
【０１３４】
次に、ステップＳ１００４において、プログラム実行中に飛び越し防止領域内の手続きを呼び出す必要があるときは、ステップＳ１００５において、呼び出しを指定された手続きへ分岐するため、図１９に示す、飛び越し防止領域への分岐ルーチンが実行される。ステップＳ１００５の詳細については、後に説明する。
【０１３５】
ステップＳ１００５による手続き呼び出しが終了すると、ステップＳ１００６において実行を続けるか否かを検証する。その結果、実行する処理があればステップＳ１００４に移行し、実行する処理がなければプログラムを終了する。
【０１３６】
次に、図１８のステップＳ１００５における分岐処理の詳細を、図１９を用いて説明する。
【０１３７】
図１９のステップＳ１１０１において、プログラム実行装置１００は、本体領域から飛び越し防止領域へ分岐するとき、飛び越し防止領域の分岐可能アドレスに基づいて、飛び越し防止領域の分岐可能なアドレスに分岐しているか否か判定する。
【０１３８】
分岐可能なアドレスに分岐していると判定された場合には、ステップＳ１１０２へ進み、分岐可能なアドレスに分岐していないと判定された場合には、ステップＳ１１０３へ進む。
【０１３９】
ステップＳ１１０２において、プログラム実行装置１００は、分岐可能なアドレスに分岐したことを分岐情報に設定する。
【０１４０】
次に、ステップＳ１１０３において、領域内の命令を実行する前に、分岐情報に基づいて、分岐可能なアドレスに分岐したか否か判定する。
【０１４１】
分岐可能なアドレスに分岐したと判定された場合には、ステップＳ１１０５へ進み、分岐可能なアドレスに分岐していないと判定された場合には、ステップＳ１１０４へ進む。ステップＳ１１０４において、プログラム実行装置１００は、エラー処理を実行して終了する。
【０１４２】
一方、ステップＳ１１０５において、プログラム実行装置１００は、飛び越し防止領域内の命令を実行する。命令の実行が終了すると、ステップＳ１１０６において、プログラム実行装置１００は、分岐可能なアドレスへ分岐していないことを分岐情報に再び設定して、飛び越し防止領域から本体領域へ戻る。
【０１４３】
（作用及び効果）
第５の実施の形態では、処理途中への飛び越しを防止するために飛び越し防止領域を設定する。そして、本体領域から分岐可能なアドレスを特定する。プログラムが飛び越し防止領域の分岐可能なアドレスに正しく分岐すれば、その情報を一時保管する。飛び越し防止領域内の命令を実行するとき、分岐可能なアドレスに正しく分岐していれば、命令を実行できる。
【０１４４】
このとき、手続の途中へ分岐して手続を実行しようとしても、分岐可能なアドレスではないため、正しく分岐したことを示す分岐情報が保存されない。したがって、手続きの途中の命令を実行しようとするとエラーになる。
【０１４５】
以上の手順により、第５の実施の形態に係るプログラム実行装置及びプログラム実行方法によると、ユーザ空間で実行されるプログラムにおいて、手続きの途中への分岐を防止することにより、手続きの入口から確実に実行することができる。
【図面の簡単な説明】
【０１４６】
【図１】第１の実施の形態に係るプログラム実行装置の構成ブロック図である。
【図２】第１の実施の形態に係るユーザ空間の構成を説明するための図である。
【図３】第１の実施の形態に係るプログラム実行方法を示すフローチャートである（その１）。
【図４】第１の実施の形態に係るプログラム実行方法を示すフローチャートである（その２）。
【図５】第１の実施の形態に係るプログラム実行方法を示すフローチャートである（その３）。
【図６】第２の実施の形態に係るプログラム実行装置の構成ブロック図である。
【図７】第２の実施の形態に係るユーザ空間の構成を説明するための図である。
【図８】第２の実施の形態に係るプログラム実行方法を示すフローチャートである。
【図９】第３の実施の形態に係るプログラム実行方法を示すフローチャートである（その１）。
【図１０】第３の実施の形態に係るプログラム実行方法を示すフローチャートである（その２）。
【図１１】第３の実施の形態に係るプログラム実行方法を示すフローチャートである（その３）。
【図１２】第４の実施の形態に係るプログラム実行装置の構成ブロック図である。
【図１３】第４の実施の形態に係るユーザ空間の構成を説明するための図である。
【図１４】第４の実施の形態に係るプログラム実行方法を示すフローチャートである（その１）。
【図１５】第４の実施の形態に係るプログラム実行方法を示すフローチャートである（その２）。
【図１６】第５の実施の形態に係るプログラム実行装置の構成ブロック図である。
【図１７】第５の実施の形態に係るユーザ空間の構成を説明するための図である。
【図１８】第５の実施の形態に係るプログラム実行方法を示すフローチャートである（その１）。
【図１９】第５の実施の形態に係るプログラム実行方法を示すフローチャートである（その２）。
【符号の説明】
【０１４７】
１００…プログラム実行装置
１０１…領域設定手段
１０２…分岐判定手段
１０３…分岐実行手段
１０４…領域内実行手段
１０５…記憶領域
１０６…分岐先設定手段
１０７…実行不可設定手段
１０８…実行可能設定手段
１０９…特殊命令判定手段
１１０…特殊命令実行手段
１１１…分岐状況解除手段
１１２…分岐状況設定手段
１１３…分岐状況判定手段
【図１】
2006243833.tif 000003
【図２】
2006243833.tif 000004
【図３】
2006243833.tif 000005
【図４】
2006243833.tif 000006
【図５】
2006243833.tif 000007
【図６】
2006243833.tif 000008
【図７】
2006243833.tif 000009
【図８】
2006243833.tif 000010
【図９】
2006243833.tif 000011
【図１０】
2006243833.tif 000012
【図１１】
2006243833.tif 000013
【図１２】
2006243833.tif 000014
【図１３】
2006243833.tif 000015
【図１４】
2006243833.tif 000016
【図１５】
2006243833.tif 000017
【図１６】
2006243833.tif 000018
【図１７】
2006243833.tif 000019
【図１８】
2006243833.tif 000020
【図１９】
2006243833.tif 000021