(57)【要約】【課題】暗号化されていないＣＰＵ用のデバッガを用いて、ターゲットＣＰＵ上で動作する暗号化された命令列を含むプログラムのデバッグを容易に行う。【解決手段】暗号化された命令列を復号化して実行するターゲットＣＰＵ（２０８）と、デバッガ（２０２）とを含むデバッグ装置を用いてデバッグを行う。上記ターゲットＣＰＵと上記デバッガとの間にトランスレータ（２０４）を介在する。上記トランスレータは、上記デバッガから伝達された通信内容を上記トランスレータで上記ターゲットＣＰＵに対応する内容に変換し、上記ターゲットＣＰＵから伝達された通信内容を上記トランスレータで上記デバッガに対応する内容に変換する。このような変換を行うことで、ターゲットＣＰＵ上で動作する暗号化された命令列を含むプログラムのデバッグの容易化を図る。【選択図】図１
2011053749.tif 000002
【特許請求の範囲】
【請求項１】
暗号化された命令列を復号化して実行するターゲットＣＰＵと、上記ターゲットＣＰＵで実行されるプログラムをデバッグするためのデバッガと、を含むデバッグ装置を用いたデバッグ方法であって、
上記ターゲットＣＰＵと上記デバッガとの間にトランスレータを介在し、
上記トランスレータは、上記デバッガから伝達された通信内容を上記トランスレータで上記ターゲットＣＰＵに対応する内容に変換してから上記ターゲットＣＰＵに送出し、上記ターゲットＣＰＵから伝達された通信内容を上記トランスレータで上記デバッガに対応する内容に変換してから上記デバッガに送出することを特徴とするデバッグ方法。
【請求項２】
上記トランスレータは、特定のアドレスの命令を実行した場合にプログラム実行を停止させるブレークポイントを設定する指示を上記デバッガから受け取ってそのブレークポイントを管理し、上記デバッガからプログラムの実行を再開する指示が送られてきた際に、上記ブレークポイントを設定する指示を上記ターゲットＣＰＵに送出した後、プログラム実行を再開する指示を上記ターゲットＣＰＵに送出し、上記ターゲットＣＰＵから、ブレークポイントで停止した際に出力されるレスポンス情報の返信を待ち、上記レスポンス情報を受け取った後、ブレークポイントを解除する指示を上記ターゲットＣＰＵに送出する請求項１記載のデバッグ方法。
【請求項３】
上記トランスレータは、上記デバッカからプログラムの実行を再開する指示が送られてきた際に、上記ターゲットＣＰＵのプログラムカウンタの値と、ブレークポイントのアドレス情報と、直前に実行される命令が一意に確定するブロックとして定義されるコードブロック情報とから、他のブレークポイントを通過しなければたどり着くことのできないブレークポイントを求め、上記他のブレークポイントを通過しなければたどり着くことのできないブレークポイントについては、上記ターゲットＣＰＵへのブレークポイント設定指示の送出を禁止する請求項２記載のデバッグ方法。
【請求項４】
上記トランスレータは、上記ターゲットＣＰＵの命令列の一部分に対してアドレス範囲を指定した読み込みリクエストが送られてきた場合に、上記読み込みリクエストで指定された命令列を復号化するために、上記アドレス範囲の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列も一緒に読み込まれるように、上記読み込みリクエストのアドレス範囲を拡張する変換を行い、変換済み読み込みリクエストを生成し、それを上記ターゲットＣＰＵに送出し、上記ターゲットＣＰＵより返される暗号化命令列を復号化した後、上記読み込みリクエストで指定された上記アドレス範囲の復号化済み命令列を取り出し、それを上記デバッガに返信する請求項３記載のデバッグ方法。
【請求項５】
上記トランスレータは、アドレス範囲と上記アドレス範囲に書き込む命令列を指定した書き込みリクエストが送られてきた場合に、上記アドレス範囲の命令列および上記範囲の命令列を書き換えた場合に影響を受ける上記アドレス範囲以降の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列と、上記影響を受ける命令列を読み込むための拡張アドレス範囲を計算し、上記拡張アドレス範囲を読み込むための読み込みリクエストを生成し、それを上記ターゲットＣＰＵに送出し、上記ターゲットＣＰＵより返される暗号化命令列を復号化して復号化命令列を生成し、上記書き込みリクエストで指定された上記アドレス範囲に対応した上記命令復号化列部分を、上記書き込みリクエストで指定された命令列で置き換えた、命令列置き換え済み復号化命令列を生成し、上記命令列置き換え済み復号化命令列を再暗号化した再暗号化命令列を生成し、上記書き込みリクエストで指定された範囲の先頭から上記拡張アドレス範囲の終端までに相当する、上記再暗号化命令列を上記ターゲットＣＰＵに書き込むための再暗号化命令列書き込みリクエストを生成し、それを上記ターゲットＣＰＵに送出する請求項４記載のデバッグ方法。
【請求項６】
暗号化された命令列を復号化して実行するターゲットＣＰＵと、
上記ターゲットＣＰＵで実行されるプログラムをデバッグするためのデバッガと、を含むデバッグ装置であって、
上記ターゲットＣＰＵと上記デバッガとの間には、トランスレータが介在され、
上記トランスレータは、上記デバッガから伝達された通信内容を上記ターゲットＣＰＵに対応する内容に変換して上記ターゲットＣＰＵに送出し、上記ターゲットＣＰＵから伝達された通信内容を上記デバッガに対応する内容に変換して上記デバッガに送出する変換処理を含むことを特徴とするデバッグ装置。
【請求項７】
上記ターゲットＣＰＵは、暗号化された命令列を復号する復号化回路と、
上記ターゲットＣＰＵによって管理されるアドレス空間に配置され、上記復号化回路の内部状態を割り込み発生時に格納するための内部状態保存用レジスタと、を含み、
割り込みからの復帰命令実行時に、上記内部状態保存用レジスタの出力に基づいて上記復号化回路の内部状態が復元される請求項６記載のデバッグ装置。
【請求項８】
上記トランスレータにおける変換処理は、特定のアドレスの命令を実行した場合にプログラム実行を停止させるブレークポイントを設定する指示を上記デバッガから受け取ってそのブレークポイントを管理し、上記デバッガからプログラムの実行を再開する指示が送られてきた際に、上記ブレークポイントを設定する指示を上記ターゲットＣＰＵに送出した後、プログラム実行を再開する指示を上記ターゲットＣＰＵに送出し、上記ターゲットＣＰＵから、ブレークポイントで停止した際に出力されるレスポンス情報の返信を待ち、上記レスポンス情報を受け取った後、ブレークポイントを解除する指示を上記ターゲットＣＰＵに送出する処理を含む請求項７記載のデバッグ装置。
【請求項９】
上記トランスレータにおける変換処理は、上記デバッカからプログラムの実行を再開する指示が送られてきた際に、上記ターゲットＣＰＵのプログラムカウンタの値と、ブレークポイントのアドレス情報と、直前に実行される命令が一意に確定するブロックとして定義されるコードブロック情報とから、他のブレークポイントを通過しなければたどり着くことのできないブレークポイントを求め、上記他のブレークポイントを通過しなければたどり着くことのできないブレークポイントについては、上記ターゲットＣＰＵへのブレークポイント設定指示の送出を禁止する処理を含む請求項８記載のデバッグ装置。
【請求項１０】
上記トランスレータにおける変換処理は、上記ターゲットＣＰＵの命令列の一部分に対してアドレス範囲を指定した読み込みリクエストが送られてきた場合に、上記読み込みリクエストで指定された命令列を復号化するために、上記アドレス範囲の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列も一緒に読み込まれるように、上記読み込みリクエストのアドレス範囲を拡張する変換を行い、変換済み読み込みリクエストを生成し、上記ターゲットＣＰＵに対して上記変換済み読み込みリクエストを送出し、上記ターゲットＣＰＵより返される暗号化命令列を復号化した後、上記読み込みリクエストで指定された上記アドレス範囲の復号化済み命令列を取り出し、それを上記デバッガに返信する処理を含む請求項９記載のデバッグ装置。
【請求項１１】
上記トランスレータにおける変換処理は、アドレス範囲と上記アドレス範囲に書き込む命令列を指定した書き込みリクエストが送られてきた場合に、上記アドレス範囲の命令列および上記範囲の命令列を書き換えた場合に影響を受ける上記アドレス範囲以降の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列と、上記影響を受ける命令列を読み込むための拡張アドレス範囲を計算し、上記拡張アドレス範囲を読み込むための読み込みリクエストを生成し、上記ターゲットＣＰＵに上記読み込みリクエストを送出し、上記ターゲットＣＰＵより返される暗号化命令列を復号化して復号化命令列を生成し、上記書き込みリクエストで指定された上記アドレス範囲に対応した上記命令復号化列部分を、上記書き込みリクエストで指定された命令列で置き換えた、命令列置き換え済み復号化命令列を生成し、上記命令列置き換え済み復号化命令列を再暗号化した再暗号化命令列を生成し、上記書き込みリクエストで指定された範囲の先頭から上記拡張アドレス範囲の終端までに相当する、上記再暗号化命令列を上記ターゲットＣＰＵに書き込むための再暗号化命令列書き込みリクエストを生成し、それを上記ターゲットＣＰＵに送出する処理を含む請求項１０記載のデバッグ装置。
【請求項１２】
上記デバッガはパーソナルコンピュータに実装され、上記トランスレータ、及び上記ターゲットＣＰＵは、上記パーソナルコンピュータに結合されたエミュレータに実装されて成る請求項１１記載のデバッグ装置。
【請求項１３】
暗号化された命令列を復号化して実行するターゲットＣＰＵと、上記ターゲットＣＰＵで実行されるプログラムをデバッグするためのデバッガとの間でやり取りされる通信内容を変換するトランスレータ機能を制御用ＣＰＵに実現させるトランスレータプログラムであって、
上記トランスレータ機能には、特定のアドレスの命令を実行した場合にプログラム実行を停止させるブレークポイントを設定する指示を上記デバッガから受け取ってそのブレークポイントを管理する機能と、
上記デバッガからプログラムの実行を再開する指示が送られてきた際に、上記ブレークポイントを設定する指示を上記ターゲットＣＰＵに送出した後、プログラム実行を再開する指示を上記ターゲットＣＰＵに送出する機能と、
上記ターゲットＣＰＵから、ブレークポイントで停止した際に出力されるレスポンス情報の返信を待ち、上記レスポンス情報を受け取った後、ブレークポイントを解除する指示を上記ターゲットＣＰＵに送出する機能と、を含むことを特徴とするトランスレータプログラム。
【請求項１４】
上記トランスレータ機能は、更に、上記デバッカからプログラムの実行を再開する指示が送られてきた際に、上記ターゲットＣＰＵのプログラムカウンタの値と、ブレークポイントのアドレス情報と、直前に実行される命令が一意に確定するブロックとして定義されるコードブロック情報とから、他のブレークポイントを通過しなければたどり着くことのできないブレークポイントを求める機能と、
上記他のブレークポイントを通過しなければたどり着くことのできないブレークポイントについては、上記ターゲットＣＰＵへのブレークポイント設定指示の送出を禁止する機能と、を含む請求項１３記載のトランスレータプログラム。
【請求項１５】
上記トランスレータ機能には、更に、上記ターゲットＣＰＵの命令列の一部分に対してアドレス範囲を指定した読み込みリクエストが送られてきた場合に、上記読み込みリクエストで指定された命令列を復号化するために、上記アドレス範囲の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列も一緒に読み込まれるように、上記読み込みリクエストのアドレス範囲を拡張する変換を行い、変換済み読み込みリクエストを生成する機能と、
上記ターゲットＣＰＵに上記変換済み読み込みリクエストを送出する機能と、
上記ターゲットＣＰＵより返される暗号化命令列を復号化した後、上記読み込みリクエストで指定された上記アドレス範囲の復号化済み命令列を取り出し、上記デバッガに返信する機能と、を含む請求項１４記載のトランスレータプログラム。
【請求項１６】
上記トランスレータ機能は、更に、アドレス範囲と上記アドレス範囲に書き込む命令列を指定した書き込みリクエストが送られてきた場合に、上記アドレス範囲の命令列および上記範囲の命令列を書き換えた場合に影響を受ける上記アドレス範囲以降の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列と、上記影響を受ける命令列を読み込むための拡張アドレス範囲を計算する機能と、
上記拡張アドレス範囲を読み込むための読み込みリクエストを生成する機能と、
上記ターゲットＣＰＵに上記読み込みリクエストを送出する機能と、
上記ターゲットＣＰＵより返される暗号化命令列を復号化して復号化命令列を生成し、上記書き込みリクエストで指定された上記アドレス範囲に対応した上記命令復号化列部分を、上記書き込みリクエストで指定された命令列で置き換えた、命令列置き換え済み復号化命令列を生成し、上記命令列置き換え済み復号化命令列を再暗号化した再暗号化命令列を生成し、上記書き込みリクエストで指定された範囲の先頭から上記拡張アドレス範囲の終端までに相当する、上記再暗号化命令列を上記ターゲットＣＰＵに書き込むための再暗号化命令列書き込みリクエストを生成し、それを上記ターゲットＣＰＵに送出する機能と、を含む請求項１５記載のトランスレータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化された命令列を復号化して実行するターゲットＣＰＵ（Central Processing Unit）で実行されるプログラムのデバッグ技術に関する。
【背景技術】
【０００２】
例えば、特許文献１には、外部記憶装置にコンピュータの実行プログラムを暗号化して記憶し、それを復号化しながら実行するデータ保護装置が記載されている。このデータ保護装置では、外部記憶装置のアドレス空間を例えば４アドレス毎に区切って暗号化を行っている。アドレスの下位２ビットが“１１”の暗号化データは、一つ前となる下位２ビットが“１０”の暗号化データを用いて作成され、同様に、“１０”および“０１”の暗号化データは、それぞれ、“０１”および“００”の暗号化データを用いて作成され、“００”の暗号化データは初期値を用いて作成される。そして、例えば、分岐命令に伴ってアドレスの下記２ビットが“１０”のデータ列を実行する場合には、その２つ前となる“００”の暗号化データから順次復号化を行い、“１０”の暗号化データに達するまでウエイトする。
【０００３】
また、特許文献２には、暗号化された命令を受け、それを復号化しながら実行する際のパイプライン処理を、ストールの発生を抑えて実行可能なマイクロプロセッサが記載されている。具体的には、命令フェッチ部の中に、２段のパイプラインを設けて、前段で命令フェッチ、後段で暗号化命令の復号化を実行する。
【０００４】
特許文献３には、デバッグ機能に対するセキュリティ機能を提供することにより、第三者の不正な逆解析を防止するための電子装置、電子装置のデバッグ認証方法が記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平７−１２９４７３号公報
【特許文献２】特開２００５−１８４３４号公報
【特許文献３】特開２００３−１７７９３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
近年、ゲームソフト、映像コンテンツなどを代表にデジタルコンテンツの保護の重要性が増してきている。これらのデジタルコンテンツの保護は、暗号化や署名、その他様々な技術を用いて確保されているが、それらを制御するソフトウェア（ファームウェア）が改変されると、保護機能が無効化される虞れがある。例えば、ＤＶＤ（Digital Versatile Disk）ドライブのファームウェアを解析および改変することで著作権保護機能を無効化したり、ゲーム機のファームウェアを解析および改変することで違法ソフトのチェック機能を無効化することができ、映像コンテンツやゲームソフトの違法コピーなどが実現可能となる。
【０００７】
このようなファームウェアに対する保護技術としては、例えば、プログラムを難読化した上でＲＯＭ（Read Only Memory）に格納する方式や、特許文献１などに記載されているように、暗号化した上でＲＯＭに格納し、実行時に復号化する方式などが知られている。プログラムの難読化を行う方式では、例えば単純な１行の命令を判り難い複数行の命令に変換することによって外部からの解析を困難にしているが、その分命令実行の際のオーバーヘッドが増加する。また、この方式の場合、改竄や複製に対する保護も十分とは言えない。一方、暗号化を行う方式では、解析、改竄および複製共に十分な保護を行うことが可能となるが、この場合には、相応の暗号強度を備える必要がある。ただし、一般的に、暗号強度を上げると、強度に比例してオーバーヘッドが増加するため、その両立をどのように図るかが重要となる。
【０００８】
本願発明者は、上記のように命令列が暗号化されたプログラムのデバッグについて検討した。既存のデバッガには、ソフトウェアブレークポイントの設定や、プログラムカウンタ値を変更する機能が備えられている。しかし、上記のように命令列が暗号化されたプログラムのデバッグでは、ソフトウェアブレークポイントの設定や、プログラムカウンタ値の変更は、プログラムの改竄と同様に扱われることから、実施することが困難になる。このため、命令列が暗号化されていないプログラムのデバッグ手順で、命令列が暗号化されたプログラムのデバッグを行うことはできない。このような課題は、特許文献１，２，３の技術によっても解決することはできない。
【０００９】
本発明の目的は、暗号化されていないＣＰＵ用のデバッガを用いて、ターゲットＣＰＵ上で動作する暗号化された命令列を含むプログラムのデバッグを容易に行うための技術を提供することにある。
【００１０】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１１】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１２】
すなわち、暗号化された命令列を復号化して実行するターゲットＣＰＵと、上記ターゲットＣＰＵで実行されるプログラムをデバッグするためのデバッガと、を含むデバッグ装置を用いてデバッグを行う。このとき、上記ターゲットＣＰＵと上記デバッガとの間にトランスレータを介在する。上記トランスレータは、上記デバッガから伝達された通信内容を上記トランスレータで上記ターゲットＣＰＵに対応する内容に変換してから上記ターゲットＣＰＵに送出し、上記ターゲットＣＰＵから伝達された通信内容を上記トランスレータで上記デバッガに対応する内容に変換してから上記デバッガに送出する。上記のような変換が行われることで、デバッガからトランスレータを見た場合、ターゲットＣＰＵは、暗号化されていないＣＰＵと同じ振る舞いをしているように見える。また、ターゲットＣＰＵからトランスレータを見た場合、暗号化された命令列を解釈できるデバッガが接続されているように見える。このことが、暗号化されていないＣＰＵ用のデバッガを用いて、ターゲットＣＰＵ上で動作する暗号化された命令列を含むプログラムのデバッグの容易化を達成する。
【発明の効果】
【００１３】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
【００１４】
すなわち、暗号化されていないＣＰＵ用のデバッガを用いて、ターゲットＣＰＵ上で動作する暗号化された命令列を含むプログラムのデバッグを容易に行うための技術を提供することができる。
【図面の簡単な説明】
【００１５】
【図１】本発明にかかるデバッグ装置の構成例ブロック図である。
【図２】本発明にかかるデバッグ装置の別の構成例ブロック図である。
【図３】本発明にかかるデバッグ装置の別の構成例ブロック図である。
【図４】トランスレータによるメモリリード処理のフローチャートである。
【図５】トランスレータによるメモリライト処理のフローチャートである。
【図６】トランスレータによるステップ実行処理のフローチャートである。
【図７】トランスレータによるステップ実行処理の別のフローチャートである。
【図８】トランスレータによるレジスタリード処理のフローチャートである。
【図９】トランスレータによるレジスタライト処理のフローチャートである。
【図１０】トランスレータプログラムに基づくトランスレータと通信を行うターゲットＣＰＵの割り込み処理のフローチャートである。
【図１１】命令コードを暗号化したまま実行可能なターゲットＣＰＵを含む情報処理装置の構成例ブロック図である。
【図１２】図１１に示される情報処理装置における主要部の構成例ブロック図である。
【図１３】図１１に示される情報処理装置における主要部の構成例ブロック図である。
【図１４】図１３における主要部の構成例ブロック図である。
【図１５】命令コードの変換にスクランブルを用いた場合の復号化ブロックの構成例回路図である。
【図１６】命令コードの変換に圧縮・伸長を用いた場合の復号化ブロック構成例回路図である。
【図１７】コードブロックの分割の例を示すフローチャートである。
【図１８】ターゲットＣＰＵで管理されるメモリマップの説明図である。
【発明を実施するための形態】
【００１６】
１．実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００１７】
〔１〕本発明の代表的な実施の形態に係るデバッグ装置（１００）は、暗号化された命令列を復号化して実行するターゲットＣＰＵ（２０８，３１１）と、上記ターゲットＣＰＵで実行されるプログラムをデバッグするためのデバッガ（２０２，３０３）とを含む。上記ターゲットＣＰＵと上記デバッガとの間には、トランスレータ（２０４，２００，３１３）が介在される。上記トランスレータは、上記デバッガから伝達された通信内容を上記ターゲットＣＰＵに対応する内容に変換して上記ターゲットＣＰＵに送出し、上記ターゲットＣＰＵから伝達された通信内容を上記デバッガに対応する内容に変換して上記デバッガに送出する変換処理を含む。このような変換処理が行われることで、デバッガからトランスレータを見た場合、ターゲットＣＰＵは、暗号化されていないＣＰＵと同じ振る舞いをしているように見える。また、ターゲットＣＰＵからトランスレータを見た場合、暗号化された命令列を解釈できるデバッガが接続されているように見える。
【００１８】
〔２〕上記〔１〕において、上記ターゲットＣＰＵは、暗号化された命令列を復号する復号化回路（ＤＥ１〜ＤＥ３）と、上記ターゲットＣＰＵによって管理されるアドレス空間に配置され、上記復号化回路の内部状態を割り込み発生時に格納するための内部状態保存用レジスタ（ＲＥＧ４１ｂ〜ＲＥＧ４３ｂ）とを含めることができる。このとき、割り込みからの復帰命令実行時に、上記内部状態保存用レジスタの出力に基づいて上記復号化回路の内部状態が復元される。これにより、トランスレータは、ターゲットＣＰＵが割り込み状態中に状態保持レジスタと、スタックポインタ上に格納された割り込み復帰時のプログラムカウンタを書き換えるリクエストを送ることで、任意のアドレスから実行を再開する機能を実現できる。
【００１９】
〔３〕上記〔２〕において、上記トランスレータにおける変換処理には、以下の処理を加えることができる。
【００２０】
すなわち、特定のアドレスの命令を実行した場合にプログラム実行を停止させるブレークポイントを設定する指示を上記デバッガから受け取ってそのブレークポイントを管理する。そして、上記デバッガからプログラムの実行を再開する指示が送られてきた際に、上記ブレークポイントを設定する指示を上記ターゲットＣＰＵに送出した後、プログラム実行を再開する指示を上記ターゲットＣＰＵに送出する。また、上記ターゲットＣＰＵから、ブレークポイントで停止した際に出力されるレスポンス情報の返信を待ち、上記レスポンス情報を受け取った後、ブレークポイントを解除する指示を上記ターゲットＣＰＵに送出する。
【００２１】
〔４〕上記〔３〕において、上記トランスレータにおける変換処理は、以下の処理を加えることができる。
【００２２】
すなわち、上記デバッカからプログラムの実行を再開する指示が送られてきた際に、上記ターゲットＣＰＵのプログラムカウンタの値と、ブレークポイントのアドレス情報と、直前に実行される命令が一意に確定するブロックとして定義されるコードブロック情報とから、他のブレークポイントを通過しなければたどり着くことのできないブレークポイントを求める。そして、上記他のブレークポイントを通過しなければたどり着くことのできないブレークポイントについては、上記ターゲットＣＰＵへのブレークポイント設定指示の送出を禁止する。これにより、トランスレータとターゲットＣＰＵとの間の通信量を削減することができる。
【００２３】
〔５〕上記〔４〕において、上記トランスレータにおける変換処理には、以下の処理を加えることができる。
【００２４】
すなわち、上記ターゲットＣＰＵの命令列の一部分に対してアドレス範囲を指定した読み込みリクエスト（リードリクエスト）が送られてきた場合に、上記読み込みリクエストで指定された命令列を復号化するために、上記アドレス範囲の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列も一緒に読み込まれるように、上記読み込みリクエストのアドレス範囲を拡張する変換を行う。それにより変換済み読み込みリクエストを生成し、上記ターゲットＣＰＵに対して上記変換済み読み込みリクエストを送出し、上記ターゲットＣＰＵより返される暗号化命令列を復号化した後、上記読み込みリクエストで指定された上記アドレス範囲の復号化済み命令列を取り出し、それを上記デバッガに返信する。
【００２５】
〔６〕上記〔５〕において、上記トランスレータにおける変換処理には、以下の処理を加えることができる。
【００２６】
すなわち、アドレス範囲と上記アドレス範囲に書き込む命令列を指定した書き込みリクエスト（ライトリクエスト）が送られてきた場合に、上記アドレス範囲の命令列および上記範囲の命令列を書き換えた場合に影響を受ける上記アドレス範囲以降の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列と、上記影響を受ける命令列を読み込むための拡張アドレス範囲を計算する。上記拡張アドレス範囲を読み込むための読み込みリクエストを生成し、上記ターゲットＣＰＵに上記読み込みリクエストを送出する。上記ターゲットＣＰＵより返される暗号化命令列を復号化して復号化命令列を生成し、上記書き込みリクエストで指定された上記アドレス範囲に対応した上記命令復号化列部分を、上記書き込みリクエストで指定された命令列で置き換えた、命令列置き換え済み復号化命令列を生成する。上記命令列置き換え済み復号化命令列を再暗号化した再暗号化命令列を生成し、上記書き込みリクエストで指定された範囲の先頭から上記拡張アドレス範囲の終端までに相当する、上記再暗号化命令列を上記ターゲットＣＰＵに書き込むための再暗号化命令列書き込みリクエストを生成する。上記のように生成された命令列やリクエストは上記ターゲットＣＰＵに送出される。これにより上記ターゲットＣＰＵ内の暗号化命令列の一部もしくは全部を上記ターゲットＣＰＵが復号化しながら実行しても正常動作するようにしている。
【００２７】
〔７〕上記〔６〕において、上記デバッガはパーソナルコンピュータ（３０１）に実装し、上記トランスレータ、及び上記ターゲットＣＰＵを、上記パーソナルコンピュータに結合されたエミュレータ（３０８）に実装することができる。
【００２８】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００２９】
尚、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でも良い。また、以下の実施の形態において、その構成要素（要素ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数値および範囲についても同様である。
【００３０】
＜実施の形態１＞
図１には、本発明にかかるデバッグ装置の構成例が示される。図１に示されるデバッグ装置１００は、パーソナルコンピュータ（「ＰＣ」と略記する）２０１を含む。上記ＰＣ２０１上には、ソフトウエアとしてデバッガ２０２及びトランスレータ２０４が実装される。つまり、ＰＣ２０１に含まれるＣＰＵにより所定のプログラムが実行されることで、デバッガ２０２やトランスレータ２０４の各機能が実現される。メモリ２０９には、暗号化された命令列が格納されるＲＯＭ（Read Only Memory）や、上記ターゲットＣＰＵ２０８における各種演算処理の作業領域などに使用されるＲＡＭ（Random Access Memory）が含まれる。ターゲットＣＰＵ（ＣＰＵ：Central Processing Unit）２０８は、上記メモリ２０９内の暗号化された命令列を動的に復号化して実行する。上記ターゲットＣＰＵ２０８は、通信路２０７を介してＰＣ２０１に結合される。上記通信路２０７、上記ターゲットＣＰＵ２０８、及びメモリ２０９は暗号化されている領域とされる。ＰＣ２０１上に実装されたデバッガ２０２は、ターゲットＣＰＵ２０８と通信を行う代わりに、トランスレータ２０４と通信路２０３を介して接続し、通常のＣＰＵ（暗号化されていないＣＰＵを意味する）に対してデバッグを行う場合と同様の通信を、トランスレータ２０４に対して行う。トランスレータ２０４は、コードブロック情報２０５と鍵情報２０６を用いて、デバッガ２０２より送られてきたリクエストを変換し、変換されたリクエストをターゲットＣＰＵ２０８に通信路２０７を介して送信する。ターゲットＣＰＵ２０８から通信路２０７を介してレスポンスが返信されると、トランスレータ２０４は、コードブロック情報２０５と鍵情報２０６を用いて、復号化等の必要な変換を行い、変換済みのレスポンスを通信路２０３を介して、デバッガ２０２に送る。トランスレータ２０４は、必要に応じて、デバッガ２０２からのリクエストを複数のリクエストに変換して、ターゲットＣＰＵ２０８にリクエストを１個ずつ送り、それぞれのリクエストに対するレスポンスを受け取り、すべての変換済みリクエストの処理が終わった後に、デバッガ２０２に１個のレスポンスを返す。トランスレータ２０４によるリクエストおよびレスポンスの変換が行われることで、デバッガ２０２からトランスレータ２０４を見た場合、通常のＣＰＵ、つまり、暗号化されていないＣＰＵが接続されているように見える。同時にターゲットＣＰＵ２０８からトランスレータ２０４を見た場合、暗号化された命令列を解釈できるデバッガが接続されているように見える。
【００３１】
ここで、プログラムの暗号化について説明する。
【００３２】
プログラムの暗号化は、実行される命令順序が一意に定まる命令列を単位として行う。この実行される命令順序が一意に決まる命令列をコードブロックと呼ぶ。これは、分岐命令やジャンプ命令、サブルーチンコール命令、サブルーチンからの復帰命令、分岐命令の飛び先アドレス、ジャンプ命令の飛び先アドレス、サブルーチンの先頭アドレスを境界として定義され、分岐命令の飛び先アドレス、ジャンプ命令の飛び先アドレス、サブルーチンの先頭アドレスを先頭に、分岐命令やジャンプ命令、サブルーチンコール命令、サブルーチンからの復帰命令までを１つのコードブロックと定義する。
【００３３】
図１７には、コードブロックの分割の例を示すフローチャートが示される。ステップ１７０２の処理の直前には、ステップ１７０１の処理が必ず実行され、ステップ１７０３の処理の直前にはステップ１７０２の処理が必ず実行される。一方、ステップ１７０５の処理の直前は、ステップ１７０３の処理とステップ１７０４の処理のいずれが実行されるのかは決まっていない。したがって、ステップ１７０１の処理、ステップ１７０２の処理、ステップ１７０３の処理までが一つのコードブロックとなる。一方、ステップ１７０４の処理は、ステップ１７０２の処理の分岐の条件分岐先となっている。条件分岐で分岐する場合の分岐先は、あらたなコードブロックの先頭とみなす。これは、分岐命令による分岐先にはラベルが付与されており、通常、ほかの分岐の分岐先として選ばれる可能性があることと、ＣＰＵによるコードブロック間の遷移の検出が容易となること、の２つの理由から、コードブロックの先頭と見なす。特に、同様に考えて、ステップ１７０５の処理、ステップ１７０６の処理は別のコードブロック１７３０として扱う。
【００３４】
図１１には、命令コードを暗号化したまま実行可能なターゲットＣＰＵ２０８を含む情報処理装置が示される。図１１に示される情報処理装置ＳＹＳは、例えば、ＤＶＤ機器、ゲーム機、携帯電話機器等を代表とする所謂組み込み機器に備わった情報処理部などである。この情報処理装置ＳＹＳは、バスＢＳと、このバスＢＳによって相互に接続された揮発性メモリ（ＲＡＭ：Random Access Memory）１１１、不揮発性メモリ（ＲＯＭ）１１２、ターゲットＣＰＵ（ＣＰＵ：Central Processing Unit）２０８を含んでいる。ＲＯＭ１１２は、代表的には、フラッシュメモリやＥＥＰＲＯＭ（Electrically Erasable and Programmable Read Only Memory）などである。上記ＲＡＭ１１１及び上記ＲＯＭ１１２は、図１におけるメモリ２０９に対応する。
【００３５】
上記ＲＯＭ１１２には、組み込み機器の制御を行うためのプログラム（即ちファームウェア）が格納されている。このファームウェアは、予め、パーソナルコンピュータなどの外部装置１１５を用いて暗号化された上で格納される。すなわち、外部装置１１５は、ソースコードＳＣに対してソフトウエアとなる暗号化コンパイラＣＰ＿ＥＮを用いて暗号化を行い、これによって生成された暗号化ソースコードＳＣ＿ＥＮがＲＯＭ１１２に格納される。
【００３６】
上記ターゲットＣＰＵ２０８は、復号化モジュールＤＥ＿ＭＤと、秘密鍵ＫＥＹと、プロセッサモジュールＣＰＵ＿ＭＤを含んでいる。復号化モジュールＤＥ＿ＭＤは、詳細は後述するが、上記ＲＯＭ１１２に格納された暗号化コードであるメモリ出力コードＩＣＤｍを受け、これを、秘密鍵ＫＥＹを用いて復号化し、その結果となる復号化コードをＣＰＵ命令コードＩＣＤｃとしてプロセッサモジュールＣＰＵ＿ＭＤに出力する。プロセッサモジュールＣＰＵ＿ＭＤは、一般的なプロセッサが行うように、この復号化されたＣＰＵ命令コードＩＣＤｃ（すなわちソースコードＳＣと等価）のフェッチ、デコード、実行等によって所定の処理を行う。秘密鍵ＫＥＹは、例えば、ターゲットＣＰＵ２０８の内部で、ハードウェア回路や不揮発性メモリ等を用いて予め設定される。
【００３７】
図１２には、図１１に示される情報処理装置ＳＹＳにおいて、その復号化モジュールＤＥ＿ＭＤの概略的な構成例および動作例が概念的に示される。図１２に示されるように、復号化モジュールＤＥ＿ＭＤは、バッファＢＦ１〜ＢＦ３、復号化回路ＤＥ１〜ＤＥ３、秘密鍵ＫＥＹ１〜ＫＥＹ３、セレクタＳＥＬ１などによって構成される。復号化回路ＤＥ１は、バッファＢＦ１の出力を、秘密鍵ＫＥＹ１を用いて復号化した上でバッファＢＦ２に伝達し、復号化回路ＤＥ２は、バッファＢＦ２の出力を、秘密鍵ＫＥＹ２を用いて復号化した上でバッファＢＦ３に伝達する。復号化回路ＤＥ３は、バッファＢＦ３の出力を、秘密鍵ＫＥＹ３を用いて復号化する。セレクタＳＥＬ１は、復号化回路ＤＥ１の出力、復号化回路ＤＥ２の出力、復号化回路ＤＥ３の出力の中からいずれか一つを選択して出力する。
【００３８】
このように、復号化モジュールＤＥ＿ＭＤは、複数段（ここでは３段）のパイプラインと、パイプラインの各段の出力を選択するセレクタＳＥＬ１を備える。このような場合、パイプラインの段数を経過する（すなわちＤＥ１からＤＥ３に向かう）ほど暗号強度が強くなるが、その分、例えば分岐命令発生直後の最初の出力を取り出すまでのオーバーヘッドが増大することになる。そこで、セレクタＳＥＬ１によって暗号強度を変えた出力を取り出せるようにし、これによってオーバーヘッドの低減を図る。
【００３９】
例えば分岐命令発生直後、メモリＭＥＭ（例えば図１１のＲＯＭに対応）からのメモリ出力コードＩＣＤｍとして、サイクルｔ＝０で暗号化コードＣＤ’１が入力され、続いて、サイクルｔ＝１、ｔ＝２、ｔ＝３で暗号化コードＣＤ’２、ＣＤ’３、ＣＤ’４が順次入力された場合を想定する。この暗号化コードＣＤ’１〜ＣＤ’４は、順次バッファＢＦ１に入力され、パイプラインで処理される。
【００４０】
ここで、復号化モジュールＤＥ＿ＭＤは、１番目の入力コードとなるＣＤ’１に対しては、１段目のパイプライン（復号化回路ＤＥ１）を介して復号化した後にセレクタＳＥＬ１によって復号化コードＣＤ１［１］を出力する。次いで、２番目の入力コードとなるＣＤ’２に対しては、２段目のパイプライン（復号化回路ＤＥ１，ＤＥ２）を介して復号化した後にセレクタＳＥＬ１によって復号化コードＣＤ２［２］を出力する。その後、３番目以降の入力コードとなるＣＤ’３，ＣＤ’４に対しては、３段目のパイプライン（復号化回路ＤＥ１〜ＤＥ３）を介して復号化した後にセレクタＳＥＬ１によって復号化コードＣＤ３［３］，ＣＤ４［３］を出力する。尚、ＣＤｎ［ｋ］の［ｋ］はパイプラインの段数（暗号強度）を表している。
【００４１】
このような動作を用いると、ＣＤ１［１］はｔ＝１で出力され、ＣＤ２［２］はｔ＝３で出力され、ＣＤ３［３］、ＣＤ４［３］は、それぞれｔ＝５、ｔ＝６で出力されることになる。一方、仮に、暗号強度を変えない場合には、ＣＤ１［３］がｔ＝３で出力され、以降ＣＤ２［３］〜ＣＤ４［３］がｔ＝４〜ｔ＝６で順次出力されることになる。したがって、１番目と２番目の入力コード（ＣＤ’１，ＣＤ’２）に対しては、暗号強度を弱めた分、オーバーヘッドを低減でき、３番目以降の入力コード（ＣＤ’３，ＣＤ’４）に対しては、パイプライン処理に伴い特にオーバーヘッドもなく暗号強度を高めることができる。これによって、全体として見た場合に、少ないオーバーヘッドで高い暗号強度を実現可能となる。
【００４２】
尚、パイプラインの段数は、勿論、３段に限定されるものではなく、２段以上であればよい。例えば４段とした場合は、ＣＤ１［１］がｔ＝１で出力され、ＣＤ２［２］がｔ＝３で出力され、ＣＤ３［３］がｔ＝５で出力され、ＣＤ４［４］がｔ＝７で出力され、以降、ＣＤ５［４］、ＣＤ６［４］、…が、ｔ＝８、ｔ＝９、…で出力されることになる。この場合、ＣＤ’１〜ＣＤ’３の復号化に伴うオーバーヘッドを低減できる。
【００４３】
図１３には、図１１に示される情報処理装置ＳＹＳにおける復号化モジュールＤＥ＿ＭＤの詳細な構成例が示される。図１３の復号化モジュールＤＥ＿ＭＤは、暗号強度制御ブロックＣＴＬ＿ＢＫ、復号化ブロックＤＥ＿ＢＫ、およびセレクタＳＥＬ２を備えている。暗号強度制御ブロックＣＴＬ＿ＢＫは、プロセッサモジュールＣＰＵ＿ＭＤからの入力信号として、条件分岐発生信号ＢＲｃ、無条件分岐発生信号ＪＰｃ、バスコマンド信号ＢＣＭＤｃ、アドレス信号ＡＤＲｃ、データ信号ＤＡＴｃ、命令フェッチ信号ＩＦｃなどを受ける。ＢＲｃおよびＪＰｃは、ＣＰＵ＿ＭＤのプログラム実行過程で分岐が行われた場合にＣＰＵ＿ＭＤによって出力される。ＢＣＭＤｃ、ＡＤＲｃ、ＤＡＴｃは、メモリに向けたアクセス信号に該当する。ＩＦｃは、メモリに対するデータアクセスではなく、命令コードアクセスの場合に出力される。命令コードアクセスの場合、上記メモリは、図１１におけるＲＯＭ１１２に該当する。命令コードをＲＡＭに展開して使用する場合、上記メモリは、図１１におけるＲＡＭ１１１に該当する。
【００４４】
暗号強度制御ブロックＣＴＬ＿ＢＫは、これらの入力信号をプロセッサモジュールＣＰＵ＿ＭＤから受け、命令コードアクセスの場合に、メモリに対してＢＣＭＤｃ、ＡＤＲｃに対応するバスコマンド信号ＢＣＭＤｍおよびアドレス信号ＡＤＲｍを発行して命令コードアクセスを行う。メモリは、このＢＣＭＤｍおよびＡＤＲｍを受けて、メモリ出力コード（すなわち暗号化コード）ＩＣＤｍおよびバス準備信号ＢＲＤＹｍを出力する。このメモリ出力コード（暗号化コード）ＩＣＤｍは、復号化ブロックＤＥ＿ＢＫに入力され、バス準備信号ＢＲＤＹｍはＣＴＬ＿ＢＫに入力される。尚、バス準備信号ＢＲＤＹｍは、メモリからメモリ出力コードＩＣＤｍが読み出される毎に、当該サイクルで生成される信号である。
【００４５】
復号化ブロックＤＥ＿ＢＫは、メモリ出力コードＩＣＤｍを復号化した後、セレクタＳＥＬ２の一方の入力に出力する。この復号化の際に、暗号強度制御ブロックＣＴＬ＿ＢＫは、図１２を参照して述べたような暗号強度（パイプライン段数）を制御するための選択信号Ｓと、復号化の鍵の一部として利用するアドレス信号ＡＤＲｍを復号化ブロックＤＥ＿ＢＫに出力する。尚、セレクタＳＥＬ２の他方の入力には、メモリ出力コードＩＣＤｍが復号化ブロックＤＥ＿ＢＫを介さずに伝送される。暗号強度制御ブロックＣＴＬ＿ＢＫは、この選択信号Ｓを用いて暗号強度を制御する際に、条件分岐発生信号ＢＲｃ、無条件分岐発生信号ＪＰｃ、およびバス準備信号ＢＲＤＹｍを用いて制御を行う。すなわち、暗号強度制御ブロックＣＴＬ＿ＢＫは、図１２で述べたように、ＢＲｃ，ＪＰｃを受けた際、その直後にメモリから読み出した命令コードの暗号強度を弱め、その後、ＢＲＤＹｍを受ける毎に暗号強度を強めていくような制御を行う。
【００４６】
また、暗号強度制御ブロックＣＴＬ＿ＢＫは、セレクタＳＥＬ２を選択信号Ｓｄｔによって制御すると共に、復号化ブロックＤＥ＿ＢＫからセレクタＳＥＬ２を介してＣＰＵ命令コード（すなわち復号化コード）ＩＣＤｃが出力される際には、当該サイクル毎にバス準備信号ＢＲＤＹｃを出力する。プロセッサモジュールＣＰＵ＿ＭＤは、このＣＰＵ命令コードＩＣＤｃとバス準備信号ＢＲＤＹｃを受けることで、所定の処理を行う。尚、セレクタＳＥＬ２は、復号化を行わないサイクル（例えばメモリに対するデータアクセスなど）に対応するために備わっている。
【００４７】
図１４には、図１３の復号化モジュールＤＥ＿ＭＤにおける復号化ブロックＤＥ＿ＢＫの詳細な構成例が示される。図１４の復号化ブロックＤＥ＿ＢＫは、レジスタＲＥＧ４０，ＲＥＧ４１ａ〜ＲＥＧ４３ａ，ＲＥＧ４１ｂ〜ＲＥＧ４３ｂ、排他的論理和回路ＥＯＲ４０，ＥＯＲ４１ａ〜ＥＯＲ４３ａ，ＥＯＲ４１ｂ〜ＥＯＲ４３ｂ、非線形変換回路ＮＬ１〜ＮＬ３、セレクタＳＥＬ１，ＳＥＬ４１〜ＳＥＬ４４などを含む。
【００４８】
排他的論理和回路ＥＯＲ４０は、メモリ出力コードＩＣＤｍと当該コードが格納されていたアドレス信号ＡＤＲｍとの排他的論理和演算を行う。この演算は、復号化アルゴリズム（暗号化アルゴリズム）の一部となる演算である。尚、ここでは、ＡＤＲｍから圧縮回路ＣＰＲを経て排他的論理和回路ＥＯＲ４０に対する入力が行われているが、この圧縮回路ＣＰＲは、ＡＤＲｍとメモリ出力コードＩＣＤｍのビット幅を等しくするものであり、元々等しい場合には特に必要ない。レジスタＲＥＧ４０は、暗号化コードフェッチ用の回路であり、この排他的論理和回路ＥＯＲ４０の演算結果をラッチする。
【００４９】
レジスタＲＥＧ４０の出力は、排他的論理和回路ＥＯＲ４１ａと非線形変換回路ＮＬ１と排他的論理和回路ＥＯＲ４１ｂの処理を経ることで１段階目の復号化が行われる。排他的論理和回路ＥＯＲ４１ａは、レジスタＲＥＧ４０の出力と秘密鍵ＫＥＹ１との排他的論理和演算を行う。非線形変換回路ＮＬ１は、この排他的論理和演算結果を非線形変換する。排他的論理和回路ＥＯＲ４１ｂは、この非線形変換結果とレジスタＲＥＧ４１ａに格納されている前サイクルのコードとの排他的論理和演算を行う。非線形変換回路ＮＬ１は、特に限定されないが、テーブル等を用いて、あるビット列を他のビット列に変換する。レジスタＲＥＧ４１ａには、レジスタＲＥＧ４０の出力がセレクタＳＥＬ４１の一方の入力を介して伝送される。また、レジスタＲＥＧ４１ａの出力は、セレクタＳＥＬ４４の一方の入力を介して排他的論理和回路ＥＯＲ４１ｂに伝送される。
【００５０】
１段階目の復号化処理結果となる排他的論理和回路ＥＯＲ４１ｂの出力は、排他的論理和回路ＥＯＲ４２ａと非線形変換回路ＮＬ２と排他的論理和回路ＥＯＲ４２ｂの処理を経ることで２段階目の復号化が行われる。排他的論理和回路ＥＯＲ４２ａは、排他的論理和回路ＥＯＲ４１ｂの出力と秘密鍵ＫＥＹ２との排他的論理和演算を行う。非線形変換回路ＮＬ２は、この排他的論理和演算結果を非線形変換する。排他的論理和回路ＥＯＲ４２ｂは、この非線形変換結果とレジスタＲＥＧ４２ａに格納されている前サイクルのコードとの排他的論理和演算を行う。レジスタＲＥＧ４２ａには、排他的論理和回路ＥＯＲ４１ｂの出力がセレクタＳＥＬ４２の一方の入力を介して伝送される。また、レジスタＲＥＧ４２ａの出力は、排他的論理和回路ＥＯＲ４２ｂに伝送される。
【００５１】
２段階目の復号化処理結果となる排他的論理和回路ＥＯＲ４２ｂの出力は、排他的論理和回路ＥＯＲ４３ａと非線形変換回路ＮＬ３と排他的論理和回路ＥＯＲ４３ｂの処理を経ることで３段階目の復号化が行われる。排他的論理和回路ＥＯＲ４３ａは、排他的論理和回路ＥＯＲ４２ｂの出力と秘密鍵ＫＥＹ３との排他的論理和演算を行う。非線形変換回路ＮＬ３は、この排他的論理和演算結果を非線形変換する。排他的論理和回路ＥＯＲ４３ｂは、この非線形変換結果とレジスタＲＥＧ４３ａに格納されている前サイクルのコードとの排他的論理和演算を行う。レジスタＲＥＧ４３ａには、排他的論理和回路ＥＯＲ４２ｂの出力がセレクタＳＥＬ４３の一方の入力を介して伝送される。また、レジスタＲＥＧ４３ａの出力は、排他的論理和回路ＥＯＲ４３ｂに伝送される。
【００５２】
セレクタＳＥＬ１は、１段階目の復号化処理結果（ＥＯＲ４１ｂの出力）、２段階目の復号化処理結果（ＥＯＲ４２ｂの出力）、および３段階目の復号化処理結果（ＥＯＲ４３ｂの出力）の中からいずれか一つを選択し、それをＣＰＵ命令コードＩＣＤｃとして出力する。選択信号Ｓ１が入力された場合には、排他的論理和回路ＥＯＲ４１ｂの出力が選択され、選択信号Ｓ２が入力された場合には、排他的論理和回路ＥＯＲ４２ｂの出力が選択され、選択信号Ｓ３が入力された場合には、排他的論理和回路ＥＯＲ４３ｂの出力が選択される。尚、セレクタＳＥＬ４４の他方の入力は初期値ＩＶとなっており、この初期値ＩＶは、分岐命令発生直後の最初の命令コードに対して１段階目の復号化処理を行う際に、前サイクルのコードの代わりに用いられる。
【００５３】
また、レジスタＲＥＧ４１ｂ〜ＲＥＧ４３ｂは、復号化処理の過程で割り込み命令が発生した際の退避レジスタとして用いられる。すなわち、割り込み命令が発生した際、レジスタＲＥＧ４１ｂは、レジスタＲＥＧ４１ａの出力（ＳＥＬ４４の出力）をラッチし、レジスタＲＥＧ４２ｂは、レジスタＲＥＧ４２ａの出力をラッチし、レジスタＲＥＧ４３ｂは、レジスタＲＥＧ４３ａの出力をラッチする。一方、割り込み命令から復帰する際には、レジスタＲＥＧ４１ｂの出力が、セレクタＳＥＬ４１の他方の入力を介してレジスタＲＥＧ４１ａに戻され、レジスタＲＥＧ４２ｂの出力が、セレクタＳＥＬ４２の他方の入力を介してレジスタＲＥＧ４２ａに戻され、レジスタＲＥＧ４３ｂの出力が、セレクタＳＥＬ４３の他方の入力を介してレジスタＲＥＧ４３ａに戻される。
【００５４】
レジスタＲＥＧ４１ｃは、割り込みが発生した際に、割り込み時のレジスタＲＥＧ４１ｂの値を保存し、割り込みからの復帰時にレジスタＲＥＧ４１ｃに格納された値がレジスタＲＥＧ４１ｂに書き込まれる。同様に、レジスタＲＥＧ４２ｃ、レジスタＲＥＧ４３ｃには割り込み発生時にそれぞれレジスタＲＥＧ４２ｂ、ＲＥＧ４２ｃの値を格納し、割り込みからの復帰時にレジスタＲＥＧ４２ｃ、ＲＥＧ４３ｃに格納された値がそれぞれレジスタＲＥＧ４２ｂ、ＲＥＧ４３ｂに書き込まれる。レジスタＲＥＧ４１ｃ、ＲＥＧ４２ｃ、ＲＥＧ４３ｃは、ターゲットＣＰＵのアドレス空間上にマッピングされており、ターゲットＣＰＵから少なくとも書き込みを行うことが可能なように構成されている。
【００５５】
図１５には、命令コードの変換にスクランブルを用いた場合の復号化ブロックＤＥ＿ＢＫの構成例が示される。図１５に示される構成例では、線形帰還シフトレジスタ（ＬＦＳＲ）をアドレス値で初期化し、メモリ出力コードＩＣＤｍがメモリから読み出される際に、メモリ出力コードＩＣＤｍが命令語である場合には、線形帰還シフトレジスタ（ＬＦＳＲ）の値との排他的論理和演算を排他的論理和回路ＥＯＲ１５２で計算し、ＩＣＤｃに値が出力される。メモリ出力コードＩＣＤｍが命令語でない場合には、セレクタＳＥＬ２により、排他的論理和演算を行わない値が選択信号Ｓｄｔにより選択され、ＣＰＵ命令コードＩＣＤｃに出力される。
【００５６】
図１６には、命令コードの変換に圧縮・伸長を用いた場合の復号化ブロックＤＥ＿ＢＫの構成例が示される。図１６に示される構成例は、命令語は圧縮されて格納されており、伸張モジュールＤＥＣＯＭＰにより、圧縮前の命令語が得られる。メモリ出力コードＩＣＤｍが命令語である場合には、ＤＥＣＯＭＰの出力値をＩＣＤｃに出力される。メモリ出力コードＩＣＤｍが命令後でない場合には、セレクタＳＥＬ２により、メモリ出力コードＩＣＤｍが選択信号Ｓｄｔにより選択され、ＣＰＵ命令コードＩＣＤｃに出力される。
【００５７】
図１に示されるデバッグ装置によれば、以下の作用効果を奏する。
【００５８】
ＰＣ２０１上に実装されたデバッガ２０２は、ターゲットＣＰＵ２０８と通信を行う代わりに、トランスレータ２０４と通信路２０３を介して接続し、暗号化されていないＣＰＵに対してデバッグを行う場合と同様の通信を、トランスレータ２０４に対して行う。トランスレータ２０４は、デバッガ２０２より送られてきたリクエストを変換し、変換されたリクエストをターゲットＣＰＵ２０８に通信路２０７を介して送信する。ターゲットＣＰＵ２０８から通信路２０７を介してレスポンスが返信されると、トランスレータ２０４は、コードブロック情報２０５と鍵情報２０６を用いて、復号化等の必要な変換を行い、変換済みのレスポンスを通信路２０３を介して、デバッガ２０２に送る。トランスレータ２０４は、必要に応じて、デバッガ２０２からのリクエストを複数のリクエストに変換して、ターゲットＣＰＵ２０８にリクエストを１個ずつ送り、それぞれのリクエストに対するレスポンスを受け取り、すべての変換済みリクエストの処理が終わった後に、デバッガ２０２に１個のレスポンスを返す。これにより、デバッガ２０２からトランスレータ２０４を見た場合、通常のＣＰＵ、つまり、暗号化されていないＣＰＵが接続されているように見える。同時にターゲットＣＰＵ２０８からトランスレータ２０４を見た場合、暗号化された命令列を解釈できるデバッガが接続されているように見える。このため、デバッガ２０２は、命令列が暗号化されていないプログラムのデバッグ手順で、命令列が暗号化されたプログラム（ターゲットＣＰＵ２０８で実行されるプログラム）のデバッグを行うことができるので、暗号化されていないＣＰＵ用のデバッガを用いて、ターゲットＣＰＵ上で動作する暗号化された命令列を含むプログラムのデバッグを容易に行うことができる。
【００５９】
＜実施の形態２＞
図２には、本発明にかかるデバッグ装置１００の別の構成例が示される。図２に示される構成によれば、ＰＣ３０１と、ターゲットシステム２１０との間にトランスレータ装置２００が配置される。上記ＰＣ３０１は、記憶装置３０２、ＣＰＵ３０４、及びインタフェース（Ｉ／Ｆ）３０５を含んで成る。記憶装置３０２には、上記ＣＰＵで実行されるデバッガプログラム３０３が格納される。ＣＰＵ３０４は、インタフェース３０５を介してトランスレータ装置２００に結合される。ターゲットシステム２１０は、メモリ２０９、ターゲットＣＰＵ２０８、インタフェース３１９を含む。上記ターゲットＣＰＵ２０８は、上記インタフェース３１９を介してトランスレータ装置２００に結合される。上記トランスレータ装置２００は、第１インタフェース１０１、制御用ＣＰＵ１０２、第２インタフェース１０３、及び記憶装置１０４を含む。記憶装置１０４には、トランスレータを形成するための変換プログラム１０５、暗号化・復号化に必要な情報１０６などが格納される。暗号化・復号化に必要な情報１０６には、鍵情報３０６やコードブロック情報３０７が含まれ、それらは、ＰＣ３０１を介して伝達され、制御ＣＰＵ１０２によって記憶装置１０４に書き込まれる。また、記憶装置１０７には、上記制御用ＣＰＵ１０２での演算処理に使用されるワークエリアが形成される。制御用ＣＰＵ１０２は、記憶装置１０４に格納された変換プログラム１０５を実行する。ＰＣ３０１は、第1インタフェース１０１を介して、デバッガからのリクエストを受け取り、リクエストを解析し、必要に応じて記憶装置１０４に記憶されている暗号化・復号化に必要な情報１０６を用いて、暗号化などの変換をリクエストに施す。さらに制御用ＣＰＵ１０２は、第２インタフェース１０３を介して、ターゲットシステム２１０に接続される。制御用ＣＰＵ１０２は、ターゲットＣＰＵ２０８に変換済みのリクエストを送り、第２インタフェース１０３を介して、レスポンスを受け取る。受け取ったレスポンスは、必要に応じて、暗号化・復号化に必要な情報１０６を用いて、復号化などの変換をレスポンスに施し、第１インタフェース１０１を介して、変換済みのレスポンスをデバッガに対して送る。
【００６０】
このように、ＰＣ３０１と、ターゲットシステム２１０との間に介在されたトランスレータ装置２００において、変換プログラム１０５を制御用ＣＰＵ１０２で実行することにより、図１に示されるのと同様の機能を有するトランスレータを形成することができる。これにより、図１に示されるのと同様の作用効果を得ることができる。
【００６１】
＜実施の形態３＞
図３には、本発明にかかるデバッグ装置１００の別の構成例が示される。本例においてトランスレータは、インサーキットエミュレータ３１２の制御用ＣＰＵ３１０のファームウェアを記憶する記憶装置３１３上に、トランスレータプログラム３１３として実装されている。インサーキットエミュレータ３１２は、インタフェース３０９、制御用ＣＰＵ３１０、記憶装置３１２、ターゲットＣＰＵ３１１、記憶装置３１６を含む。上記ターゲットＣＰＵ３１１は、図示されないユーザシステムに搭載されるチップと等価なエミュレーション用チップとされる。このターゲットＣＰＵ３１１からユーザケーブル３１７が引き出され、そのケーブル３１７の先端に設けられたソケットが、図示されないユーザシステムに結合される。ターゲットＣＰＵ３１１では、デバッグ対象とされるユーザプログラムが実行される。このユーザプログラムは暗号化されて、記憶装置３１６に格納されている。上記ターゲットＣＰＵ３１１は、記憶装置３１６内の暗号化された命令列を動的に復号化して実行する。上記ターゲットＣＰＵ３１１と上記制御用ＣＰＵ３１０との間では、デバッグのために各種制御信号のやり取りが行われる。
【００６２】
トランスレータプログラム３１３が制御用ＣＰＵ３１０で実行されることによりトランスレータが形成される。このトランスレータプログラム３１３に基づくトランスレータにより、鍵情報記憶領域３１４の鍵情報と、コードブロック記憶領域３１５のコードブロック情報とを用いて、ＰＣ３１２に実装されたインタフェース３０５を介して送出されるリクエストが、インサーキットエミュレータ３０９内に取り込まれる。そして、必要に応じて上記リクエストが変換され、ターゲットＣＰＵ３１１に対して変換されたリクエストが送出される。リクエストの実行結果に対応するレスポンスついても、必要に応じて、鍵情報記憶領域３１４に記憶された鍵情報と、コードブロック記憶領域３１５に記憶されたコードブロック情報を用いて、復号化等の変換を行い、変換されたレスポンスをインタフェース３０９、インタフェース３０５を介して、ＰＣ３０１上のデバッガプログラム３０３に返信する。トランスレータプログラム３１３によるリクエストとレスポンスの変換により、デバッガプログラム３０３からは、インサーキットエミュレータ３１２が通常のＣＰＵ（暗号化されていないＣＰＵ）をエミュレートしているように見える。
【００６３】
デバッガを実現するための基本的な機能としては、メモリライト、メモリリード、レジスタライト、レジスタリード、プログラム実行再開、ブレークポイントの設定・解除、ステップ実行等が挙げられる。このうち、ブレークポイントの設定、およびステップ実行は、その他の機能の組み合わせで実現できる。例えばブレークポイントをソフトウエアブレークポイントで実現する場合、ブレークポイントは格納されている元の命令を読み出して保存しておき、代わりに割り込みを発生させる命令を書き込んでおき、実行再開リクエストを発行する。プログラムカウンタが割り込み命令に到達して割り込みが発生して停止したら、保存しておいた元の命令をメモリライトで書き戻す。これにより、ブレークポイントをソフトウェアブレークで実現できる。
【００６４】
同様に、ステップ実行は、プログラムカウンタの値をレジスタリードにより読み出し、読み出されたアドレスからメモリリードで命令列を読み出して、簡単なデコードを行い、プログラムカウンタが命令実行後に移行するアドレスを計算する。この計算で求めたアドレスに、ソフトウエアブレークポイントを前記の手順で設定し、実行再開リクエストを発行、設定したブレークポイントで停止したら、ソフトウエアブレークポイントを設定したアドレスをメモリライトで元の命令に戻すことで実現できる。
【００６５】
したがって、ブレークポイントの設定と、ステップ実行は、それらの機能で必要となるメモリライト、メモリリード等のリクエストが、トランスレータプログラム３１３に基づくトランスレータによりターゲットＣＰＵ３１１向けに変換されることにより、容易に実現される。
【００６６】
次に、上記ブレークポイントの設定手順について説明する。
【００６７】
図１８にはターゲットＣＰＵ３１１で管理されるメモリマップが示される。ここでは、下位アドレス側から第1コードブロック（ＣＯＤＥＢＬＯＣＫ１）、第２コードブロック（ＣＯＤＥＢＬＯＣＫ２）、第３コードブロック（ＣＯＤＥＢＬＯＣＫ３）の３つのコードブロックが存在する例が示される。それぞれ３つのコードブロックの先頭アドレスは、ＥＡＤＲ１，ＥＡＤＲ２，ＥＡＤＲ３である。図１８では、３つのコードブロックが設定されており、下位アドレス側から順に、ＢＲＫＰ２１，ＢＲＫＰ２２、ＢＲＫＰ３１であり、ＢＲＫＰ２１およびＢＲＫＰ２２は第２コードブロック（ＣＯＤＥＢＬＯＣＫ２）内に設定されている。ここで、プログラムカウンタがＰＯＳ１を指し示した状態でプログラムの実行が停止されているものとする。この状態で、プログラム実行を再開してブレークポイントで停止する場合、２つのブレークポイント、すなわちＢＲＫＰ２１もしくは、ＢＲＫＰ３１にのみたどり着く。これは、コードブロックが、事前に実行される命令が一意に決まる命令列を単位としているため、ひとつのコードブロックに２つのブレークポイントが存在する場合、アドレスで下位側に存在するブレークポイントを通過した後にはじめて、その後のブレークポイントを通過する。図１８の例では、ＢＲＫＰ２２のブレークポイントは、ＢＲＫＰ２１のブレークポイントを通過した後に始めてたどり着くことができる。したがって、プログラムの停止状態から再開して、ブレークポイントＢＲＫＰ２２で停止するには、少なくともＢＲＫＰ２１とＢＲＫＰ２２の間に、プログラムカウンタの値がなければならない。それ以外の場合は、処理の制御フローがＢＲＫＰ２２にたどり着く場合でも、一旦ＢＲＫＰ２１のブレークポイントで停止しなければならない。通常のデバッカでは、プログラムがブレークポイントで停止した場合、すべてのブレークポイントを解除し、実行を再開する際に、全てのブレークポイントを設定しなおす処理が行われる。ブレークポイントの設定、解除はメモリの読み込み、書き込みが大量に発生するため、不要なブレークポイントの設定は、可能な限り省略を試みる。その際には、実行が停止したプログラムカウンタの位置、コードブロック、およびブレークポイントのコードブロック内での位置に基づき、現在のプログラムカウンタの位置からでは、他のブレークポイントを通過しないとたどり着けないブレークポイントの設定は行わないようにする。つまり、ターゲットＣＰＵ３１１へのブレークポイント設定指示の送出が禁止される。
【００６８】
また、停止中のプログラムのプログラムカウンタが指し示すコードブロックとは別のコードブロックに設定されたブレークポイントについては、コードブロック中の先頭に一番近いブレークポイントにのみ到達可能であるので、それ以外のブレークポイントについては設定を行わない。停止中のプログラムカウンタが指し示すコードブロックと同じコードブロックに存在するブレークポイントについては、コードブロックの先頭から一番近いブレークポイントと、プログラムカウンタよりも上位に位置するブレークポイントのうちで、一番プログラムカウンタが指し示すアドレスに近いブレークポイントを設定する。コードブロックの先頭から一番近いブレークポイントと、プログラムカウンタよりも上位に位置するブレークポイントのうちで、一番プログラムカウンタが指し示すアドレスに近いブレークポイントが同一となる場合もある。
【００６９】
図４には、トランスレータプログラム３１３に基づくトランスレータにおけるメモリリード処理のフローチャートが示される。暗号化メモリリード４０１は、リクエストで指定されたアドレスを含むコードブロックが存在するかを検索し（４０２）、指定されたアドレス領域がコードブロック内か否かを判定する（４０３）。指定されたアドレス領域が、コードブロック内ではない場合は、データに対するリードリクエスト（読み込みリクエスト）であるので、変換は不要である。したがって、リクエストをそのままターゲットＣＰＵ３１１に転送し（４０６）、ターゲットＣＰＵ３１１からのレスポンスをそのままデバッガに転送して（４０７）、処理を終了する（４０８）。リクエストで指定されたメモリ領域がコードブロック内であった場合は、命令列の読み込みであり、コードブロックの先頭から指定されたアドレス範囲までのデータが復号化に必要なので、アドレス範囲をコードブロックの先頭から指定アドレス範囲の終端までのアドレス範囲に対するメモリリードリクエストをターゲットＣＰＵ３１１に対して送る（４０４）。つまり、アドレス範囲の命令列を復元するために必要となるアドレス範囲よりも前の命令列も一緒に読み込まれるように、リードリクエストのアドレス範囲を拡張する変換が行われる。次に、ターゲットＣＰＵ３１１から読み出された値を復号化し、最初のリードリクエストで指定されたアドレス範囲のデータ（命令列）を取り出して、デバッガに返信して処理を終了する（４０５，４０８）。メモリリードリクエストを前記のようにトランスレータプログラム３１３に基づくトランスレータで変換することで、ターゲットＣＰＵ３１１に対するメモリリードリクエストを、暗号化されていないＣＰＵに対するメモリリードリクエスト操作で実現する。
【００７０】
図５には、トランスレータプログラムに基づくトランスレータにおけるメモリライト処理のフローチャートが示される。暗号化メモリライト（５０１）は、リクエストで指定されたリクエストで指定されたアドレスを含むコードブロックが存在するかを検索し（５０２）、指定されたアドレス領域がコードブロック内か否かを判定する（５０３）。指定されたアドレス領域が、コードブロック内ではない場合は、データに対するライトリクエスト（書き込みリクエスト）であるので、変換は不要である。したがって、リクエストをそのままターゲットＣＰＵ３１１に転送し（５０６）、ターゲットＣＰＵ３１１からのレスポンスをそのままデバッガに転送して（５０７）、処理を終了する（５０８）。リクエストで指定されたメモリ領域がコードブロック内であった場合は、命令列への書き込みであり、データの書き換えを行った場合、書き換えを行った以降の命令列の暗号化にも影響をあたえるため、指定されたメモリ領域を含むコードブロック全体のデータが必要になる。そこで、アドレス範囲をコードブロックの先頭からコードブロックの終端までのアドレス範囲に対するメモリリードリクエストをターゲットＣＰＵ３１１に対して送る（５０４）。次に、ターゲットＣＰＵ３１１から読み出された値を復号化し、最初のライトリクエストで指定されたアドレス範囲のデータを書き換え、コードブロックの再暗号化を行い、ライトリクエストで指定されたアドレス範囲の先頭から、コードブロックの終端に対応するアドレス範囲のデータを取り出して、ターゲットＣＰＵ３１１に対して、メモリライトリクエストを発行し（５０５）、処理を終了する（５０８）。メモリライトリクエストを前記のようにトランスレータプログラム３１３に基づくトランスレータで変換することで、ターゲットＣＰＵ３１１に対するメモリライトリクエストを、暗号化されていないＣＰＵに対するメモリライトリクエスト操作で実現する。
【００７１】
図６には、トランスレータプログラム３１３に基づくトランスレータにおけるステップ実行処理のフローチャートが示される。暗号化ステップ実行（６０１）は、まずターゲットＣＰＵ３１１からレジスタリードリクエストにより、現在のプログラムカウンタの値を読み出し、暗号化メモリリードリクエストにより、プログラムカウンタからｎバイト分の命令コードを読み出す。ここで、ｎは、命令を実行後にプログラムカウンタの遷移先の推定に必要な最小限のバイト数であり、ターゲットＣＰＵ３１１の命令コードアーキテクチャに依存する。次に、読み出した命令コードから、プログラムカウンタが制御命令であるか否かを判定し（６０３）、制御命令であった場合、その制御命令で分岐するか否かを判定する（６０４）。ここで、無条件分岐命令や、サブルーチンコール命令は、分岐と判定する。条件分岐命令の場合は、分岐条件を検査し、分岐するか否かを判定する。分岐すると判定された場合、分岐先アドレスを変数「ｄｅｓｔ」に代入し（６０６）、ステップ６０７に進む。ステップ６０３で制御命令でないと判断された場合、およびステップ６０４で分岐しないと判定された場合、プログラムカウンタに命令コードのバイト数を加算した結果を変数「ｄｅｓｔ」に代入し（６０５）、ステップ６０７の処理に進む。ステップ６０７の処理は、変数「ｄｅｓｔ」で指定された１ワードをメモリリードリクエストで読み出してワークエリア１０７に保存し、割り込みを発生させる命令を暗号化メモリライトリクエストでターゲットＣＰＵ３１１のメモリに書き込む（６０７）。コードブロックの先頭から現在のプログラムカウンタ＋２ワードをメモリリードリクエストでターゲットＣＰＵ３１１から読み出し（６０８）、復号化器の内部状態を計算（６０９）。メモリライトリクエストで、ターゲットＣＰＵ３１１内の復号化器の内部状態退避レジスタを書き換える（６１０）。次にターゲットＣＰＵ３１１に実行再開コマンドを発行し、レスポンスを待つ（６１１）。レスポンスが返ってきたら、変数「ｄｅｓｔ」の１ワードに、メモリライトリクエストを用いて、保存していた値を書き戻す（６１２）。ステップ６１１で受け取ったレスポンスを、デバッガに送信し（６１３）、終了する（６１４）。ステップ実行リクエストを前記のようにトランスレータプログラム３１３に基づくトランスレータで変換することで、ターゲットＣＰＵ３１１に対するステップ実行リクエストを、暗号化されていないＣＰＵに対するステップ実行リクエスト操作で実現する。
【００７２】
図７には、トランスレータプログラム３１３に基づくトランスレータにおけるステップ実行処理の別のフローチャートが示される。暗号化実行再開（７０１）は、先ずターゲットＣＰＵ３１１からレジスタリードリクエストにより、現在のプログラムカウンタの値を読み出す。次に、コードブロックの先頭から現在のプログラムカウンタ＋２ワードをメモリリードリクエストでターゲットＣＰＵ３１１から読み出し（７０２）、復号化器の内部状態を計算する（７０３）。メモリライトリクエストで、ターゲットＣＰＵ３１１内の復号化器の内部状態退避レジスタを書き換える（７０４）。次にターゲットＣＰＵ３１１に実行再開コマンドを発行し、レスポンスを待つ（７０５）。レスポンスが返ってきたら、そのレスポンスをデバッガに送信し（７０６）、終了する（７０７）。実行再開リクエストを前記のようにトランスレータプログラム３１３に基づくトランスレータで変換することで、ターゲットＣＰＵ３１１に対する実行再開リクエストを、暗号化されていないＣＰＵに対する実行再開リクエスト操作で実現する。
【００７３】
図８には、トランスレータプログラム３１３に基づくトランスレータにおけるレジスタリード処理のフローチャートが示される。暗号化レジスタリード（８０１）は、デバッガから受け取ったリクエストをターゲットにそのまま転送し（８０２）、ターゲットからのレスポンスをそのままデバッガに転送する（８０３）ことで、レジスタリードを実現している。レジスタリードリクエストでは、トランスレータプログラム３１３に基づくトランスレータはデバッガとターゲットの間でリクエストとレスポンスをそのまま転送することで、実現している。
【００７４】
図９には、トランスレータプログラム３１３に基づくトランスレータにおけるレジスタライト処理のフローチャートが示される。暗号化レジスタリード（９０１）は、デバッガから受け取ったリクエストをターゲットにそのまま転送し（９０２）、ターゲットからのレスポンスをそのままデバッガに転送する（９０３）ことで、レジスタライトを実現している。レジスタライトリクエストでは、トランスレータプログラム３１３に基づくトランスレータはデバッガとターゲットの間でリクエストとレスポンスをそのまま転送することで、実現している。
【００７５】
図１０には、トランスレータプログラム３１３に基づくトランスレータと通信を行うターゲットＣＰＵ３１１の割り込み処理のフローチャートが示される。ソフトウエアブレークポイントにより割り込みが発生すると、ターゲットＣＰＵ３１１は、割り込みルーチン（１００１）に実行制御が移る。割り込みルーチンでは、最初にレジスタをワークエリアへ退避する（１００２）。その後、トランスレータプログラム３１３に基づくトランスレータからのレジスタへのリードやライト処理は、レジスタが退避されたワークエリアに対して行われる。次に、停止シグナルを返信する（１００３）。この停止シグナルは、実行再開リクエストに対するレスポンスを兼ねている。次にパケットの受信待ち（１００３）に入り、パケットが到着するのを待つ。パケットが届いたら、実行再開リクエストか否かを判定し（１００４）、実行再開リクエストであった場合は、ステップ１００２で退避したレジスタをワークエリアから復元し（１００６）、割り込み処理から復帰する（１００７）。ステップ１００３で受信したパケットが、実行再開リクエストでなかった場合は、それぞれのリクエスト内容に応じた解釈、実行を行い（１００５）、再びパケット待ちの処理に戻る（１００３）。
【００７６】
実施の形態３によれば、以下の作用効果を得ることができる。
【００７７】
（１）トランスレータプログラム３１３の実行によるトランスレータは、デバッガプログラム３０３の実行によるデバッガから伝達された通信内容をターゲットＣＰＵ３１１に対応する内容に変換して上記ターゲットＣＰＵ３１１に送出し、上記ターゲットＣＰＵ３１１から伝達された通信内容を上記デバッガに対応する内容に変換して上記デバッガに送出するようにしている。このため、実施の形態１，２の場合と同様の作用効果を得ることができる。
【００７８】
（２）プログラム実行が停止したプログラムカウンタの位置、コードブロック、およびブレークポイントのコードブロック内での位置に基づき、現在のプログラムカウンタの位置からでは、他のブレークポイントを通過しないとたどり着けないブレークポイントの設定について、ターゲットＣＰＵ３１１へのブレークポイント設定指示の送出が禁止される。これにより、トランスレータとターゲットＣＰＵ３１１との間の通信量を削減することができる。
【００７９】
（３）図４に示されるフローチャートに従ってメモリリード処理が行われ、メモリリードリクエストがトランスレータプログラム３１３に基づくトランスレータで変換されることで、ターゲットＣＰＵ３１１に対するメモリリードリクエストを、暗号化されていないＣＰＵに対するメモリリードリクエスト操作で実現することができる。
【００８０】
（４）図５に示されるフローチャートに従ってメモリライト処理が行われ、メモリライトリクエストがトランスレータプログラム３１３に基づくトランスレータで変換されることで、ターゲットＣＰＵ３１１に対するメモリライトリクエストを、暗号化されていないＣＰＵに対するメモリライトリクエスト操作で実現することができる。
【００８１】
（５）図６に示されるフローチャートに従ってステップ実行処理が行われ、ステップ実行リクエストがトランスレータプログラム３１３に基づくトランスレータで変換されることで、ターゲットＣＰＵ３１１に対するステップ実行リクエストを、暗号化されていないＣＰＵに対するステップ実行リクエスト操作で実現することができる。
【００８２】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００８３】
例えば図４乃至図１０のフローチャートで示される処理は、図１や図２に示されるデバッグ装置においても実行することができる。
【符号の説明】
【００８４】
１００  デバッグ装置
１０２  制御用ＣＰＵ
１０４  記憶装置
２００  トランスレータ装置
２０１  ＰＣ
２０２  デバッガ
２０３，２０７  通信路
２０４  トランスレータ
２０８，３１１  ターゲットＣＰＵ
２０９  メモリ
２１０  ターゲットシステム
３０１  ＰＣ
３０４  ＣＰＵ
３０８  インサーキットエミュレータ
３１７  ユーザケーブル
【図１】
2011053749.tif 000003
【図２】
2011053749.tif 000004
【図３】
2011053749.tif 000005
【図４】
2011053749.tif 000006
【図５】
2011053749.tif 000007
【図６】
2011053749.tif 000008
【図７】
2011053749.tif 000009
【図８】
2011053749.tif 000010
【図９】
2011053749.tif 000011
【図１０】
2011053749.tif 000012
【図１１】
2011053749.tif 000013
【図１２】
2011053749.tif 000014
【図１３】
2011053749.tif 000015
【図１４】
2011053749.tif 000016
【図１５】
2011053749.tif 000017
【図１６】
2011053749.tif 000018
【図１７】
2011053749.tif 000019
【図１８】
2011053749.tif 000020