(57)【要約】【課題】一部生成方式において、オーバヘッドをさらに削減することが可能なコード変換装置を提供する。【解決手段】コード変換装置１００Ａは、各命令の解析が不要な第１コードと、各命令の解析が必要な第２コードとの分類に用いられる第１解析情報を記憶する解析情報記憶部２０と、解析候補コードを選択し、解析候補コードを第１コード又は第２コードのいずれかに分類する解析候補特定部１１０と、第２コードを解析して第２解析情報を生成するコード解析部１２０と、解析結果に基づき、第２コードを変換して変換済みコードを生成するコード変換部１３０と、第１コード又は変換済みコードへ実行対象を切り替える切り替え部１４０とを備える。コード変換部１３０は、第２解析情報に基づいて、第２コードが実行された場合に所定のコードへ実行対象を切り替える命令である第２制御移動命令を、変換済みコードに埋め込む。【選択図】図１０
2009048370.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令を含むプログラムコードを解析するとともに、解析した前記プログラムコードを変換するコード変換装置であって、
各命令の解析が不要な第１コードと、各命令の解析が必要な第２コードとの分類に用いられる第１解析情報を記憶する解析情報記憶部と、
前記プログラムコードの一部である解析候補コードを選択し、前記第１解析情報に基づいて、前記解析候補コードを前記第１コード又は前記第２コードのいずれかに分類する解析候補特定部と、
前記第２コードを解析し、前記第２コードの次に実行されるコードを示す第２解析情報を生成するコード解析部と、
前記コード解析部による解析結果に基づき、前記第２コードを変換して変換済みコードを生成するコード変換部と、
前記第１コード又は前記変換済みコードへ実行対象を切り替える切り替え部と
を備え、
前記切り替え部は、前記第１コードが実行された場合に前記切り替え部へ前記実行対象を切り替える命令である第１制御移動命令を、前記第１コードに埋め込み、
前記コード変換部は、前記第２解析情報に基づいて、前記第２コードが実行された場合に所定のコードへ前記実行対象を切り替える命令である第２制御移動命令を、前記変換済みコードに埋め込む
ことを特徴とするコード変換装置。
【請求項２】
前記変換済みコードを記憶する変換済みコード記憶部と、
前記プログラムコードにおける前記第２コードを特定する情報と、前記変換済みコード記憶部に記憶された前記変換済みコードを特定する情報とを対応付けた第１コード変換情報を記憶するコード変換情報記憶部と
をさらに備え、
前記解析候補特定部は、前記第１コード変換情報に基づき、前記変換済みコード記憶部に記憶された前記変換済みコードに対応する前記プログラムコード中の前記第２コードを前記解析候補コードから除外することを特徴とする請求項１に記載のコード変換装置。
【請求項３】
前記変換済みコード記憶部は、前記変換済みコードに加えて、前記解析候補特定部によって分類された前記第１コードを記憶し、
前記コード変換情報記憶部は、前記プログラムコードにおける前記第１コードを特定する情報と、前記変換済みコード記憶部に記憶された前記第１コードを特定する情報とを対応付けた第２コード変換情報をさらに記憶し、
前記第２コード変換情報に基づき、前記プログラムコード中の前記第１コードに代えて、前記変換済みコード記憶部に記憶された前記第１コードが実行されることを特徴とする請求項２に記載のコード変換装置。
【請求項４】
前記第１制御移動命令又は前記第２制御移動命令が埋め込まれたアドレスを、前記プログラムコードにおいて最後に実行されたコードを示す第１コンテキスト情報として記憶するコンテキスト情報記憶部をさらに備え、
前記切り替え部は、前記第１制御移動命令又は前記第２制御移動命令によって前記切り替え部に前記実行対象が切り替った場合、前記第１コンテキスト情報を前記解析候補特定部に出力し、
前記解析候補特定部は、前記切り替え部によって出力された前記第１コンテキスト情報に基づいて、前記プログラムコードにおいて次に実行されるべきコードを特定し、特定したコードを前記解析候補コードとして選択することを特徴とする請求項１に記載のコード変換装置。
【請求項５】
前記解析候補特定部は、実行されると無条件に前記実行対象を分岐先に切り替える命令である無条件分岐命令を区切りとして前記プログラムコードを複数のコードに分割し、前記複数のコードのいずれかを前記解析候補コードとして選択し、
前記解析候補コードの末尾には、前記無条件分岐命令が存在しており、
前記切り替え部は、前記解析候補コードが前記第１コードである場合、前記第１コードの末尾の前記無条件分岐命令を前記第１制御移動命令に置き換え、
前記コンテキスト情報記憶部は、前記第１コードの末尾に存在する前記無条件分岐命令の分岐先を示す第２コンテキスト情報をさらに記憶し、
前記切り替え部は、前記第１制御移動命令によって前記切り替え部に制御が切り替った場合、前記コンテキスト情報記憶部に記憶された前記第２コンテキスト情報を前記解析候補特定部に出力し、
前記解析候補特定部は、前記切り替え部によって出力された前記第２コンテキスト情報に基づいて、前記プログラムコードにおいて次に実行されるべきコードを特定し、特定したコードを前記解析候補コードとして選択することを特徴とする請求項４に記載のコード変換装置。
【請求項６】
前記切り替え部は、
前記第１制御移動命令によって前記切り替え部に前記実行対象が切り替った場合、前記第１制御移動命令を前記変換済みコード記憶部に記憶された前記変換済みコードへの分岐命令に置き換え、
前記変換済みコードへの分岐命令を含む前記第１コードを特定する情報を前記第１解析情報から削除する
ことを特徴とする請求項２に記載のコード変換装置。
【請求項７】
前記コード解析部は、前記第２コードに含まれる分岐命令を検出し、
前記第２解析情報は、前記第２コードに含まれる前記分岐命令を特定する情報を含み、
前記コード変換部は、前記第２解析情報に基づいて、前記第２コードに含まれる前記分岐命令の分岐先へ前記実行対象を切り替える前記第２制御移動命令を前記変換済みコードに埋め込むことを特徴とする請求項１に記載のコード変換装置。
【請求項８】
前記第２解析情報は、前記第２コードに含まれる前記分岐命令の分岐先が前記第１コードであるか否かを示す情報を含み、
前記コード変換部は、前記第２解析情報に基づき、前記第２コードに含まれる前記分岐命令の分岐先が前記第１コードであると判定される場合、前記第１コードへの分岐命令を前記第２制御移動命令として前記変換済みコードに埋め込むことを特徴とする請求項７に記載のコード変換装置。
【請求項９】
前記第２解析情報は、前記第２コードに含まれる分岐命令の分岐先が前記第１コード変換情報に登録されているか否かを示す情報を含み、
前記コード変換部は、前記第２解析情報に基づき、前記第２コードに含まれる前記分岐命令の分岐先が前記第１コード変換情報に登録されていると判定される場合、前記変換済みコードへの分岐命令を前記第２制御移動命令として前記変換済みコードに埋め込むことを特徴とする請求項２に記載のコード変換装置。
【請求項１０】
前記コード変換部は、前記第２解析情報に基づき、前記第２コードに含まれる前記分岐命令の分岐先が特定不可能である、又は前記第２コードに含まれる前記分岐命令の分岐先が前記第２コードであると判定される場合、前記切り替え部へ前記実行対象を切り替える命令を前記第２制御移動命令として前記変換済みコードに埋め込むことを特徴とする請求項７に記載のコード変換装置。
【請求項１１】
前記第２解析情報は、前記第２コードに含まれる分岐命令が、実行されると所定の条件が成立した場合に限り分岐する命令である条件分岐命令であるか否かを示す情報を含み、
前記コード変換部は、前記第２解析情報に基づき、前記第２コードに前記条件分岐命令が含まれると判定される場合、前記条件分岐命令が実行されたか否かを判定する判定コードを前記変換済みコードに埋め込み、
前記切り替え部は、前記第１制御移動命令又は前記第２制御移動命令によって前記切り替え部に前記実行対象が切り替った場合に、前記判定コードの判定結果に基づき、前記条件分岐命令が実行されたか否かを特定することを特徴とする請求項７に記載のコード変換装置。
【請求項１２】
前記プログラムコードをあらかじめ解析することによって前記第１解析情報を生成する解析情報生成部をさらに備え、
前記解析情報記憶部は、前記解析情報生成部によって生成された前記第１解析情報を記憶することを特徴とする請求項１に記載のコード変換装置。
【請求項１３】
前記解析情報生成部は、
実行されると無条件に分岐する命令である無条件分岐命令を区切りとして前記プログラムコードを複数のブロックに分割し、
分岐先の特定可能な前記無条件分岐命令によって連結される複数のブロックを前記第１コードとして特定し、
特定された前記第１コードを示す情報を前記第１解析情報として前記解析情報記憶部に格納する
ことを特徴とする請求項１２に記載のコード変換装置。
【請求項１４】
前記解析情報生成部は、前記特定された第１コードの開始アドレスが、分岐先が一意に特定されない分岐命令の分岐先アドレスに該当する場合に限り、前記第１解析情報として前記解析情報記憶部に格納することを特徴とする請求項１３に記載のコード変換装置。
【請求項１５】
前記解析情報生成部は、前記プログラムコードの一部のみを前記複数のブロックに分割することを特徴とする請求項１３に記載のコード変換装置。
【請求項１６】
前記解析情報生成部は、前記プログラムコードに含まれるデータを除去し、データが除去されたプログラムコードを前記複数のブロックに分割することを特徴とする請求項１５に記載のコード変換装置。
【請求項１７】
前記変換済みコード及び前記第１コード変換情報を、前記プログラムコードが次回実行されるまで保持する保持部と、
前記プログラムコードの次回実行時において、前記保持部に保持されている前記変換済みコード及び前記第１コード変換情報を復元するコード復元部と
をさらに備えることを特徴とする請求項２に記載のコード変換装置。
【請求項１８】
前記コード復元部は、
前記変換済みコードが前記保持部に格納される際に、前記変換済みコードの改ざん検出に用いる電子署名を前記変換済みコードに付加し、
前記保持部に保持されている前記変換済みコードを前記保持部から読み出す際に、前記電子署名を用いて前記変換済みコードの改ざんを検出する
ことを特徴とする請求項１７に記載のコード変換装置。
【請求項１９】
複数の命令を含むプログラムコードを解析するとともに、解析した前記プログラムコードを変換するコード変換方法であって、
前記プログラムコードの一部である解析候補コードを選択し、各命令の解析が不要な第１コードと、各命令の解析が必要な第２コードとの分類に用いられる第１解析情報に基づいて、前記解析候補コードを前記第１コード又は前記第２コードのいずれかに分類するステップと、
前記第２コードを解析し、前記第２コードの次に実行されるコードを示す第２解析情報を生成するステップと、
前記第２コードに対する解析結果に基づき、前記第２コードを変換して変換済みコードを生成するステップと、
前記第１コード又は前記変換済みコードへ実行対象を切り替えるステップと
を備え、
前記切り替えるステップでは、前記第１コードが実行された場合に前記切り替えるステップへ前記実行対象を切り替える命令である第１制御移動命令を、前記第１コードに埋め込み、
前記変換済みコードを生成するステップでは、前記第２解析情報に基づいて、前記第２コードが実行された場合に所定のコードへ前記実行対象を切り替える命令である第２制御移動命令を、前記変換済みコードに埋め込む
ことを特徴とするコード変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の命令を含むプログラムコードを解析するとともに、解析したプログラムコードを変換するコード変換装置及びコード変換方法に関する。
【背景技術】
【０００２】
従来、計算機のＣＰＵ（Central Processing Unit）におけるプログラムコードの実行を制御する技術の１つとして、プログラムコードの一部分（以下、「フラグメント」という）毎に、プログラムコードをＣＰＵに実行させるインタプリタプログラムであるＳＤＴ(Software Dynamic Translator)が知られている。
【０００３】
ＳＤＴは、主記憶装置（メモリ）に展開されたプログラムコード（以下、「元コード」という）からフラグメントを選択し、選択したフラグメントを解析するとともに変換して、変換済みフラグメントを生成する。
【０００４】
ＳＤＴの実行コード（以下、「ＳＤＴコード」）もメモリに格納されており、ＣＰＵは、ＳＤＴコードと、変換済みフラグメントとを交互に実行する。図１は、ＳＤＴの概要を説明するための図である。ＳＤＴは、以下の（１）〜（４）の処理を実行する。
【０００５】
（１）まず、ＳＤＴは、解析候補のフラグメントを選択する。図１（ａ）及び図１（ｂ）に示すように、フラグメントの区切りとしては、無条件で分岐する命令である無条件分岐命令が用いられることが多い。
【０００６】
（２）ＳＤＴは、解析候補のフラグメントを解析し、解析したフラグメントを予め定められた規則に従って変換及び検査する。
【０００７】
図２は、ＳＤＴによる変換処理の一例を示す図である。図２に示すように、ＳＤＴは、フラグメントからシステムコールを検出し、検出したシステムコールを独自のシステムコールに置き換える。これにより、システムコールの実行を許可するか否かを制御することができる。
【０００８】
また、ＳＤＴは、変換済みフラグメントの末尾に、実行対象（ＣＰＵによって実行される対象）をＳＤＴ（ＳＤＴコード）に移す命令であるトランポリンコードを埋め込む。
【０００９】
（３）ＳＤＴは、実行対象を変換済みフラグメントに移し、変換済みフラグメントをＣＰＵに実行させる。実行対象がＳＤＴコードから変換済みフラグメントに移る際、ＳＤＴコード実行時のＣＰＵの状態（例えば、レジスタの値など）は、メモリに一旦保存される。
【００１０】
変換済みフラグメントがＣＰＵによって実行されると、変換済みフラグメントの末尾に埋め込まれたトランポリンコードによって、実行対象が再びＳＤＴに移る。
【００１１】
実行対象が元コード（変換済みフラグメント）からＳＤＴに移る際、元コード（変換済みフラグメント）実行時におけるＣＰＵの状態は、メモリに一旦保存される。また、ＳＤＴ実行時におけるＣＰＵの状態は、メモリから読み出されてＣＰＵに設定される。
【００１２】
なお、実行対象がＳＤＴコードから元コード（変換済みフラグメント）に移る動作、及び実行対象が元コード（変換済みフラグメント）からＳＤＴに移る動作を以下においては「モードスイッチ」と呼ぶ。
【００１３】
（４）上記（１）〜（３）が繰り返されることによって、元コードがフラグメント単位で順次変換及び実行される。
【００１４】
ＳＤＴでは、オーバヘッドを削減する技術として、後述するフラグメントキャッシュ、フラグメントリンク、ＩＢＴＣ（Indirect Branch Translator Caching）、ファスト・リターンが提案されている。
【００１５】
（フラグメントキャッシュ）
フラグメントキャッシュについて説明する。フラグメントキャッシュは、変換済みフラグメントがＣＰＵによって実行された後においても、当該変換済みフラグメントをメモリに保存して、ＳＤＴにおける変換処理の回数を削減する方式である（非特許文献１及び２参照）。
【００１６】
フラグメントキャッシュにおいては、ＳＤＴは、元コードにおけるフラグメントの開始アドレスと、保存された変換済みフラグメントの開始アドレスとを対応付けたテーブルをメモリに保存する。
【００１７】
ＳＤＴは、フラグメントを元コードから選択する際、テーブルに基づき、当該フラグメントの開始アドレスに対応する変換済みフラグメントを検索する。当該フラグメントの開始アドレスに対応する変換済みフラグメントが存在する場合、ＳＤＴは、プログラムカウンタに対し、当該変換済みフラグメントの開始アドレスを設定する。
【００１８】
この結果、元コード中のフラグメントに代えて、保存されている変換済みフラグメントが実行される。つまり、ＳＤＴは、フラグメントに対して変換処理を行えば、当該フラグメントに対する以降の変換処理を省略することができる。
【００１９】
しかし、フラグメントキャッシュでは、メモリに保存されている変換済みフラグメントにトランポリンコードが埋め込まれており、メモリに保存されている変換済みフラグメントが実行された場合においてもモードスイッチが発生する。
【００２０】
（フラグメントリンク）
次に、図３を用いて、フラグメントリンクについて説明する。フラグメントリンクは、フラグメントキャッシュによって保存された２つの変換済みフラグメントを分岐命令によって接続（リンク）し、当該２つの変換済みフラグメント間のＳＤＴコードを省略する方式である（非特許文献３及び４参照）。
【００２１】
図３（ａ）は元コードを示し、図３（ｂ）は、ＳＤＴによって生成された実行コードを示している。図３（ｃ）は、キャッシュからの実行時の実行コードを示している。
【００２２】
図３（ａ）の元コードでは、フラグメント１は、無条件直接分岐命令によってフラグメント２に分岐している。フラグメント２は、間接分岐命令によってフラグメント３に分岐している。フラグメント３は、条件直接分岐命令によってフラグメント４に分岐している。
【００２３】
なお、無条件直接分岐命令及び条件直接分岐命令では、命令内に分岐先が記述される。一方、間接分岐命令は、プログラムカウンタに分岐先アドレスを設定することで分岐し、実行前には分岐先を特定することが困難である。
【００２４】
上記のように、分岐先のフラグメントがキャッシュされているか否かは、元コードのアドレスに基づいて特定されるので、フラグメントリンクは、プログラム実行前に分岐先が特定可能な分岐命令によって接続されている２つのフラグメントにのみ適用可能である。つまり、フラグメントリンクは、直接分岐命令にのみ適用可能であり、間接分岐命令には適用することができない。
【００２５】
以下では、無条件直接分岐命令、及び条件直接分岐命令の場合に分けてフラグメントリンクについて説明する。
【００２６】
無条件直接分岐命令は、無条件に分岐するので、初回の変換処理時にリンク可能である。したがって、ステップＳ１１において、ＳＤＴは、フラグメント１を解析し、フラグメント１の分岐先としてフラグメント２を特定する。また、ＳＤＴは、フラグメント１及びフラグメント２を変換して、変換済みフラグメント１及び変換済みフラグメント２を生成及び保存する。
【００２７】
ＳＤＴは、変換済みフラグメント１に対し、トランポリンコードを除去し、変換済みフラグメント１の分岐先を変換済みフラグメント２の開始アドレスに書き換える。これにより、変換済みフラグメント１と変換済みフラグメント２との間においてＳＤＴコードを省略可能となり、変換済みフラグメント１と変換済みフラグメント２がモードスイッチ無しで実行される。
【００２８】
一方、条件直接分岐命令は、所定の条件が成立した場合にのみ分岐するので、分岐先のフラグメントが必ずしもキャッシュされるとは限らない。
【００２９】
ステップＳ１２において、ＳＤＴは、フラグメント３を解析し、フラグメント３の分岐先としてフラグメント４を特定する。しかし、元コードにおいてフラグメント３は、条件直接分岐命令によってフラグメント４に分岐しているため、フラグメント４が実行されるか否かは不明である。このため、フラグメント３及びフラグメント４は、初回実行時においてリンク不可能である。
【００３０】
一方、図３（ｃ）に示す２回目以降の実行時では、ステップＳ１３において、ＳＤＴは、フラグメント４がキャッシュされているか否かを判定する。フラグメント４がキャッシュされていれば、キャッシュされたフラグメント３におけるトランポリンコードを除去し、条件直接分岐命令の分岐先を、キャッシュされているフラグメント４の開始アドレスに置き換える。
【００３１】
以上のように、フラグメントリンクでは、直接分岐命令についてはキャッシュから次々と実行することにより、フラグメントがキャッシュされている場合に限り、モードスイッチに伴うオーバヘッドを削減可能となる。
【００３２】
（ＩＢＴＣ）
次に、図４を用いて、ＩＢＴＣについて説明する。ＩＢＴＣは、間接分岐命令に適用可能な方式である。ＩＢＴＣでは、分岐元及び分岐先の両フラグメントがキャッシュされている場合に、モードスイッチを省略可能とする（非特許文献３及び４参照）。
【００３３】
図４（ａ）は元コードを示し、図４（ｂ）は、ＳＤＴによって生成された実行コードを示している。図４（ｃ）は、キャッシュからの実行時の実行コードを示している。図４（ｄ）は、ＩＢＴＣにおいて用いられるＩＢＴＣテーブルを示す。
【００３４】
間接分岐命令の分岐先を知るためには、レジスタへのアドレス代入命令を検出しなければならないが、プログラムコード中のレジスタ代入文を検出することは困難である。このため、ＳＤＴは、間接分岐命令を末尾に有するフラグメントを実行する前に、当該フラグメントからの分岐先を特定することができない。
【００３５】
そこで、ＩＢＴＣでは、間接分岐命令の分岐先のフラグメントについてのキャッシュ上のアドレスが登録されたＩＢＴＣテーブルが利用される。具体的には、ＩＢＴＣテーブルには、エントリの識別子であるタグと、フラグメントに含まれる間接分岐命令の分岐先アドレス（ターゲット・アドレス（Target address））と、当該フラグメントのキャッシュ上のアドレス（フラグメント・キャッシュ・ロケーション（ＦＣＬ；Fragment cache location））とが登録される。
【００３６】
図４（ｂ）のステップＳ２１において、ＳＤＴは、間接分岐命令を末尾に有するフラグメント１を変換する際、ＩＢＴＣテーブル参照コードをフラグメント１に埋め込む。
【００３７】
ステップＳ２２において、ＩＢＴＣテーブル参照コードは、ターゲット・アドレスが判明した時点でＩＢＴＣテーブルを参照し、ターゲット・アドレスに対応するフラグメント・キャッシュ・ロケーションが登録されているか否かを判定する。ターゲット・アドレスに対応するフラグメント・キャッシュ・ロケーションが登録されていなければ、トランポリンコードによってＳＤＴコードに実行対象が移る。
【００３８】
ステップＳ２３において、ＳＤＴは、分岐先のフラグメント２を変換し、ＩＢＴＣテーブルにフラグメント・キャッシュ・ロケーションを登録する。
【００３９】
一方、キャッシュからの実行時では、図４（ｃ）のステップＳ２４において、ＩＢＴＣテーブル参照コードは、ターゲット・アドレスに対応するフラグメント・キャッシュ・ロケーションがＩＢＴＣテーブルに登録されていると判定する。この場合、ＩＢＴＣテーブル参照コードは、ターゲット・アドレスに対応するフラグメント・キャッシュ・ロケーションによって特定されるキャッシュ上のフラグメントに直接分岐する。
【００４０】
このように、ターゲット・アドレスに対応するフラグメント・キャッシュ・ロケーションがＩＢＴＣテーブルに登録されている場合において、モードスイッチに伴うオーバヘッドを削減可能となる。
【００４１】
なお、間接分岐命令には、無条件間接分岐命令と条件間接分岐命令とがある。ＩＢＴＣテーブルには複数の分岐先を登録できるため、条件間接分岐命令において間接分岐命令が実行されない場合の元コードのアドレス（つまり、当該間接分岐命令の次のアドレス）をＩＢＴＣテーブルに登録しておけば、無条件間接分岐命令及び条件間接分岐命令に適用可能である。
【００４２】
ＩＢＴＣでは、ＩＢＴＣテーブルのエントリ数が多ければ（キャッシュの容量が大きければ）、ターゲット・アドレスに対応するフラグメント・キャッシュ・ロケーションがＩＢＴＣテーブルに登録されていない確率を０にすることができる。
【００４３】
（ファスト・リターン）
次に、図５を用いて、ファスト・リターン（Fast Return）について説明する。ファスト・リターンは、間接分岐命令の１つであるリターン命令に適用される方式である（非特許文献４参照）。リターン命令では、アーキテクチャ依存ではあるが、分岐先（リターン・アドレス）をレジスタに代入する命令の検出が容易である。
【００４４】
ファスト・リターンでは、リターン命令の分岐先がキャッシュされている場合、当該リターン命令を書き換え、キャッシュ上のアドレスをリターン・アドレスとしてレジスタに格納する。これにより、リターン命令によって接続される２つのフラグメントは、キャッシュにおいて一意に接続されるため、フラグメントリンクと同等の効果が得られる。
【００４５】
図５（ａ）は元コードを示し、図５（ｂ）は、ファスト・リターンが適用されない実行コードを示し、図５（ｃ）は、ファスト・リターンが適用される実行コードを示している。
【００４６】
元コードにおいては、フラグメント１及び２が直接分岐命令の関数コールによって接続され、フラグメント２及び３が間接分岐命令のリターン命令によって接続されている。
【００４７】
図５（ｂ）に示すように、ファスト・リターン無しの場合、フラグメント１及び２にはフラグメントリンクが適用され、フラグメント２及び３にはＩＢＴＣが適用される。
【００４８】
一方、図５（ｃ）に示すように、ファスト・リターンでは、フラグメント２におけるリターン・アドレスを書き換えることにより、ＩＢＴＣテーブル参照コードを挿入する必要がない。したがって、ＩＢＴＣテーブル参照処理を省略可能であるため、ＩＢＴＣよりもオーバヘッドを削減可能となる。
【００４９】
しかし、リターン・アドレスの格納に使用されるレジスタが汎用用途として用いられるＣＰＵアーキテクチャにおいては、リターン・アドレスを格納する命令を一意に特定できないために、ファスト・リターンを適用することができない。
【非特許文献１】K. Scott and J Davidson, “Strata: A software dynamic translation infrastructure”, In Proc. of Workshop on Binary Translation 2001.
【非特許文献２】K. Scott, S. Vulusamy, B. Childers, J Davidson, and M. Soffa, “Rerargetable and Reconfigurable software dynamic translation”, In Proc. of Internation Symposium on Code Generation and Optimization 2003.
【非特許文献３】V. Kiriansky, D. Bruening, and S. Amarasinghe, “Secure Execution Via Program Shepherding”, In Proc. of Usenix Security 2002.
【非特許文献４】K. Scott, N. Kumar, B. Childers, J Davidson, and M. Soffa, “Overhead Reduction Techniques for Software Dynamic Translation”, In Proc. of Parallel and Distributed Processing Symposium 2004.
【発明の開示】
【発明が解決しようとする課題】
【００５０】
図６は、上述した既存技術の効果、適用条件、及び問題点をまとめた表である。上述したフラグメントリンク、ＩＢＴＣ、及びファスト・リターンは、フラグメントキャッシュを前提としている。
【００５１】
しかしながら、必ずしもすべてのフラグメントが常にキャッシュされているとは限らない。このため、プログラムコードが最初に実行される場合や、キャッシュがオーバフローした場合において、キャッシュミスが発生し、変換処理やモードスイッチを省略できなくなる。特に、メモリ容量が限られる携帯端末などでは、キャッシュミスの発生が顕著になる。
【００５２】
ところで、キャッシュミス時のオーバヘッドは、変換処理を省略することによって、ある程度抑えることが可能である。このため、図７に示すように、あらかじめプログラムコードを解析することによって、変換が必要なフラグメントと変換が不要なフラグメントとに分類することが考えられる。
【００５３】
これにより、プログラムコード実行時には、変換が必要なフラグメントに対してのみ変換処理を行い、変換が不要なフラグメントについての変換処理を省略することができる。変換が必要な一部のフラグメントに対してのみ変換済みフラグメントを生成する方式を「一部生成方式」と呼ぶ。
【００５４】
図８は、既存方式のオーバヘッドと、一部生成方式のオーバヘッドとを比較したグラフである。ここでは、ＳＤＴを利用してシステムコールのサンドボックスを実現するような場合を想定した。この場合、システムコールである可能性を有するすべての分岐命令を変換する必要があるので、変換が不要なフラグメントは、間接分岐命令を含むフラグメントということになる。
【００５５】
なお、図８では、ネイティブ実行時（ＳＤＴを使用しない場合）に対してＳＤＴ実行により追加で発生する命令数のオーバヘッドを表しており、横軸は元コードのコードサイズに対するキャッシュ容量の割合を示している。図８に示すように、一部生成方式では、既存方式で発生していたオーバヘッドを半分程度まで削減可能である。
【００５６】
しかしながら、変換が不要なフラグメントについての変換処理を省略すると、当該フラグメントがキャッシュされないので、既存技術のようにキャッシュされた２つのフラグメントを接続することができなくなる。したがって、変換が不要なフラグメントの変換処理を省略する場合に、モードスイッチの発生回数を削減することができない。
【００５７】
図９は、既存方式のモードスイッチ発生率と、一部生成方式のモードスイッチ発生率とを比較したグラフである。図９に示すように、一部生成方式は、既存方式よりもモードスイッチ発生率が高いことが分かる。
【００５８】
以上のように、一部生成方式においては、オーバヘッドを削減する点において、さらに改善の余地があった。
【００５９】
そこで、本発明は、上述した課題を解決するためになされたものであり、一部生成方式において、オーバヘッドをさらに削減することが可能なコード変換装置及びコード変換方法を提供することを目的とする。
【課題を解決するための手段】
【００６０】
本発明の第１の特徴は、複数の命令を含むプログラムコードを解析するとともに、解析した前記プログラムコードを変換するコード変換装置（コード変換装置１００Ａ，１００Ｂ，１００Ｃ）であって、各命令の解析が不要な第１コードと、各命令の解析が必要な第２コードとの分類に用いられる第１解析情報を記憶する解析情報記憶部（解析情報記憶部２０）と、前記プログラムコードの一部である解析候補コードを選択し、前記第１解析情報に基づいて、前記解析候補コードを前記第１コード又は前記第２コードのいずれかに分類する解析候補特定部（解析候補特定部１１０）と、前記第２コードを解析し、前記第２コードの次に実行されるコードを示す第２解析情報を生成するコード解析部（コード解析部１２０）と、前記コード解析部による解析結果に基づき、前記第２コードを変換して変換済みコードを生成するコード変換部（コード変換部１３０）と、前記第１コード又は前記変換済みコードへ実行対象を切り替える切り替え部（切り替え部１４０）とを備え、前記切り替え部は、前記第１コードが実行された場合に前記切り替え部へ前記実行対象を切り替える命令である第１制御移動命令を、前記第１コードに埋め込み、前記コード変換部は、前記第２解析情報に基づいて、前記第２コードが実行された場合に所定のコードへ前記実行対象を切り替える命令である第２制御移動命令を、前記変換済みコードに埋め込むことを要旨とする。
【００６１】
このような特徴によれば、解析及び変換が不要なフラグメントについての変換処理を省略することができるので、変換処理に要するオーバヘッドを削減することができる。
【００６２】
また、第１コードに対しては、第１コードが実行された場合に切り替え部へ実行対象を切り替える命令である第１制御移動命令が埋め込まれる。これにより、実行対象をコード変換装置に戻すことができ、第１コードに対する変換処理を省略しつつ、第１コードの次のコードに対しては変換処理を施すことが可能となる。
【００６３】
さらに、変換済みコードに対しては、変換済みコードが実行された場合に第２解析情報に応じたコードへ実行対象を切り替える命令である第２制御移動命令が埋め込まれる。
【００６４】
すなわち、変換済みコードの次に実行されるコードに応じて実行対象を切り替えることによって、変換済みコードの次に第１コード又は変換済みコードが実行される場合には、実行対象をコード変換装置に戻すことがない。
【００６５】
したがって、モードスイッチ発生率を減少させることができるので、一部生成方式において、オーバヘッドをさらに削減することが可能なコード変換装置を提供することができる。
【００６６】
本発明の第２の特徴は、本発明の第１の特徴に係り、前記変換済みコードを記憶する変換済みコード記憶部（変換済みコード記憶部７０）と、前記プログラムコードにおける前記第２コードを特定する情報と、前記変換済みコード記憶部に記憶された前記変換済みコードを特定する情報とを対応付けた第１コード変換情報を記憶するコード変換情報記憶部（コード変換情報記憶部６０）とをさらに備え、前記解析候補特定部は、前記第１コード変換情報に基づき、前記変換済みコード記憶部に記憶された前記変換済みコードに対応する前記プログラムコード中の前記第２コードを前記解析候補コードから除外することを要旨とする。
【００６７】
本発明の第３の特徴は、本発明の第２の特徴に係り、前記変換済みコード記憶部は、前記変換済みコードに加えて、前記解析候補特定部によって分類された前記第１コードを記憶し、前記コード変換情報記憶部は、前記プログラムコードにおける前記第１コードを特定する情報と、前記変換済みコード記憶部に記憶された前記第１コードを特定する情報とを対応付けた第２コード変換情報をさらに記憶し、前記第２コード変換情報に基づき、前記プログラムコード中の前記第１コードに代えて、前記変換済みコード記憶部に記憶された前記第１コードが実行されることを要旨とする。
【００６８】
本発明の第４の特徴は、本発明の第１の特徴に係り、前記第１制御移動命令又は前記第２制御移動命令が埋め込まれたアドレスを、前記プログラムコードにおいて最後に実行されたコードを示す第１コンテキスト情報として記憶するコンテキスト情報記憶部（コンテキスト情報記憶部４０）をさらに備え、前記切り替え部は、前記第１制御移動命令又は前記第２制御移動命令によって前記切り替え部に前記実行対象が切り替った場合、前記第１コンテキスト情報を前記解析候補特定部に出力し、前記解析候補特定部は、前記切り替え部によって出力された前記第１コンテキスト情報に基づいて、前記プログラムコードにおいて次に実行されるべきコードを特定し、特定したコードを前記解析候補コードとして選択することを要旨とする。
【００６９】
本発明の第５の特徴は、本発明の第４の特徴に係り、前記解析候補特定部は、実行されると無条件に前記実行対象を分岐先に切り替える命令である無条件分岐命令を区切りとして前記プログラムコードを複数のコードに分割し、前記複数のコードのいずれかを前記解析候補コードとして選択し、前記解析候補コードの末尾には、前記無条件分岐命令が存在しており、前記切り替え部は、前記解析候補コードが前記第１コードである場合、前記第１コードの末尾の前記無条件分岐命令を前記第１制御移動命令に置き換え、前記コンテキスト情報記憶部は、前記第１コードの末尾に存在する前記無条件分岐命令の分岐先を示す第２コンテキスト情報をさらに記憶し、前記切り替え部は、前記第１制御移動命令によって前記切り替え部に制御が切り替った場合、前記コンテキスト情報記憶部に記憶された前記第２コンテキスト情報を前記解析候補特定部に出力し、前記解析候補特定部は、前記切り替え部によって出力された前記第２コンテキスト情報に基づいて、前記プログラムコードにおいて次に実行されるべきコードを特定し、特定したコードを前記解析候補コードとして選択することを要旨とする。
【００７０】
本発明の第６の特徴は、本発明の第２の特徴に係り、前記切り替え部は、前記第１制御移動命令によって前記切り替え部に前記実行対象が切り替った場合、前記第１制御移動命令を前記変換済みコード記憶部に記憶された前記変換済みコードへの分岐命令に置き換え、前記変換済みコードへの分岐命令を含む前記第１コードを特定する情報を前記第１解析情報から削除することを要旨とする。
【００７１】
本発明の第７の特徴は、本発明の第１の特徴に係り、前記コード解析部は、前記第２コードに含まれる分岐命令を検出し、前記第２解析情報は、前記第２コードに含まれる前記分岐命令を特定する情報を含み、前記コード変換部は、前記第２解析情報に基づいて、前記第２コードに含まれる前記分岐命令の分岐先へ前記実行対象を切り替える前記第２制御移動命令を前記変換済みコードに埋め込むことを要旨とする。ここで、第２解析情報は、分岐命令のアドレスや種類の情報を含む。
【００７２】
本発明の第８の特徴は、本発明の第７の特徴に係り、前記第２解析情報は、前記第２コードに含まれる前記分岐命令の分岐先が前記第１コードであるか否かを示す情報を含み、前記コード変換部は、前記第２解析情報に基づき、前記第２コードに含まれる前記分岐命令の分岐先が前記第１コードであると判定される場合、前記第１コードへの分岐命令を前記第２制御移動命令として前記変換済みコードに埋め込むことを要旨とする。
【００７３】
本発明の第９の特徴は、本発明の第２の特徴に係り、前記第２解析情報は、前記第２コードに含まれる分岐命令の分岐先が前記第１コード変換情報に登録されているか否かを示す情報を含み、前記コード変換部は、前記第２解析情報に基づき、前記第２コードに含まれる前記分岐命令の分岐先が前記第１コード変換情報に登録されていると判定される場合、前記変換済みコードへの分岐命令を前記第２制御移動命令として前記変換済みコードに埋め込むことを要旨とする。
【００７４】
本発明の第１０の特徴は、本発明の第７の特徴に係り、前記コード変換部は、前記第２解析情報に基づき、前記第２コードに含まれる前記分岐命令の分岐先が特定不可能である、又は前記第２コードに含まれる前記分岐命令の分岐先が前記第２コードであると判定される場合、前記切り替え部へ前記実行対象を切り替える命令を前記第２制御移動命令として前記変換済みコードに埋め込むことを要旨とする。
【００７５】
本発明の第１１の特徴は、本発明の第７の特徴に係り、前記第２解析情報は、前記第２コードに含まれる分岐命令が、実行されると所定の条件が成立した場合に限り分岐する命令である条件分岐命令であるか否かを示す情報を含み、前記コード変換部は、前記第２解析情報に基づき、前記第２コードに前記条件分岐命令が含まれると判定される場合、前記条件分岐命令が実行されたか否かを判定する判定コードを前記変換済みコードに埋め込み、前記切り替え部は、前記第１制御移動命令又は前記第２制御移動命令によって前記切り替え部に前記実行対象が切り替った場合に、前記判定コードの判定結果に基づき、前記条件分岐命令が実行されたか否かを特定することを要旨とする。
【００７６】
本発明の第１２の特徴は、本発明の第１の特徴に係り、前記プログラムコードをあらかじめ解析することによって前記第１解析情報を生成する解析情報生成部（解析情報生成部１５０）をさらに備え、前記解析情報記憶部は、前記解析情報生成部によって生成された前記第１解析情報を記憶することを要旨とする。
【００７７】
本発明の第１３の特徴は、本発明の第１２の特徴に係り、前記解析情報生成部は、実行されると無条件に分岐する命令である無条件分岐命令を区切りとして前記プログラムコードを複数のブロックに分割し、分岐先の特定可能な前記無条件分岐命令によって連結される複数のブロックを前記第１コードとして特定し、特定された前記第１コードを示す情報を前記第１解析情報として前記解析情報記憶部に格納することを要旨とする。
【００７８】
本発明の第１４の特徴は、本発明の第１３の特徴に係り、前記解析情報生成部は、前記特定された第１コードの開始アドレスが、分岐先が一意に特定されない分岐命令の分岐先アドレスに該当する場合に限り、前記第１解析情報として前記解析情報記憶部に格納することを要旨とする。
【００７９】
本発明の第１５の特徴は、本発明の第１３の特徴に係り、前記解析情報生成部は、前記プログラムコードの一部のみを前記複数のブロックに分割することを要旨とする。
【００８０】
本発明の第１６の特徴は、本発明の第１５の特徴に係り、前記解析情報生成部は、前記プログラムコードに含まれるデータを除去し、データが除去されたプログラムコードを前記複数のブロックに分割することを要旨とする。
【００８１】
本発明の第１７の特徴は、本発明の第２の特徴に係り、前記変換済みコード及び前記第１コード変換情報を、前記プログラムコードが次回実行されるまで保持する保持部と、前記プログラムコードの次回実行時において、前記保持部に保持されている前記変換済みコード及び前記第１コード変換情報を復元するコード復元部とをさらに備えることを要旨とする。
【００８２】
本発明の第１８の特徴は、本発明の第１７の特徴に係り、前記コード復元部は、前記変換済みコードが前記保持部に格納される際に、前記変換済みコードの改ざん検出に用いる電子署名を前記変換済みコードに付加し、前記保持部に保持されている前記変換済みコードを前記保持部から読み出す際に、前記電子署名を用いて前記変換済みコードの改ざんを検出することを要旨とする。
【００８３】
本発明の第１９の特徴は、複数の命令を含むプログラムコードを解析するとともに、解析した前記プログラムコードを変換するコード変換方法であって、前記プログラムコードの一部である解析候補コードを選択し、各命令の解析が不要な第１コードと、各命令の解析が必要な第２コードとの分類に用いられる第１解析情報に基づいて、前記解析候補コードを前記第１コード又は前記第２コードのいずれかに分類するステップと、前記第２コードを解析し、前記第２コードの次に実行されるコードを示す第２解析情報を生成するステップと、前記第２コードに対する解析結果に基づき、前記第２コードを変換して変換済みコードを生成するステップと、前記第１コード又は前記変換済みコードへ実行対象を切り替えるステップとを備え、前記切り替えるステップでは、前記第１コードが実行された場合に前記切り替えるステップへ前記実行対象を切り替える命令である第１制御移動命令を、前記第１コードに埋め込み、前記変換済みコードを生成するステップでは、前記第２解析情報に基づいて、前記第２コードが実行された場合に所定のコードへ前記実行対象を切り替える命令である第２制御移動命令を、前記変換済みコードに埋め込むことを要旨とする。
【発明の効果】
【００８４】
本発明によれば、一部生成方式において、オーバヘッドをさらに削減することが可能なコード変換装置及びコード変換方法を提供することができる。
【発明を実施するための最良の形態】
【００８５】
次に、図面を参照して、本発明の第１〜第３実施形態を説明する。以下の第１〜第３実施形態における図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。
【００８６】
[第１実施形態]
（コード変換装置の構成）
まず、本実施形態に係るコード変換装置の構成について説明する。図１０は、本実施形態に係るコード変換装置１００Ａの機能ブロック構成図である。
【００８７】
コード変換装置１００Ａを構成する各機能ブロックは、ＣＰＵ及びメモリを含む計算機によって実現される。また、ＣＰＵの実行対象は、コード変換装置１００Ａの実行コード（ＳＤＴコード）、及びプログラムコードの実行コードである。
【００８８】
図１０に示すように、コード変換装置１００Ａは、プログラムコード記憶部１０、解析情報記憶部２０、コンテキスト情報記憶部４０、コード変換情報記憶部６０、変換済みコード記憶部７０、解析候補特定部１１０、コード解析部１２０、コード変換部１３０、及び切り替え部１４０を備える。
【００８９】
プログラムコード記憶部１０、解析情報記憶部２０、コンテキスト情報記憶部４０、コード変換情報記憶部６０、変換済みコード記憶部７０は、例えばメモリ内に構成される。
【００９０】
コード変換装置１００Ａは、プログラム実行順にプログラムコード記憶部１０から部分的なプログラムコードを順次読み出し、読み出したプログラムコードを必要に応じて解析及び変換し、変換済みコードを変換済みコード記憶部７０に格納する。
【００９１】
プログラムコード記憶部１０は、複数の命令を含むプログラムコード（元コード）を記憶する。
【００９２】
解析候補特定部１１０は、元コードの一部である解析候補コードを選択する。解析候補コードとは、コード変換装置１００Ａによる解析及び変換の対象となるコードである。
【００９３】
具体的には、解析候補特定部１１０は、コード変換情報記憶部６０に記憶されているコード変換情報に基づいて、解析候補コードを選択する。ここで、解析候補コードではないコードは、変換済みコード記憶部７０に格納された変換済みコードに対応するコードである。
【００９４】
また、コード変換情報は、元コードにおける第２コードの開始アドレスと、変換済みコード記憶部７０に記憶された変換済みコードの開始アドレスとを対応付けた情報である。すなわち、コード変換情報は、上述したフラグメントキャッシュにおけるテーブルと同様にして構成される。
【００９５】
さらに、解析候補特定部１１０は、解析情報記憶部２０に記憶されている第１解析情報に基づいて、解析候補コードを分類する。
【００９６】
第１解析情報は、各命令の解析が不要な第１コードと、各命令の解析が必要な第２コードとの分類に用いられる情報である。具体的には、第１解析情報は、元コードに含まれる各第１コードの開始アドレス及び終了アドレスを特定する情報である。
【００９７】
ここで、第１コードとは、一意の順序で連続して実行される命令群である。具体的には、第１コードに含まれる分岐命令は、無条件の直接分岐命令のみである。
【００９８】
第２コードとは、分岐先が一意に特定されない分岐命令、又は実行されるか否かが特定されない分岐命令を含む命令群である。具体的には、第２コードは、間接分岐命令又は条件分岐命令（条件直接分岐命令）の少なくとも一方を含む。
【００９９】
第１解析情報には、元コードに含まれる各第１コードの開始アドレス及び終了アドレスの情報が含まれている。解析候補特定部１１０は、第１解析情報を用いて、解析候補コードを第１コード又は第２コードのいずれかに分類する。
【０１００】
コード解析部１２０は、第２コードを解析し、第２コードの次に実行されるコードを示す第２解析情報を生成する。具体的には、コード解析部１２０は、解析候補コードに含まれる分岐命令を解析する。第２解析情報は、第２コードに含まれるすべての分岐命令を特定する情報（アドレス）と、第２コードの開始アドレスと、第２コードの終了アドレスの情報を含む。
【０１０１】
コード変換部１３０は、コード解析部１２０による解析結果に基づき、第２コードを変換して変換済みコードを生成する。具体的には、コード変換部１３０は、コード解析部１２０の解析結果に応じて、第２コードに含まれる命令の変換、解析候補コードに含まれる命令の削除、又は新規命令の追加を行う（図２参照）。
【０１０２】
切り替え部１４０は、第１コード又は変換済みコードへ実行対象を切り替える。実行対象とは、ＣＰＵが実行すべきメモリのアドレスであり、具体的には、プログラムカウンタの値である。
【０１０３】
切り替え部１４０の処理内容としては、次の（１）〜（３）のケースがある。
【０１０４】
（１）解析候補コードでないコードについては、切り替え部１４０は、ＣＰＵのレジスタの退避及び復元など、モードスイッチに必要な処理を実行する。具体的には、解析候補特定部１１０によって解析候補コードでないコードが検出されると、切り替え部１４０は、当該コードに対応する変換済みコードのアドレスへ実行対象を切り替える。
【０１０５】
（２）第１コードについては、切り替え部１４０は、第１コードの末尾に第１制御移動命令を埋め込む。第１制御移動命令は、第１コードが実行された場合に切り替え部１４０へ実行対象を切り替える命令であり、分岐命令の一種である。具体的には、第１制御移動命令の分岐先は、切り替え部１４０の実行コードの開始アドレスである。
【０１０６】
（３）第２コードについては、切り替え部１４０は、第２コードの末尾に第２制御移動命令を埋め込む。第２制御移動命令は、第２コードが実行された場合に所定のコードへ実行対象を切り替える命令である。第２制御移動命令の分岐先は、第２解析情報によって特定される。
【０１０７】
実行対象がプログラムコードに切り替ると、第１制御移動命令又は第２制御移動命令によって再び切り替え部１４０に実行対象が切り替る。
【０１０８】
切り替え部１４０に実行対象が切り替ると、切り替え部１４０は、元コードにおいて次に実行されるアドレスを特定し、特定したアドレスを解析候補特定部１１０に渡す。また、切り替え部１４０は、第１制御移動命令又は第２制御移動命令が埋め込まれたアドレスをコンテキスト情報としてコンテキスト情報記憶部４０に格納する。
【０１０９】
この結果、解析候補特定部１１０が解析候補とするコードを選択可能となるので、元コードは、本来の実行順に、変換及び実行されることとなる。
【０１１０】
（コード変換装置の概略動作）
次に、コード変換装置１００Ａの概略動作について説明する。図１１は、第１コード及び変換済みフラグメントがＣＰＵによって実行される過程を示す図である。
【０１１１】
図１１（ａ）は、元コードを命令実行順に並べた図である。図１１（ｂ）は、解析情報記憶部２０に記憶される第１解析情報を示している。図１１（ｃ）は、コード変換装置１００Ａによって生成された解析済みコードを示している。
【０１１２】
図１１（ａ）では、元コードは、３つの第１コードＡ，Ｃ，Ｆを含み、３つの第２コードＢ，Ｄ，Ｅを含んでいる。各コードＡ〜Ｆは、１つ以上の命令によって構成され、各コードＡ〜Ｆの終了アドレスは分岐命令である。
【０１１３】
第１コードＡ，Ｃ，Ｆにおいては、終了アドレスに存在する分岐命令は、無条件の直接分岐命令である。また、第１コードＡ，Ｃ，Ｆに含まれる分岐命令は、無条件の直接分岐命令のみである。
【０１１４】
図１１（ｂ）に示すように、第１解析情報は、第１コードＡ，Ｃ，Ｆを識別する識別情報と、第１コードＡ，Ｃ，Ｆの開始アドレス及び終了アドレスとを対応付けた情報となる。
【０１１５】
図１１（ｃ）に示すように、コード変換装置１００Ａは、プログラムコードの初回実行時において、第２コードＢ，Ｄ，Ｅを解析するとともに変換し、変換済みフラグメントＢ’，Ｄ’，Ｅ’を変換済みコード記憶部７０に格納する。
【０１１６】
また、コード変換装置１００Ａは、２回目以降にプログラムコードを実行する際には、コードＡ，Ｂ’，Ｃ，Ｄ’，Ｅ’，Ｆの順に各コードを実行する。
【０１１７】
（コード変換装置の詳細動作）
次に、図１２〜図１８を用いて、コード変換装置１００Ａの詳細動作について説明する。具体的には、（１）第１コード実行時におけるコード変換装置の動作、（２）第２コード実行時におけるコード変換装置の動作、（３）第２コード実行時におけるコード変換装置の詳細動作について説明する。
【０１１８】
（１）第１コード実行時におけるコード変換装置の動作
まず、図１２を用いて、第１コード実行時におけるコード変換装置１００Ａの動作について説明する。ここでは、コード変換装置１００Ａは、開始アドレスａから第１コードであるコードＡ（第１コードＡ）を実行する場合について説明する。
【０１１９】
解析候補特定部１１０は、第１解析情報に基づき、第１コードＡの開始アドレスａと、第１コードＡの終了アドレスｂとを特定する。また、切り替え部１４０は、第１コードＡの終了アドレスｂの無条件分岐命令を第１制御移動命令に置き換える。そして、切り替え部１４０は、実行対象をアドレスａに切り替える。
【０１２０】
第１コードＡが開始アドレスａから終了アドレスｂまで実行されると、第１制御移動命令が実行されて、切り替え部１４０に制御が切り替る。第１コード中の第１制御移動命令によって切り替え部１４０に制御が切り替ると、元コード用のレジスタなどのコンテキスト情報をコンテキスト情報記憶部４０に格納（退避）する。
【０１２１】
なお、第１制御移動命令によって切り替え部１４０に実行対象が切り替った場合、次に実行されるのは第２コードである。
【０１２２】
（２）第２コード実行時におけるコード変換装置の動作
次に、図１３を用いて、第１制御移動命令によって切り替え部１４０に実行対象が切り替った後において、コード変換装置１００Ａが第２コードであるコードＢ（第２コードＢ）を変換する動作について説明する。
【０１２３】
切り替え部１４０は、第１コードＡの終了アドレスｂに元々存在していた無条件分岐命令の分岐先アドレスに基づいて、次に元コードにおいて実行されるアドレスｃを特定し、特定したアドレスｃを解析候補特定部１１０に通知する。アドレスｃを開始アドレスとするコードは、コード変換情報に登録されておらず、第１解析情報にも登録されていないので、第２コードであると判定される。コード解析部１２０は、アドレスｃから第２コードＢに含まれる各命令を解析し、分岐命令の検出、及び終了アドレスの特定を行う。
【０１２４】
なお、終了アドレスｄは、第２コードＢにおける唯一の無条件分岐命令である。当該無条件分岐命令は、直接分岐命令であっても間接分岐命令であってもよいが、第２コードは、必ず間接分岐命令又は条件分岐命令を含む。このため、第２コードの末尾が無条件直接分岐命令である場合には、第２コードの中に条件直接分岐命令又は条件間接分岐命令が含まれることになる。
【０１２５】
コード変換部１３０は、第２解析情報に基づき、第２コードＢを変換する。また、コード変換部１３０は、解析済みコードＢ’を解析済みコード記憶部７０に格納するとともに、解析済みコード記憶部７０における解析済みコードＢ’の位置を特定する情報（ここでは、開始アドレスｃ’、終了アドレスｄ’）とをコード変換情報記憶部６０に格納する。
【０１２６】
切り替え部１４０は、現在のアドレスｂに埋め込まれている第１制御移動命令を、アドレスｃ’への分岐命令に置き換える。
【０１２７】
切り替え部１４０は、解析済みコードＢ’の開始アドレスｃ’へ実行対象を切り替える。これにより、次に第１コードＡ及び第２コードＢが連続して実行される場合には、アドレスａからアドレスｂまで実行された後、アドレスｃ’が実行される。したがって、初回実行時に発生していたアドレスｂとアドレスｃとにおけるモードスイッチを省略することが可能となる。
【０１２８】
（３）第２コード実行時におけるコード変換装置の詳細動作
第２コードＢにおける分岐元及び分岐先としては、以下の６つのパターンが考えられる。
【０１２９】
・パターン１：無条件直接分岐命令（アドレスｄ）から第１コードへ分岐
・パターン２：無条件直接分岐命令（アドレスｄ）から第２コードへ分岐
・パターン３：無条件間接分岐命令（アドレスｄ）から分岐
・パターン４：条件直接分岐命令（アドレスｃ、ｄ以外）から第１コードへ分岐
・パターン５：条件直接分岐命令（アドレスｃ、ｄ以外）から第２コードへ分岐
・パターン６：条件間接分岐命令（アドレスｃ、ｄ以外）から分岐
実際には、変換済みコードへの分岐というパターンも存在するが、変換済みコードへの分岐は、第２コードへの分岐として扱うことが可能である。
【０１３０】
以下において、上記パターン１〜パターン６におけるコード変換装置１００Ａの詳細動作について説明する。
【０１３１】
（３．１）パターン１
パターン１（無条件直接分岐命令から第１コードへ分岐する場合）について説明する。図１４は、パターン１におけるコード変換装置１００Ａの動作を説明するための図である。
【０１３２】
コード変換部１３０は、変換済みコードＢ’の末尾、すなわちアドレスｄ’を第２制御移動命令に置き換える。ここで、アドレスｄは元々直接分岐命令であるために、分岐先は一意に特定可能である。したがって、アドレスｄ’の第２制御移動命令の分岐先をアドレスｅとする。
【０１３３】
切り替え部１４０は、第１コードＡの終了アドレスｂの分岐命令をアドレスｃ’への分岐命令に置き換える。
【０１３４】
切り替え部１４０は、分岐先の第１コードであるコードＣ（第１コードＣ）の末尾を第１制御移動命令に置き換える。
【０１３５】
切り替え部１４０は、アドレスｃ’へ制御を移動し、元コードの実行が再開される。
【０１３６】
（３．２）パターン２
パターン２（無条件直接分岐命令から第２コードへ分岐する場合）について説明する。図１５は、パターン２におけるコード変換装置１００Ａの動作を説明するための図である。
【０１３７】
コード変換部１３０は、変換済みコードＢ’の終了アドレスｄ’に第２制御移動命令を埋め込む。第２コードＢの終了アドレスｄ’に存在する直接分岐命令の分岐先は一意に特定可能である。
【０１３８】
コード解析部１２０は、アドレスｅから始まるコードＣを解析する。コード変換部１３０は、解析済みコードＣ’を生成する。
【０１３９】
切り替え部１４０は、第１コードＡの終了アドレスｂの分岐先をアドレスｃ’に置き換える。その後、実行対象がアドレスｃ’に移動する。
【０１４０】
（３．３）パターン３
パターン３（無条件間接分岐命令から分岐）について説明する。図１６は、パターン３におけるコード変換装置１００Ａの動作を説明するための図である。
【０１４１】
無条件間接分岐命令は、実行されるまで分岐先が特定できないので、第２制御移動命令として上述したＩＢＴＣテーブル参照コードが埋め込まれる。
【０１４２】
切り替え部１４０は、アドレスｂの分岐先をアドレスｃ’に置き換える。
【０１４３】
その後、実行対象がアドレスｃ’に移動する（モードスイッチ）。
【０１４４】
モードスイッチ後のＩＢＴＣテーブル参照コードの実行について説明する。例えば、アドレスｄの間接分岐命令の分岐先が第１コードＣ又は第２コードＤであるとする。
【０１４５】
ＩＢＴＣテーブル参照コードは、アドレスｄの間接分岐命令まで実行された時点で、ターゲット・アドレスをＩＢＴＣテーブルから検索する。初回実行時には、ＩＢＴＣテーブルは空であるため、切り替え部１４０に切り替えが発生する。
【０１４６】
この時点では、分岐先が特定可能であるため、直接分岐命令と同様の処理を行えばよい。すなわち、分岐先のアドレスがｅであれば、分岐先が第１コードであるので、上述したようにアドレスｅへ実行対象が移り、当該第１コードの終了アドレスに第１制御移動命令が埋め込まれる。この場合、ＩＢＴＣテーブルのターゲット・アドレス及びフラグメント・キャッシュ・ロケーションには共にアドレスｅが登録される。
【０１４７】
また、分岐先のアドレスがfであれば、第２コードＤの変換が行われる。この場合、ターゲット・アドレスとしてｆ、フラグメント・キャッシュ・ロケーションにはｆ’が登録される。
【０１４８】
これにより、２回目実行時において、ＩＢＴＣテーブル参照コードは、間接分岐命令がアドレスｅへ分岐する場合には、そのままアドレスｅへ実行対象が移される。また、２回目実行時において、ＩＢＴＣテーブル参照コードは、間接分岐命令がアドレスｆへ分岐する場合には、そのままアドレスｆ’へ実行対象が移される。したがって、２回目以降のモードスイッチを削減することが可能となる。
【０１４９】
（３．４）パターン４、パターン５
パターン４（条件直接分岐命令から第１コード又は第２コードへ分岐）について説明する。図１７は、パターン４、パターン５におけるコード変換装置１００Ａの動作を説明するための図である。ここでは、第２コードＢにおける分岐元の条件直接分岐命令のアドレスをｇ、アドレスｇに対応する変換済みコードＢ’のアドレスをｇ’とする。
【０１５０】
コード変換部１３０は、条件直接分岐命令が存在するアドレスｇ’の直後に判定コードを挿入する。判定コードは、当該コードが実行されたか否かを判定するコードである。例えば、判定コードが実行されると、判定コードは、メモリにおける特定のフラグを書き換えるといった処理を行う。
【０１５１】
元コードのアドレスｇに存在する分岐命令の分岐先がアドレスｅである場合、特に分岐命令を書き換えないので、アドレスｇ’に存在する分岐命令の分岐先もアドレスｅである。アドレスｅから始まるコードは第１コードであるため、切り替え部１４０は、当該第１コードに第１制御移動命令を埋め込む。
【０１５２】
次に、アドレスｆから始まる第２コードが変換される。その後、アドレスｃ’へ切り替えるための分岐命令がアドレスｂに書き込まれる。最後に、アドレスｃ’へ実行対象が移される。
【０１５３】
以上のようにして、条件分岐命令実行時のモードスイッチ発生を抑制することができる。また、条件分岐命令の実行の有無にかかわらず、第１制御移動命令又は第２制御移動命令によって切り替え部１４０に実行対象が切り替る。
【０１５４】
そして、切り替え部１４０は、判定コードの実行結果を参照することで、条件分岐命令が実行されたか否かを特定可能であり、次に実行されるべき元コード上のアドレスも特定可能となる。また、２回目実行時においては、分岐命令が書き換えられ、モードスイッチを削減することができる。
【０１５５】
なお、条件分岐命令の分岐先が第２コードであった場合であっても、判定コードを埋め込んだ後に、無条件分岐命令と同様の変換を行い、その後モードスイッチすればよい。
【０１５６】
（３．５）パターン６
パターン６（条件間接分岐命令から分岐）について説明する。図１８は、パターン６におけるコード変換装置１００Ａの動作を説明するための図である。図１８では、アドレスｇの間接分岐命令は、第１コードの開始アドレスｅ、又は第２コードの開始アドレスｆのいずれかに分岐する。
【０１５７】
まず、間接分岐命令は、ＩＢＴＣテーブル参照コードに置き換えられる。
【０１５８】
次に、アドレスｂの分岐命令の分岐先がアドレスｃ’に置き換えられ、モードスイッチする。初回実行時において条件分岐命令が実行されなければ、ＩＢＴＣテーブルに変化はない。初回実行時において条件分岐命令が実行された場合、ＩＢＴＣテーブル参照コード実行時と同様に、ＩＢＴＣテーブルにヒットすればモードスイッチ無しで実行され、ヒットしなければ切り替え部１４０への切り替えが発生する。
【０１５９】
（作用及び効果）
本実施形態によれば、第１コードについての変換処理を省略することができるので、変換処理に要するオーバヘッドを削減することができる。
【０１６０】
また、第１コードに対しては、第１コードが実行された場合に切り替え部１４０へ実行対象を切り替える命令である第１制御移動命令が埋め込まれる。これにより、実行対象をコード変換装置１００Ａに戻すことができ、第１コードに対する変換処理を省略しつつ、第１コードの次のコードに対しては変換処理を施すことが可能となる。
【０１６１】
さらに、変換済みコードに対しては、変換済みコードが実行された場合に第２解析情報に応じたコードへ実行対象を切り替える命令である第２制御移動命令が埋め込まれる。
【０１６２】
すなわち、変換済みコードの次に実行されるコードに応じて実行対象を切り替えることによって、変換済みコードの次に第１コード又は変換済みコードが実行される場合には、実行対象をコード変換装置１００Ａに戻すことがない。つまり、モードスイッチ発生率を減少させることができる。
【０１６３】
したがって、一部生成方式において、オーバヘッドをさらに削減することが可能なコード変換装置１００Ａを提供することができる。
【０１６４】
本実施形態によれば、コード変換装置１００Ａは、変換済みコードを記憶する変換済みコード記憶部７０と、元コードにおける第２コードを特定する情報と、変換済みコード記憶部に記憶された変換済みコードを特定する情報とを対応付けたコード変換情報を記憶するコード変換情報記憶部６０とを備える。
【０１６５】
解析候補特定部１１０は、コード変換情報に基づき、変換済みコード記憶部７０に記憶された変換済みコードに対応する元コード中の第２コードを解析候補コードから除外する。
【０１６６】
したがって、第２コードから変換済みコードが生成されると、当該第２コードは、解析候補コードとして選択されなくなる。したがって、第２コードについても変換処理を省略可能となり、オーバヘッドを削減することができる。
【０１６７】
本実施形態によれば、変換済みコード記憶部７０は、変換済みコードに加えて、解析候補特定部１１０によって分類された第１コードを記憶する。コード変換情報記憶部６０は、元コードにおける第１コードを特定する情報と、変換済みコード記憶部７０に記憶された第１コードを特定する情報とを対応付けたコード変換情報を記憶する。そして、コード変換情報に基づき、元コード中の第１コードに代えて、変換済みコード記憶部７０に記憶された第１コードが実行される。
【０１６８】
したがって、変換済みコードに加えて第１コードも変換済みコード記憶部７０に記憶され、変換済みコード記憶部７０から第１コードが実行されるので、第１コードを高速に実行可能となる。
【０１６９】
本実施形態によれば、コード変換装置１００Ａは、第１制御移動命令又は第２制御移動命令が埋め込まれたアドレスを、元コードにおいて最後に実行されたコードを示すコンテキスト情報として記憶するコンテキスト情報記憶部４０を備える。切り替え部１４０は、第１制御移動命令又は第２制御移動命令によって切り替え部１４０に実行対象が切り替った場合、第１コンテキスト情報を解析候補特定部１１０に出力する。解析候補特定部１１０は、切り替え部１４０によって出力された第１コンテキスト情報に基づいて、元コードにおいて次に実行されるべきコードを特定し、特定したコードを解析候補コードとして選択する。
【０１７０】
したがって、解析候補特定部１１０は、元コードの実行順に解析候補コードを選択することができる。
【０１７１】
本実施形態によれば、解析候補特定部１１０は、実行されると無条件に実行対象を分岐先に切り替える命令である無条件分岐命令を区切りとして元コードを複数のコードに分割し、複数のコードのいずれかを解析候補コードとして選択する。解析候補コードの末尾には、無条件分岐命令が存在している。
【０１７２】
切り替え部１４０は、解析候補コードが第１コードである場合、第１コードの末尾の無条件分岐命令を第１制御移動命令に置き換える。コンテキスト情報記憶部４０は、第１コードの末尾に存在する無条件分岐命令の分岐先を示す第２コンテキスト情報をさらに記憶する。
【０１７３】
切り替え部１４０は、第１制御移動命令によって切り替え部１４０に制御が切り替った場合、コンテキスト情報記憶部４０に記憶された第２コンテキスト情報を解析候補特定部１１０に出力する。解析候補特定部１１０は、切り替え部１４０によって出力された第２コンテキスト情報に基づいて、元コードにおいて次に実行されるべきコードを特定し、特定したコードを解析候補コードとして選択する。
【０１７４】
したがって、第１コードの末尾の無条件分岐命令が第１制御移動命令に置き換えられるので、第１コードのサイズ増加を抑制しつつ、第１制御移動命令を第１コードに埋め込み可能となる。また、無条件分岐命令の分岐先が記憶されるので、解析候補特定部１１０は、元コードの実行順に解析候補コードを選択することができる。
【０１７５】
本実施形態によれば、切り替え部１４０は、第１制御移動命令によって切り替え部１４０に実行対象が切り替った場合、第１制御移動命令を変換済みコード記憶部７０に記憶された変換済みコードへの分岐命令に置き換え、変換済みコードへの分岐命令を含む第１コードを特定する情報を第１解析情報から削除する。
【０１７６】
したがって、第１制御移動命令を変換済みコードへの分岐命令に置き換えることによって、第１コードに連続して変換済みコードが実行されることになり、モードスイッチが省略され、オーバヘッドを削減することができる。また、変換済みコードへの分岐命令を含む第１コードを特定する情報を第１解析情報から削除することによって、変換済みコードへの分岐命令を含む第１コードに再び第１制御移動命令が埋め込まれることが防止される。
【０１７７】
本実施形態によれば、コード解析部１２０は、第２コードに含まれる分岐命令を検出する。第２解析情報は、第２コードに含まれる分岐命令を特定する情報を含む。コード変換部１３０は、第２解析情報に基づいて、第２コードに含まれる分岐命令の分岐先へ実行対象を切り替える第２制御移動命令を変換済みコードに埋め込む。
【０１７８】
したがって、第２コードに含まれる分岐命令について、次に実行されるコードをより正確に把握可能となる。
【０１７９】
本実施形態によれば、第２解析情報は、第２コードに含まれる分岐命令の分岐先が第１コードであるか否かを示す情報を含む。コード変換部１３０は、第２解析情報に基づき、第２コードに含まれる分岐命令の分岐先が第１コードであると判定される場合、第１コードへの分岐命令を第２制御移動命令として変換済みコードに埋め込む。
【０１８０】
したがって、変換済みコードの次に第１コードが実行される場合に、変換済みコードに連続して第１コードを実行可能となり、モードスイッチが省略され、オーバヘッドを削減することができる。
【０１８１】
本実施形態によれば、第２解析情報は、第２コードに含まれる分岐命令の分岐先が第１コード変換情報に登録されているか否かを示す情報を含む。コード変換部１３０は、第２解析情報に基づき、第２コードに含まれる分岐命令の分岐先が第１コード変換情報に登録されていると判定される場合、変換済みコードへの分岐命令を第２制御移動命令として変換済みコードに埋め込む。
【０１８２】
したがって、変換済みコードの次にも変換済みコードが実行される場合に、変換済みコードに連続して変換済みコードを実行可能となり、モードスイッチが省略され、オーバヘッドを削減することができる。
【０１８３】
本実施形態によれば、コード変換部１３０は、第２解析情報に基づき、第２コードに含まれる分岐命令の分岐先が特定不可能である、又は第２コードに含まれる分岐命令の分岐先が第２コードであると判定される場合、切り替え部１４０へ実行対象を切り替える命令を第２制御移動命令として変換済みコードに埋め込む。
【０１８４】
したがって、変換済みコードの次に実行されるコードが解析及び変換を要するコードである場合に、コード変換装置１００Ａによって当該コードを解析及び変換可能となる。
【０１８５】
本実施形態によれば、第２解析情報は、第２コードに含まれる分岐命令が、実行されると所定の条件が成立した場合に限り分岐する命令である条件分岐命令であるか否かを示す情報を含む。コード変換部１３０は、第２解析情報に基づき、第２コードに条件分岐命令が含まれると判定される場合、条件分岐命令が実行されたか否かを判定する判定コードを変換済みコードに埋め込む。切り替え部１４０は、第１制御移動命令又は第２制御移動命令によって切り替え部１４０に実行対象が切り替った場合に、判定コードの判定結果に基づき、条件分岐命令が実行されたか否かを特定する。
【０１８６】
したがって、切り替え部１４０は、条件分岐命令が実行されたか否かを特定可能となり、次に実行されるコードを把握することができる。
【０１８７】
[第２実施形態]
次に、本発明の第２実施形態について説明する。本実施形態では、上述した第１実施形態と異なる点について説明し、重複する説明を省略する。
【０１８８】
（コード変換装置の構成）
図１９は、本実施形態に係るコード変換装置１００Ｂの機能ブロック構成図である。図１９に示すように、コード変換装置１００Ｂは、解析情報生成部１５０を備えている点において、図１０とは異なる。
【０１８９】
図２０は、解析情報生成部１５０の概略動作を説明するための図である。図２０に示すように、解析情報生成部１５０は、アドレスを降順に解析していくことにより、第１解析情報を生成する。
【０１９０】
第１解析情報は、第１コードの開始アドレス及び終了アドレスを１エントリとして構成される。本実施形態では、解析情報生成部１５０は、プログラムコード（実行可能バイナリ）を逆アセンブリし、逆アセンブリしたプログラムコードを解析することによって第１解析情報を生成する。
【０１９１】
（コード変換装置の概略動作）
次に、コード変換装置１００Ｂの概略動作について説明する。図２１は、コード変換装置１００Ｂの概略動作を示すフローチャートである。
【０１９２】
ステップＳ１０１において、解析情報生成部１５０は、無条件分岐命令を区切りとしてプログラムコードを複数のブロックに分割する。無条件分岐命令がどのような命令であるかはＣＰＵアーキテクチャに依存するが、どのようなＣＰＵアーキテクチャであっても、無条件分岐命令を検出可能である。また、解析情報生成部１５０は、複数のブロックの中から解析開始ブロックを取得する。解析開始ブロックを決定する方法の詳細については後述する。
【０１９３】
ステップＳ１０２において、解析情報生成部１５０は、ステップＳ１０１において取得したブロックに、間接分岐命令又は条件分岐命令が含まれるか否かを判定する。間接分岐命令又は条件分岐命令が含まれないと判定された場合、処理がステップＳ１０３に進む。一方、間接分岐命令又は条件分岐命令が含まれないと判定された場合、ステップＳ１０１において取得したブロックは第２コードであり、処理が終了する。
【０１９４】
ステップＳ１０３において、解析情報生成部１５０は、ステップＳ１０１において取得したブロックの分岐先のブロックが第２コードであるか第１コードであるかを判定する。
【０１９５】
分岐先のブロックが第１コードであると判定された場合、処理がステップＳ１０４に進む。ステップＳ１０４において、解析情報生成部１５０は、分岐先のブロックを取得する。ステップＳ１０３及びステップＳ１０４では、解析情報生成部１５０は、第２コードであるブロックが検出されるまで、次々とブロックを取得し、第１コードを特定する。第１コードを取得している間は、各ブロックが無条件分岐命令で接続されており、次々と分岐先を特定することが可能である。
【０１９６】
一方、分岐先のブロックが第２コードであると判定された場合、処理がステップＳ１０５に進む。ステップＳ１０５において、解析情報生成部１５０は、ステップＳ１０１において取得したブロックの開始アドレスと、ステップＳ１０４において取得したブロックの終了アドレスとを、第１解析情報に登録する。
【０１９７】
（解析開始ブロックの決定方法）
次に、図２１のステップＳ１０１の詳細について説明する。
【０１９８】
解析候補特定部１１０は、切り替え部１４０から渡された開始アドレスを第１解析情報から検索することにより、第１コードを特定する。第１コードであれば、変換処理が発生しないので、プログラム実行時のコード変換装置１００Ｂにおけるオーバヘッドを削減可能となる。
【０１９９】
したがって、第１解析情報には、できるだけ多くの開始アドレスを登録することが好ましい。このため、すべてのブロックを解析開始ブロックとした解析を行い、第１コードを検出すればよいことになる。
【０２００】
しかし、各ブロックのコードサイズは２０バイト程度である。一方、第１解析情報は、１エントリで少なくとも開始アドレス及び終了アドレスの組を持つため、３２ビットアドレス空間の場合では、１エントリ当たり８バイトになる。この場合、コード領域に対して、メモリ使用量が４０％程度増加する。そこで、本実施形態では、解析開始ブロックを絞ることで、第１解析情報のサイズを削減する。
【０２０１】
第１解析情報のサイズを効率良く削減するためには、解析候補特定部１１０によって参照されやすい第１コードのみを第１解析情報へ登録すればよい。ここで、第１コードが参照される際に第１解析情報の検索キーとして、切り替え部１４０から解析候補特定部１１０へ渡されるアドレスに注目する。このアドレスは、第１コードの開始アドレスであるが、第２コードに含まれる制御移動命令によって分岐する。
【０２０２】
第２コードである条件は、条件分岐命令又は間接分岐命令のいずれかを含むことである。すなわち、条件分岐命令又は間接分岐命令の分岐先は、プログラム実行時に第１コードの開始アドレスとして、切り替え部１４０から解析候補特定部１１０へ渡される可能性が高い。
【０２０３】
ここで、直接条件分岐命令については、プログラム実行前であっても分岐先を特定可能であるため、プログラムコード中から直接条件分岐命令を抽出し、直接条件分岐命令の分岐先を解析開始ブロックの開始アドレスとする。間接分岐命令のほとんどはリターン命令である。したがって、リターン命令の分岐先を解析開始ブロックの開始アドレスとすればよい。
【０２０４】
しかし、間接分岐命令の分岐先をプログラム実行せずに特定することは困難である。一方で、リターン命令の分岐先は、図２２に示すように、リターン命令と対になる関数コール命令の次のアドレスである。
【０２０５】
通常のＣＰＵアーキテクチャでは、関数コールに利用される分岐命令は決まっているので、関数コール命令の特定はそれほど困難ではない。そのため、プログラムコードから関数コール命令をすべて抽出し、抽出した関数コール命令の次のアドレスを解析開始ブロックの開始アドレスとすればよい。
【０２０６】
以下では、第１解析情報をさらに削減する手法として、ＡＲＭ ＣＰＵアーキテクチャに限定して説明する。
【０２０７】
ＡＲＭ ＣＰＵアーキテクチャでは、コード領域に、データを蓄積する領域（以下、「リテラルプール」という）を有する。ＡＲＭ ＣＰＵアーキテクチャでは、命令長が３２ビット固定長であるため、３２ビットに入りきらない引数を扱うことができない。これに対応するため、命令の直ぐ近くに引数を配置し、当該命令の引数を配置先への相対アドレスとする。当該命令と当該配置先が十分に近い場合には、相対アドレスは元の引数よりもサイズが小さく、３２ビット以内に当該命令を表現可能となる。このようにして形成されるアドレス空間を「リテラルプール」と呼ぶ。
【０２０８】
リテラルプールは、コード領域に配置されるため、アドレスを順に解析していく方法では解析対象となってしまう。リテラルプールが存在するのは本来データであるが、逆アセンブルしてしまえばコードと見分けが付かなくなる。このため、リテラルプールは、第１コードとしての条件を満たせば、第１解析情報に登録されることになる。
【０２０９】
しかし、実際にはリテラルプールはデータであるために実行されることがなく、解析候補特定部１１０からも参照されない無駄なエントリとなる。ＡＲＭコード領域の１０％程度をリテラルプールが占めることが多く、リテラルプールによる第１解析情報の増加が問題となる。
【０２１０】
そこで、解析情報生成部１５０は、リテラルプールを除去しながらプログラムコードを解析する。リテラルプールに存在する各データは、図２３に示すように、当該データを相対アドレスによって参照するリテラルプール参照コードと対になっている。
【０２１１】
リテラルプール参照コードの例としては下記の通りである。
【０２１２】
Ｉｄｒ  ｒ１  ［ｐｃ，＃ｏｆｆｓｅｔ］
上記の命令は、現在のプログラムカウンタの値（すなわち、上記命令のアドレス）からｏｆｆｓｅｔ番地離れたアドレスに格納されているデータをレジスタｒ１へロードする命令である。この場合、リテラルプール参照コードが参照するデータのアドレスは、ｐｃ，＃ｏｆｆｓｅｔとなる。
【０２１３】
リテラルプール参照コードは、［ｐｃ，＃ｏｆｆｓｅｔ］という形式を含むために、逆アセンブル済みコードから容易に特定可能である。また、プログラムカウンタの値、＃ｏｆｆｓｅｔの値も特定可能であり、リテラルプール参照コードによって参照されるアドレスは一意に特定可能である。
【０２１４】
したがって、解析情報生成部１５０は、プログラムコード中のリテラルプールをすべて特定可能であり、あらかじめ除去することができる。
【０２１５】
（作用及び効果）
本実施形態によれば、解析情報生成部１５０があらかじめプログラムコードを解析して第１解析情報を生成することによって、プログラム実行時におけるオーバヘッドを削減することができる。
【０２１６】
本実施形態によれば、解析情報生成部１５０は、無条件分岐命令を区切りとしてプログラムコードを複数のブロックに分割し、分岐先の特定可能な無条件分岐命令によって連結される複数のブロックを第１コードとして特定し、特定された第１コードを示す情報を第１解析情報として解析情報記憶部２０に格納する。
【０２１７】
したがって、第１コードのサイズをできるだけ大きくすることができるので、モードスイッチ回数を削減することが可能となる。
【０２１８】
本実施形態によれば、解析情報生成部１５０は、特定された第１コードの開始アドレスが、分岐先が一意に特定されない分岐命令の分岐先アドレスに該当する場合に限り、第１解析情報として解析情報記憶部２０に格納することを要旨とする。
【０２１９】
したがって、第１解析情報として登録する第１コードを限定することによって、第１解析情報のサイズを削減することができる。
【０２２０】
本実施形態によれば、解析情報生成部１５０は、プログラムコードの一部のみを複数のブロックに分割することを要旨とする。したがって、プログラムコード中の第１コードを生成する対象を限定することによって、第１解析情報のサイズを削減することができる。
【０２２１】
本実施形態によれば、解析情報生成部１５０は、プログラムコードに含まれるデータを除去し、データが除去されたプログラムコードを複数のブロックに分割することを要旨とする。
【０２２２】
したがって、プログラムコードにデータが含まれるような場合において、当該データを解析対象から除外するので、解析情報生成部１５０の処理負荷を削減することができる。また、プログラムコードに含まれるデータが第１解析情報に登録されることがないので、第１解析情報のサイズを削減することができる。
【０２２３】
[第３実施形態]
次に、本発明の第３実施形態について説明する。本実施形態では、上述した第１実施形態及び第２実施形態と異なる点について説明し、重複する説明を省略する。
【０２２４】
（コード変換装置の構成）
図２４は、本実施形態に係るコード変換装置１００Ｃの機能ブロック構成図である。図２４に示すように、コード変換装置１００Ｃは、二次記憶装置（保持部）８０及びコード復元部１６０を備えている点において、図１０とは異なる。
【０２２５】
二次記憶装置８０は、プログラムコードから生成された変換済みコードを保存（ダンプ）する。保存された変換済みコードは、当該プログラムコードの次回実行時において、コード復元部１６０によって変換済みコード記憶部７０に復元される。
【０２２６】
（コード変換装置の動作）
次に、コード変換装置１００Ｃの動作について説明する。図２５は、コード変換装置１００Ｃの動作を説明するための図である。図２５では、第２コードＡ，Ｂの変換済みコードＡ’，Ｂ’が変換済みコード記憶部７０に格納されている。
【０２２７】
プログラム実行終了後は、変換済みコードが二次記憶装置８０に保存される。また、保存された変換済みコードを復元するためのコード復元情報が生成され、生成されたコード復元情報は、変換済みコードとともに二次記憶装置８０に保存される。
【０２２８】
コード復元情報は、上述したコード変換情報に基づき生成される。具体的には、コード復元情報は、変換済みコードの元コード上の開始アドレスと、変換済みコード記憶部７０上のアドレスと、エントリＩＤとを対応付けた情報である。エントリＩＤは、変換済みコードにも付与され、変換済みコードとコード復元情報とが対応付けられる。
【０２２９】
変換済みコードを復元する際には、コード復元部１６０は、保存された変換済みコードに対応するコード復元情報を特定し、特定したコード復元情報におけるキャッシュ上アドレスに変換済みコードを配置する。また、コード復元部１６０は、コード復元情報からエントリＩＤを除去したものをコード変換情報とする。
【０２３０】
さらに、コード復元部１６０は、保存された変換済みコードの改ざんを検出するための電子署名機能を有する。具体的には、コード復元部１６０は、変換済みコードに電子署名を付与して二次記憶装置８０に保存し、保存した変換済みコードを復元する際に電子署名を用いた検証を行う。これにより、変換済みコードに対する改ざんが検出可能となり、不正なコードの実行を抑制することができる。
【０２３１】
（作用及び効果）
本実施形態によれば、コード変換装置１００Ｃは、変換済みコード及び第１コード変換情報を、プログラムコードが次回実行されるまで保持する二次記憶装置８０と、プログラムコードの次回実行時において、二次記憶装置８０に保持されている変換済みコード及び第１コード変換情報を復元するコード復元部とを備える。
【０２３２】
したがって、プログラムコードが次回実行された際に、コード変換装置１００Ｃによる解析及び変換処理を省略可能となり、オーバヘッドを削減することができる。
【０２３３】
本実施形態によれば、コード復元部１６０は、変換済みコードが二次記憶装置８０に格納される際に、変換済みコードの改ざん検出に用いる電子署名を変換済みコードに付加し、二次記憶装置８０に保持されている変換済みコードを二次記憶装置８０から読み出す際に、電子署名を用いて変換済みコードの改ざんを検出する。
【０２３４】
したがって、プログラムコードの次回実行時においてコード変換装置１００Ｃによる解析及び変換処理が省略されても、変換済みコードの安全性を確保することができる。
【０２３５】
[その他の実施形態]
上記のように、本発明は第１〜第３実施形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施形態、実施例及び運用技術が明らかとなる。
【０２３６】
例えば、上述した第１実施形態では、コード変換装置１００Ａが変換済みコード記憶部７０を備えていたが、変換済みコード記憶部７０を備えない構成であってもよい。このように本発明は、ここでは記載していない様々な実施形態等を包含するということを理解すべきである。したがって、本発明はこの開示から妥当な特許請求の範囲の発明特定事項によってのみ限定されるものである。
【図面の簡単な説明】
【０２３７】
【図１】ＳＤＴの概要を説明するための図である。
【図２】ＳＤＴによる変換処理の一例を示す図である。
【図３】フラグメントリンクを説明するための図である。
【図４】ＩＢＴＣを説明するための図である。
【図５】ファスト・リターンを説明するための図である。
【図６】既存技術の効果、適用条件、及び問題点をまとめた表である。
【図７】一部生成方式を説明するための図である。
【図８】既存方式のオーバヘッドと、一部生成方式のオーバヘッドとを比較したグラフである。
【図９】既存方式のモードスイッチ発生率と、一部生成方式のモードスイッチ発生率とを比較したグラフである。
【図１０】本発明の第１実施形態に係るコード変換装置の機能ブロック構成図である。
【図１１】第１コード及び変換済みフラグメントが実行される過程を示す図である。
【図１２】本発明の第１実施形態に係るコード変換装置の第１コード実行時における動作を説明するための図である。
【図１３】本発明の第１実施形態に係るコード変換装置が第２コードを変換する動作について説明するための図である。
【図１４】本発明の第１実施形態に係るコード変換装置の第２コード変換時における動作を説明するための図である（パターン１）。
【図１５】本発明の第１実施形態に係るコード変換装置の第２コード変換時における動作を説明するための図である（パターン２）。
【図１６】本発明の第１実施形態に係るコード変換装置の第２コード変換時における動作を説明するための図である（パターン３）。
【図１７】本発明の第１実施形態に係るコード変換装置の第２コード変換時における動作を説明するための図である（パターン４，５）。
【図１８】本発明の第１実施形態に係るコード変換装置の第２コード変換時における動作を説明するための図である（パターン４，５）。
【図１９】本発明の第２実施形態に係るコード変換装置の機能ブロック構成図である。
【図２０】本発明の第２実施形態に係る解析情報生成部の概略動作を説明するための図である。
【図２１】本発明の第２実施形態に係るコード変換装置の概略動作を示すフローチャートである。
【図２２】リターン命令を説明するための図である。
【図２３】リテラルプールを説明するための図である。
【図２４】本発明の第３実施形態に係るコード変換装置の機能ブロック構成図である。
【図２５】本発明の第３実施形態に係るコード変換装置の動作を説明するための図である。
【符号の説明】
【０２３８】
１０…プログラムコード記憶部、２０…解析情報記憶部、４０…コンテキスト情報記憶部、６０…コード変換情報記憶部、７０…コード記憶部、８０…二次記憶装置、１００Ａ，１００Ｂ，１００Ｃ…コード変換装置、１１０…解析候補特定部、１２０…コード解析部、１３０…コード変換部、１４０…切り替え部、１５０…解析情報生成部、１６０…コード復元部
【図１】
2009048370.tif 000003
【図２】
2009048370.tif 000004
【図３】
2009048370.tif 000005
【図４】
2009048370.tif 000006
【図５】
2009048370.tif 000007
【図６】
2009048370.tif 000008
【図７】
2009048370.tif 000009
【図８】
2009048370.tif 000010
【図９】
2009048370.tif 000011
【図１０】
2009048370.tif 000012
【図１１】
2009048370.tif 000013
【図１２】
2009048370.tif 000014
【図１３】
2009048370.tif 000015
【図１４】
2009048370.tif 000016
【図１５】
2009048370.tif 000017
【図１６】
2009048370.tif 000018
【図１７】
2009048370.tif 000019
【図１８】
2009048370.tif 000020
【図１９】
2009048370.tif 000021
【図２０】
2009048370.tif 000022
【図２１】
2009048370.tif 000023
【図２２】
2009048370.tif 000024
【図２３】
2009048370.tif 000025
【図２４】
2009048370.tif 000026
【図２５】
2009048370.tif 000027