JP2011053749A - デバッグ方法、デバッグ装置、及びトランスレータプログラム - Google Patents

デバッグ方法、デバッグ装置、及びトランスレータプログラム Download PDF

Info

Publication number
JP2011053749A
JP2011053749A JP2009199597A JP2009199597A JP2011053749A JP 2011053749 A JP2011053749 A JP 2011053749A JP 2009199597 A JP2009199597 A JP 2009199597A JP 2009199597 A JP2009199597 A JP 2009199597A JP 2011053749 A JP2011053749 A JP 2011053749A
Authority
JP
Japan
Prior art keywords
instruction sequence
instruction
target cpu
translator
address range
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
JP2009199597A
Other languages
English (en)
Inventor
Takashi Endo
隆 遠藤
Shunsuke Ota
俊介 大田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2009199597A priority Critical patent/JP2011053749A/ja
Publication of JP2011053749A publication Critical patent/JP2011053749A/ja
Withdrawn legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Abstract

【課題】暗号化されていないCPU用のデバッガを用いて、ターゲットCPU上で動作する暗号化された命令列を含むプログラムのデバッグを容易に行う。
【解決手段】暗号化された命令列を復号化して実行するターゲットCPU(208)と、デバッガ(202)とを含むデバッグ装置を用いてデバッグを行う。上記ターゲットCPUと上記デバッガとの間にトランスレータ(204)を介在する。上記トランスレータは、上記デバッガから伝達された通信内容を上記トランスレータで上記ターゲットCPUに対応する内容に変換し、上記ターゲットCPUから伝達された通信内容を上記トランスレータで上記デバッガに対応する内容に変換する。このような変換を行うことで、ターゲットCPU上で動作する暗号化された命令列を含むプログラムのデバッグの容易化を図る。
【選択図】図1

Description

本発明は、暗号化された命令列を復号化して実行するターゲットCPU(Central Processing Unit)で実行されるプログラムのデバッグ技術に関する。
例えば、特許文献1には、外部記憶装置にコンピュータの実行プログラムを暗号化して記憶し、それを復号化しながら実行するデータ保護装置が記載されている。このデータ保護装置では、外部記憶装置のアドレス空間を例えば4アドレス毎に区切って暗号化を行っている。アドレスの下位2ビットが“11”の暗号化データは、一つ前となる下位2ビットが“10”の暗号化データを用いて作成され、同様に、“10”および“01”の暗号化データは、それぞれ、“01”および“00”の暗号化データを用いて作成され、“00”の暗号化データは初期値を用いて作成される。そして、例えば、分岐命令に伴ってアドレスの下記2ビットが“10”のデータ列を実行する場合には、その2つ前となる“00”の暗号化データから順次復号化を行い、“10”の暗号化データに達するまでウエイトする。
また、特許文献2には、暗号化された命令を受け、それを復号化しながら実行する際のパイプライン処理を、ストールの発生を抑えて実行可能なマイクロプロセッサが記載されている。具体的には、命令フェッチ部の中に、2段のパイプラインを設けて、前段で命令フェッチ、後段で暗号化命令の復号化を実行する。
特許文献3には、デバッグ機能に対するセキュリティ機能を提供することにより、第三者の不正な逆解析を防止するための電子装置、電子装置のデバッグ認証方法が記載されている。
特開平7−129473号公報 特開2005−18434号公報 特開2003−177938号公報
近年、ゲームソフト、映像コンテンツなどを代表にデジタルコンテンツの保護の重要性が増してきている。これらのデジタルコンテンツの保護は、暗号化や署名、その他様々な技術を用いて確保されているが、それらを制御するソフトウェア(ファームウェア)が改変されると、保護機能が無効化される虞れがある。例えば、DVD(Digital Versatile Disk)ドライブのファームウェアを解析および改変することで著作権保護機能を無効化したり、ゲーム機のファームウェアを解析および改変することで違法ソフトのチェック機能を無効化することができ、映像コンテンツやゲームソフトの違法コピーなどが実現可能となる。
このようなファームウェアに対する保護技術としては、例えば、プログラムを難読化した上でROM(Read Only Memory)に格納する方式や、特許文献1などに記載されているように、暗号化した上でROMに格納し、実行時に復号化する方式などが知られている。プログラムの難読化を行う方式では、例えば単純な1行の命令を判り難い複数行の命令に変換することによって外部からの解析を困難にしているが、その分命令実行の際のオーバーヘッドが増加する。また、この方式の場合、改竄や複製に対する保護も十分とは言えない。一方、暗号化を行う方式では、解析、改竄および複製共に十分な保護を行うことが可能となるが、この場合には、相応の暗号強度を備える必要がある。ただし、一般的に、暗号強度を上げると、強度に比例してオーバーヘッドが増加するため、その両立をどのように図るかが重要となる。
本願発明者は、上記のように命令列が暗号化されたプログラムのデバッグについて検討した。既存のデバッガには、ソフトウェアブレークポイントの設定や、プログラムカウンタ値を変更する機能が備えられている。しかし、上記のように命令列が暗号化されたプログラムのデバッグでは、ソフトウェアブレークポイントの設定や、プログラムカウンタ値の変更は、プログラムの改竄と同様に扱われることから、実施することが困難になる。このため、命令列が暗号化されていないプログラムのデバッグ手順で、命令列が暗号化されたプログラムのデバッグを行うことはできない。このような課題は、特許文献1,2,3の技術によっても解決することはできない。
本発明の目的は、暗号化されていないCPU用のデバッガを用いて、ターゲットCPU上で動作する暗号化された命令列を含むプログラムのデバッグを容易に行うための技術を提供することにある。
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
すなわち、暗号化された命令列を復号化して実行するターゲットCPUと、上記ターゲットCPUで実行されるプログラムをデバッグするためのデバッガと、を含むデバッグ装置を用いてデバッグを行う。このとき、上記ターゲットCPUと上記デバッガとの間にトランスレータを介在する。上記トランスレータは、上記デバッガから伝達された通信内容を上記トランスレータで上記ターゲットCPUに対応する内容に変換してから上記ターゲットCPUに送出し、上記ターゲットCPUから伝達された通信内容を上記トランスレータで上記デバッガに対応する内容に変換してから上記デバッガに送出する。上記のような変換が行われることで、デバッガからトランスレータを見た場合、ターゲットCPUは、暗号化されていないCPUと同じ振る舞いをしているように見える。また、ターゲットCPUからトランスレータを見た場合、暗号化された命令列を解釈できるデバッガが接続されているように見える。このことが、暗号化されていないCPU用のデバッガを用いて、ターゲットCPU上で動作する暗号化された命令列を含むプログラムのデバッグの容易化を達成する。
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
すなわち、暗号化されていないCPU用のデバッガを用いて、ターゲットCPU上で動作する暗号化された命令列を含むプログラムのデバッグを容易に行うための技術を提供することができる。
本発明にかかるデバッグ装置の構成例ブロック図である。 本発明にかかるデバッグ装置の別の構成例ブロック図である。 本発明にかかるデバッグ装置の別の構成例ブロック図である。 トランスレータによるメモリリード処理のフローチャートである。 トランスレータによるメモリライト処理のフローチャートである。 トランスレータによるステップ実行処理のフローチャートである。 トランスレータによるステップ実行処理の別のフローチャートである。 トランスレータによるレジスタリード処理のフローチャートである。 トランスレータによるレジスタライト処理のフローチャートである。 トランスレータプログラムに基づくトランスレータと通信を行うターゲットCPUの割り込み処理のフローチャートである。 命令コードを暗号化したまま実行可能なターゲットCPUを含む情報処理装置の構成例ブロック図である。 図11に示される情報処理装置における主要部の構成例ブロック図である。 図11に示される情報処理装置における主要部の構成例ブロック図である。 図13における主要部の構成例ブロック図である。 命令コードの変換にスクランブルを用いた場合の復号化ブロックの構成例回路図である。 命令コードの変換に圧縮・伸長を用いた場合の復号化ブロック構成例回路図である。 コードブロックの分割の例を示すフローチャートである。 ターゲットCPUで管理されるメモリマップの説明図である。
1.実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
〔1〕本発明の代表的な実施の形態に係るデバッグ装置(100)は、暗号化された命令列を復号化して実行するターゲットCPU(208,311)と、上記ターゲットCPUで実行されるプログラムをデバッグするためのデバッガ(202,303)とを含む。上記ターゲットCPUと上記デバッガとの間には、トランスレータ(204,200,313)が介在される。上記トランスレータは、上記デバッガから伝達された通信内容を上記ターゲットCPUに対応する内容に変換して上記ターゲットCPUに送出し、上記ターゲットCPUから伝達された通信内容を上記デバッガに対応する内容に変換して上記デバッガに送出する変換処理を含む。このような変換処理が行われることで、デバッガからトランスレータを見た場合、ターゲットCPUは、暗号化されていないCPUと同じ振る舞いをしているように見える。また、ターゲットCPUからトランスレータを見た場合、暗号化された命令列を解釈できるデバッガが接続されているように見える。
〔2〕上記〔1〕において、上記ターゲットCPUは、暗号化された命令列を復号する復号化回路(DE1〜DE3)と、上記ターゲットCPUによって管理されるアドレス空間に配置され、上記復号化回路の内部状態を割り込み発生時に格納するための内部状態保存用レジスタ(REG41b〜REG43b)とを含めることができる。このとき、割り込みからの復帰命令実行時に、上記内部状態保存用レジスタの出力に基づいて上記復号化回路の内部状態が復元される。これにより、トランスレータは、ターゲットCPUが割り込み状態中に状態保持レジスタと、スタックポインタ上に格納された割り込み復帰時のプログラムカウンタを書き換えるリクエストを送ることで、任意のアドレスから実行を再開する機能を実現できる。
〔3〕上記〔2〕において、上記トランスレータにおける変換処理には、以下の処理を加えることができる。
すなわち、特定のアドレスの命令を実行した場合にプログラム実行を停止させるブレークポイントを設定する指示を上記デバッガから受け取ってそのブレークポイントを管理する。そして、上記デバッガからプログラムの実行を再開する指示が送られてきた際に、上記ブレークポイントを設定する指示を上記ターゲットCPUに送出した後、プログラム実行を再開する指示を上記ターゲットCPUに送出する。また、上記ターゲットCPUから、ブレークポイントで停止した際に出力されるレスポンス情報の返信を待ち、上記レスポンス情報を受け取った後、ブレークポイントを解除する指示を上記ターゲットCPUに送出する。
〔4〕上記〔3〕において、上記トランスレータにおける変換処理は、以下の処理を加えることができる。
すなわち、上記デバッカからプログラムの実行を再開する指示が送られてきた際に、上記ターゲットCPUのプログラムカウンタの値と、ブレークポイントのアドレス情報と、直前に実行される命令が一意に確定するブロックとして定義されるコードブロック情報とから、他のブレークポイントを通過しなければたどり着くことのできないブレークポイントを求める。そして、上記他のブレークポイントを通過しなければたどり着くことのできないブレークポイントについては、上記ターゲットCPUへのブレークポイント設定指示の送出を禁止する。これにより、トランスレータとターゲットCPUとの間の通信量を削減することができる。
〔5〕上記〔4〕において、上記トランスレータにおける変換処理には、以下の処理を加えることができる。
すなわち、上記ターゲットCPUの命令列の一部分に対してアドレス範囲を指定した読み込みリクエスト(リードリクエスト)が送られてきた場合に、上記読み込みリクエストで指定された命令列を復号化するために、上記アドレス範囲の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列も一緒に読み込まれるように、上記読み込みリクエストのアドレス範囲を拡張する変換を行う。それにより変換済み読み込みリクエストを生成し、上記ターゲットCPUに対して上記変換済み読み込みリクエストを送出し、上記ターゲットCPUより返される暗号化命令列を復号化した後、上記読み込みリクエストで指定された上記アドレス範囲の復号化済み命令列を取り出し、それを上記デバッガに返信する。
〔6〕上記〔5〕において、上記トランスレータにおける変換処理には、以下の処理を加えることができる。
すなわち、アドレス範囲と上記アドレス範囲に書き込む命令列を指定した書き込みリクエスト(ライトリクエスト)が送られてきた場合に、上記アドレス範囲の命令列および上記範囲の命令列を書き換えた場合に影響を受ける上記アドレス範囲以降の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列と、上記影響を受ける命令列を読み込むための拡張アドレス範囲を計算する。上記拡張アドレス範囲を読み込むための読み込みリクエストを生成し、上記ターゲットCPUに上記読み込みリクエストを送出する。上記ターゲットCPUより返される暗号化命令列を復号化して復号化命令列を生成し、上記書き込みリクエストで指定された上記アドレス範囲に対応した上記命令復号化列部分を、上記書き込みリクエストで指定された命令列で置き換えた、命令列置き換え済み復号化命令列を生成する。上記命令列置き換え済み復号化命令列を再暗号化した再暗号化命令列を生成し、上記書き込みリクエストで指定された範囲の先頭から上記拡張アドレス範囲の終端までに相当する、上記再暗号化命令列を上記ターゲットCPUに書き込むための再暗号化命令列書き込みリクエストを生成する。上記のように生成された命令列やリクエストは上記ターゲットCPUに送出される。これにより上記ターゲットCPU内の暗号化命令列の一部もしくは全部を上記ターゲットCPUが復号化しながら実行しても正常動作するようにしている。
〔7〕上記〔6〕において、上記デバッガはパーソナルコンピュータ(301)に実装し、上記トランスレータ、及び上記ターゲットCPUを、上記パーソナルコンピュータに結合されたエミュレータ(308)に実装することができる。
2.実施の形態の詳細
実施の形態について更に詳述する。
尚、以下の実施の形態において、要素の数等(個数、数値、量、範囲等を含む)に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でも良い。また、以下の実施の形態において、その構成要素(要素ステップ等も含む)は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数値および範囲についても同様である。
<実施の形態1>
図1には、本発明にかかるデバッグ装置の構成例が示される。図1に示されるデバッグ装置100は、パーソナルコンピュータ(「PC」と略記する)201を含む。上記PC201上には、ソフトウエアとしてデバッガ202及びトランスレータ204が実装される。つまり、PC201に含まれるCPUにより所定のプログラムが実行されることで、デバッガ202やトランスレータ204の各機能が実現される。メモリ209には、暗号化された命令列が格納されるROM(Read Only Memory)や、上記ターゲットCPU208における各種演算処理の作業領域などに使用されるRAM(Random Access Memory)が含まれる。ターゲットCPU(CPU:Central Processing Unit)208は、上記メモリ209内の暗号化された命令列を動的に復号化して実行する。上記ターゲットCPU208は、通信路207を介してPC201に結合される。上記通信路207、上記ターゲットCPU208、及びメモリ209は暗号化されている領域とされる。PC201上に実装されたデバッガ202は、ターゲットCPU208と通信を行う代わりに、トランスレータ204と通信路203を介して接続し、通常のCPU(暗号化されていないCPUを意味する)に対してデバッグを行う場合と同様の通信を、トランスレータ204に対して行う。トランスレータ204は、コードブロック情報205と鍵情報206を用いて、デバッガ202より送られてきたリクエストを変換し、変換されたリクエストをターゲットCPU208に通信路207を介して送信する。ターゲットCPU208から通信路207を介してレスポンスが返信されると、トランスレータ204は、コードブロック情報205と鍵情報206を用いて、復号化等の必要な変換を行い、変換済みのレスポンスを通信路203を介して、デバッガ202に送る。トランスレータ204は、必要に応じて、デバッガ202からのリクエストを複数のリクエストに変換して、ターゲットCPU208にリクエストを1個ずつ送り、それぞれのリクエストに対するレスポンスを受け取り、すべての変換済みリクエストの処理が終わった後に、デバッガ202に1個のレスポンスを返す。トランスレータ204によるリクエストおよびレスポンスの変換が行われることで、デバッガ202からトランスレータ204を見た場合、通常のCPU、つまり、暗号化されていないCPUが接続されているように見える。同時にターゲットCPU208からトランスレータ204を見た場合、暗号化された命令列を解釈できるデバッガが接続されているように見える。
ここで、プログラムの暗号化について説明する。
プログラムの暗号化は、実行される命令順序が一意に定まる命令列を単位として行う。この実行される命令順序が一意に決まる命令列をコードブロックと呼ぶ。これは、分岐命令やジャンプ命令、サブルーチンコール命令、サブルーチンからの復帰命令、分岐命令の飛び先アドレス、ジャンプ命令の飛び先アドレス、サブルーチンの先頭アドレスを境界として定義され、分岐命令の飛び先アドレス、ジャンプ命令の飛び先アドレス、サブルーチンの先頭アドレスを先頭に、分岐命令やジャンプ命令、サブルーチンコール命令、サブルーチンからの復帰命令までを1つのコードブロックと定義する。
図17には、コードブロックの分割の例を示すフローチャートが示される。ステップ1702の処理の直前には、ステップ1701の処理が必ず実行され、ステップ1703の処理の直前にはステップ1702の処理が必ず実行される。一方、ステップ1705の処理の直前は、ステップ1703の処理とステップ1704の処理のいずれが実行されるのかは決まっていない。したがって、ステップ1701の処理、ステップ1702の処理、ステップ1703の処理までが一つのコードブロックとなる。一方、ステップ1704の処理は、ステップ1702の処理の分岐の条件分岐先となっている。条件分岐で分岐する場合の分岐先は、あらたなコードブロックの先頭とみなす。これは、分岐命令による分岐先にはラベルが付与されており、通常、ほかの分岐の分岐先として選ばれる可能性があることと、CPUによるコードブロック間の遷移の検出が容易となること、の2つの理由から、コードブロックの先頭と見なす。特に、同様に考えて、ステップ1705の処理、ステップ1706の処理は別のコードブロック1730として扱う。
図11には、命令コードを暗号化したまま実行可能なターゲットCPU208を含む情報処理装置が示される。図11に示される情報処理装置SYSは、例えば、DVD機器、ゲーム機、携帯電話機器等を代表とする所謂組み込み機器に備わった情報処理部などである。この情報処理装置SYSは、バスBSと、このバスBSによって相互に接続された揮発性メモリ(RAM:Random Access Memory)111、不揮発性メモリ(ROM)112、ターゲットCPU(CPU:Central Processing Unit)208を含んでいる。ROM112は、代表的には、フラッシュメモリやEEPROM(Electrically Erasable and Programmable Read Only Memory)などである。上記RAM111及び上記ROM112は、図1におけるメモリ209に対応する。
上記ROM112には、組み込み機器の制御を行うためのプログラム(即ちファームウェア)が格納されている。このファームウェアは、予め、パーソナルコンピュータなどの外部装置115を用いて暗号化された上で格納される。すなわち、外部装置115は、ソースコードSCに対してソフトウエアとなる暗号化コンパイラCP_ENを用いて暗号化を行い、これによって生成された暗号化ソースコードSC_ENがROM112に格納される。
上記ターゲットCPU208は、復号化モジュールDE_MDと、秘密鍵KEYと、プロセッサモジュールCPU_MDを含んでいる。復号化モジュールDE_MDは、詳細は後述するが、上記ROM112に格納された暗号化コードであるメモリ出力コードICDmを受け、これを、秘密鍵KEYを用いて復号化し、その結果となる復号化コードをCPU命令コードICDcとしてプロセッサモジュールCPU_MDに出力する。プロセッサモジュールCPU_MDは、一般的なプロセッサが行うように、この復号化されたCPU命令コードICDc(すなわちソースコードSCと等価)のフェッチ、デコード、実行等によって所定の処理を行う。秘密鍵KEYは、例えば、ターゲットCPU208の内部で、ハードウェア回路や不揮発性メモリ等を用いて予め設定される。
図12には、図11に示される情報処理装置SYSにおいて、その復号化モジュールDE_MDの概略的な構成例および動作例が概念的に示される。図12に示されるように、復号化モジュールDE_MDは、バッファBF1〜BF3、復号化回路DE1〜DE3、秘密鍵KEY1〜KEY3、セレクタSEL1などによって構成される。復号化回路DE1は、バッファBF1の出力を、秘密鍵KEY1を用いて復号化した上でバッファBF2に伝達し、復号化回路DE2は、バッファBF2の出力を、秘密鍵KEY2を用いて復号化した上でバッファBF3に伝達する。復号化回路DE3は、バッファBF3の出力を、秘密鍵KEY3を用いて復号化する。セレクタSEL1は、復号化回路DE1の出力、復号化回路DE2の出力、復号化回路DE3の出力の中からいずれか一つを選択して出力する。
このように、復号化モジュールDE_MDは、複数段(ここでは3段)のパイプラインと、パイプラインの各段の出力を選択するセレクタSEL1を備える。このような場合、パイプラインの段数を経過する(すなわちDE1からDE3に向かう)ほど暗号強度が強くなるが、その分、例えば分岐命令発生直後の最初の出力を取り出すまでのオーバーヘッドが増大することになる。そこで、セレクタSEL1によって暗号強度を変えた出力を取り出せるようにし、これによってオーバーヘッドの低減を図る。
例えば分岐命令発生直後、メモリMEM(例えば図11のROMに対応)からのメモリ出力コードICDmとして、サイクルt=0で暗号化コードCD’1が入力され、続いて、サイクルt=1、t=2、t=3で暗号化コードCD’2、CD’3、CD’4が順次入力された場合を想定する。この暗号化コードCD’1〜CD’4は、順次バッファBF1に入力され、パイプラインで処理される。
ここで、復号化モジュールDE_MDは、1番目の入力コードとなるCD’1に対しては、1段目のパイプライン(復号化回路DE1)を介して復号化した後にセレクタSEL1によって復号化コードCD1[1]を出力する。次いで、2番目の入力コードとなるCD’2に対しては、2段目のパイプライン(復号化回路DE1,DE2)を介して復号化した後にセレクタSEL1によって復号化コードCD2[2]を出力する。その後、3番目以降の入力コードとなるCD’3,CD’4に対しては、3段目のパイプライン(復号化回路DE1〜DE3)を介して復号化した後にセレクタSEL1によって復号化コードCD3[3],CD4[3]を出力する。尚、CDn[k]の[k]はパイプラインの段数(暗号強度)を表している。
このような動作を用いると、CD1[1]はt=1で出力され、CD2[2]はt=3で出力され、CD3[3]、CD4[3]は、それぞれt=5、t=6で出力されることになる。一方、仮に、暗号強度を変えない場合には、CD1[3]がt=3で出力され、以降CD2[3]〜CD4[3]がt=4〜t=6で順次出力されることになる。したがって、1番目と2番目の入力コード(CD’1,CD’2)に対しては、暗号強度を弱めた分、オーバーヘッドを低減でき、3番目以降の入力コード(CD’3,CD’4)に対しては、パイプライン処理に伴い特にオーバーヘッドもなく暗号強度を高めることができる。これによって、全体として見た場合に、少ないオーバーヘッドで高い暗号強度を実現可能となる。
尚、パイプラインの段数は、勿論、3段に限定されるものではなく、2段以上であればよい。例えば4段とした場合は、CD1[1]がt=1で出力され、CD2[2]がt=3で出力され、CD3[3]がt=5で出力され、CD4[4]がt=7で出力され、以降、CD5[4]、CD6[4]、…が、t=8、t=9、…で出力されることになる。この場合、CD’1〜CD’3の復号化に伴うオーバーヘッドを低減できる。
図13には、図11に示される情報処理装置SYSにおける復号化モジュールDE_MDの詳細な構成例が示される。図13の復号化モジュールDE_MDは、暗号強度制御ブロックCTL_BK、復号化ブロックDE_BK、およびセレクタSEL2を備えている。暗号強度制御ブロックCTL_BKは、プロセッサモジュールCPU_MDからの入力信号として、条件分岐発生信号BRc、無条件分岐発生信号JPc、バスコマンド信号BCMDc、アドレス信号ADRc、データ信号DATc、命令フェッチ信号IFcなどを受ける。BRcおよびJPcは、CPU_MDのプログラム実行過程で分岐が行われた場合にCPU_MDによって出力される。BCMDc、ADRc、DATcは、メモリに向けたアクセス信号に該当する。IFcは、メモリに対するデータアクセスではなく、命令コードアクセスの場合に出力される。命令コードアクセスの場合、上記メモリは、図11におけるROM112に該当する。命令コードをRAMに展開して使用する場合、上記メモリは、図11におけるRAM111に該当する。
暗号強度制御ブロックCTL_BKは、これらの入力信号をプロセッサモジュールCPU_MDから受け、命令コードアクセスの場合に、メモリに対してBCMDc、ADRcに対応するバスコマンド信号BCMDmおよびアドレス信号ADRmを発行して命令コードアクセスを行う。メモリは、このBCMDmおよびADRmを受けて、メモリ出力コード(すなわち暗号化コード)ICDmおよびバス準備信号BRDYmを出力する。このメモリ出力コード(暗号化コード)ICDmは、復号化ブロックDE_BKに入力され、バス準備信号BRDYmはCTL_BKに入力される。尚、バス準備信号BRDYmは、メモリからメモリ出力コードICDmが読み出される毎に、当該サイクルで生成される信号である。
復号化ブロックDE_BKは、メモリ出力コードICDmを復号化した後、セレクタSEL2の一方の入力に出力する。この復号化の際に、暗号強度制御ブロックCTL_BKは、図12を参照して述べたような暗号強度(パイプライン段数)を制御するための選択信号Sと、復号化の鍵の一部として利用するアドレス信号ADRmを復号化ブロックDE_BKに出力する。尚、セレクタSEL2の他方の入力には、メモリ出力コードICDmが復号化ブロックDE_BKを介さずに伝送される。暗号強度制御ブロックCTL_BKは、この選択信号Sを用いて暗号強度を制御する際に、条件分岐発生信号BRc、無条件分岐発生信号JPc、およびバス準備信号BRDYmを用いて制御を行う。すなわち、暗号強度制御ブロックCTL_BKは、図12で述べたように、BRc,JPcを受けた際、その直後にメモリから読み出した命令コードの暗号強度を弱め、その後、BRDYmを受ける毎に暗号強度を強めていくような制御を行う。
また、暗号強度制御ブロックCTL_BKは、セレクタSEL2を選択信号Sdtによって制御すると共に、復号化ブロックDE_BKからセレクタSEL2を介してCPU命令コード(すなわち復号化コード)ICDcが出力される際には、当該サイクル毎にバス準備信号BRDYcを出力する。プロセッサモジュールCPU_MDは、このCPU命令コードICDcとバス準備信号BRDYcを受けることで、所定の処理を行う。尚、セレクタSEL2は、復号化を行わないサイクル(例えばメモリに対するデータアクセスなど)に対応するために備わっている。
図14には、図13の復号化モジュールDE_MDにおける復号化ブロックDE_BKの詳細な構成例が示される。図14の復号化ブロックDE_BKは、レジスタREG40,REG41a〜REG43a,REG41b〜REG43b、排他的論理和回路EOR40,EOR41a〜EOR43a,EOR41b〜EOR43b、非線形変換回路NL1〜NL3、セレクタSEL1,SEL41〜SEL44などを含む。
排他的論理和回路EOR40は、メモリ出力コードICDmと当該コードが格納されていたアドレス信号ADRmとの排他的論理和演算を行う。この演算は、復号化アルゴリズム(暗号化アルゴリズム)の一部となる演算である。尚、ここでは、ADRmから圧縮回路CPRを経て排他的論理和回路EOR40に対する入力が行われているが、この圧縮回路CPRは、ADRmとメモリ出力コードICDmのビット幅を等しくするものであり、元々等しい場合には特に必要ない。レジスタREG40は、暗号化コードフェッチ用の回路であり、この排他的論理和回路EOR40の演算結果をラッチする。
レジスタREG40の出力は、排他的論理和回路EOR41aと非線形変換回路NL1と排他的論理和回路EOR41bの処理を経ることで1段階目の復号化が行われる。排他的論理和回路EOR41aは、レジスタREG40の出力と秘密鍵KEY1との排他的論理和演算を行う。非線形変換回路NL1は、この排他的論理和演算結果を非線形変換する。排他的論理和回路EOR41bは、この非線形変換結果とレジスタREG41aに格納されている前サイクルのコードとの排他的論理和演算を行う。非線形変換回路NL1は、特に限定されないが、テーブル等を用いて、あるビット列を他のビット列に変換する。レジスタREG41aには、レジスタREG40の出力がセレクタSEL41の一方の入力を介して伝送される。また、レジスタREG41aの出力は、セレクタSEL44の一方の入力を介して排他的論理和回路EOR41bに伝送される。
1段階目の復号化処理結果となる排他的論理和回路EOR41bの出力は、排他的論理和回路EOR42aと非線形変換回路NL2と排他的論理和回路EOR42bの処理を経ることで2段階目の復号化が行われる。排他的論理和回路EOR42aは、排他的論理和回路EOR41bの出力と秘密鍵KEY2との排他的論理和演算を行う。非線形変換回路NL2は、この排他的論理和演算結果を非線形変換する。排他的論理和回路EOR42bは、この非線形変換結果とレジスタREG42aに格納されている前サイクルのコードとの排他的論理和演算を行う。レジスタREG42aには、排他的論理和回路EOR41bの出力がセレクタSEL42の一方の入力を介して伝送される。また、レジスタREG42aの出力は、排他的論理和回路EOR42bに伝送される。
2段階目の復号化処理結果となる排他的論理和回路EOR42bの出力は、排他的論理和回路EOR43aと非線形変換回路NL3と排他的論理和回路EOR43bの処理を経ることで3段階目の復号化が行われる。排他的論理和回路EOR43aは、排他的論理和回路EOR42bの出力と秘密鍵KEY3との排他的論理和演算を行う。非線形変換回路NL3は、この排他的論理和演算結果を非線形変換する。排他的論理和回路EOR43bは、この非線形変換結果とレジスタREG43aに格納されている前サイクルのコードとの排他的論理和演算を行う。レジスタREG43aには、排他的論理和回路EOR42bの出力がセレクタSEL43の一方の入力を介して伝送される。また、レジスタREG43aの出力は、排他的論理和回路EOR43bに伝送される。
セレクタSEL1は、1段階目の復号化処理結果(EOR41bの出力)、2段階目の復号化処理結果(EOR42bの出力)、および3段階目の復号化処理結果(EOR43bの出力)の中からいずれか一つを選択し、それをCPU命令コードICDcとして出力する。選択信号S1が入力された場合には、排他的論理和回路EOR41bの出力が選択され、選択信号S2が入力された場合には、排他的論理和回路EOR42bの出力が選択され、選択信号S3が入力された場合には、排他的論理和回路EOR43bの出力が選択される。尚、セレクタSEL44の他方の入力は初期値IVとなっており、この初期値IVは、分岐命令発生直後の最初の命令コードに対して1段階目の復号化処理を行う際に、前サイクルのコードの代わりに用いられる。
また、レジスタREG41b〜REG43bは、復号化処理の過程で割り込み命令が発生した際の退避レジスタとして用いられる。すなわち、割り込み命令が発生した際、レジスタREG41bは、レジスタREG41aの出力(SEL44の出力)をラッチし、レジスタREG42bは、レジスタREG42aの出力をラッチし、レジスタREG43bは、レジスタREG43aの出力をラッチする。一方、割り込み命令から復帰する際には、レジスタREG41bの出力が、セレクタSEL41の他方の入力を介してレジスタREG41aに戻され、レジスタREG42bの出力が、セレクタSEL42の他方の入力を介してレジスタREG42aに戻され、レジスタREG43bの出力が、セレクタSEL43の他方の入力を介してレジスタREG43aに戻される。
レジスタREG41cは、割り込みが発生した際に、割り込み時のレジスタREG41bの値を保存し、割り込みからの復帰時にレジスタREG41cに格納された値がレジスタREG41bに書き込まれる。同様に、レジスタREG42c、レジスタREG43cには割り込み発生時にそれぞれレジスタREG42b、REG42cの値を格納し、割り込みからの復帰時にレジスタREG42c、REG43cに格納された値がそれぞれレジスタREG42b、REG43bに書き込まれる。レジスタREG41c、REG42c、REG43cは、ターゲットCPUのアドレス空間上にマッピングされており、ターゲットCPUから少なくとも書き込みを行うことが可能なように構成されている。
図15には、命令コードの変換にスクランブルを用いた場合の復号化ブロックDE_BKの構成例が示される。図15に示される構成例では、線形帰還シフトレジスタ(LFSR)をアドレス値で初期化し、メモリ出力コードICDmがメモリから読み出される際に、メモリ出力コードICDmが命令語である場合には、線形帰還シフトレジスタ(LFSR)の値との排他的論理和演算を排他的論理和回路EOR152で計算し、ICDcに値が出力される。メモリ出力コードICDmが命令語でない場合には、セレクタSEL2により、排他的論理和演算を行わない値が選択信号Sdtにより選択され、CPU命令コードICDcに出力される。
図16には、命令コードの変換に圧縮・伸長を用いた場合の復号化ブロックDE_BKの構成例が示される。図16に示される構成例は、命令語は圧縮されて格納されており、伸張モジュールDECOMPにより、圧縮前の命令語が得られる。メモリ出力コードICDmが命令語である場合には、DECOMPの出力値をICDcに出力される。メモリ出力コードICDmが命令後でない場合には、セレクタSEL2により、メモリ出力コードICDmが選択信号Sdtにより選択され、CPU命令コードICDcに出力される。
図1に示されるデバッグ装置によれば、以下の作用効果を奏する。
PC201上に実装されたデバッガ202は、ターゲットCPU208と通信を行う代わりに、トランスレータ204と通信路203を介して接続し、暗号化されていないCPUに対してデバッグを行う場合と同様の通信を、トランスレータ204に対して行う。トランスレータ204は、デバッガ202より送られてきたリクエストを変換し、変換されたリクエストをターゲットCPU208に通信路207を介して送信する。ターゲットCPU208から通信路207を介してレスポンスが返信されると、トランスレータ204は、コードブロック情報205と鍵情報206を用いて、復号化等の必要な変換を行い、変換済みのレスポンスを通信路203を介して、デバッガ202に送る。トランスレータ204は、必要に応じて、デバッガ202からのリクエストを複数のリクエストに変換して、ターゲットCPU208にリクエストを1個ずつ送り、それぞれのリクエストに対するレスポンスを受け取り、すべての変換済みリクエストの処理が終わった後に、デバッガ202に1個のレスポンスを返す。これにより、デバッガ202からトランスレータ204を見た場合、通常のCPU、つまり、暗号化されていないCPUが接続されているように見える。同時にターゲットCPU208からトランスレータ204を見た場合、暗号化された命令列を解釈できるデバッガが接続されているように見える。このため、デバッガ202は、命令列が暗号化されていないプログラムのデバッグ手順で、命令列が暗号化されたプログラム(ターゲットCPU208で実行されるプログラム)のデバッグを行うことができるので、暗号化されていないCPU用のデバッガを用いて、ターゲットCPU上で動作する暗号化された命令列を含むプログラムのデバッグを容易に行うことができる。
<実施の形態2>
図2には、本発明にかかるデバッグ装置100の別の構成例が示される。図2に示される構成によれば、PC301と、ターゲットシステム210との間にトランスレータ装置200が配置される。上記PC301は、記憶装置302、CPU304、及びインタフェース(I/F)305を含んで成る。記憶装置302には、上記CPUで実行されるデバッガプログラム303が格納される。CPU304は、インタフェース305を介してトランスレータ装置200に結合される。ターゲットシステム210は、メモリ209、ターゲットCPU208、インタフェース319を含む。上記ターゲットCPU208は、上記インタフェース319を介してトランスレータ装置200に結合される。上記トランスレータ装置200は、第1インタフェース101、制御用CPU102、第2インタフェース103、及び記憶装置104を含む。記憶装置104には、トランスレータを形成するための変換プログラム105、暗号化・復号化に必要な情報106などが格納される。暗号化・復号化に必要な情報106には、鍵情報306やコードブロック情報307が含まれ、それらは、PC301を介して伝達され、制御CPU102によって記憶装置104に書き込まれる。また、記憶装置107には、上記制御用CPU102での演算処理に使用されるワークエリアが形成される。制御用CPU102は、記憶装置104に格納された変換プログラム105を実行する。PC301は、第1インタフェース101を介して、デバッガからのリクエストを受け取り、リクエストを解析し、必要に応じて記憶装置104に記憶されている暗号化・復号化に必要な情報106を用いて、暗号化などの変換をリクエストに施す。さらに制御用CPU102は、第2インタフェース103を介して、ターゲットシステム210に接続される。制御用CPU102は、ターゲットCPU208に変換済みのリクエストを送り、第2インタフェース103を介して、レスポンスを受け取る。受け取ったレスポンスは、必要に応じて、暗号化・復号化に必要な情報106を用いて、復号化などの変換をレスポンスに施し、第1インタフェース101を介して、変換済みのレスポンスをデバッガに対して送る。
このように、PC301と、ターゲットシステム210との間に介在されたトランスレータ装置200において、変換プログラム105を制御用CPU102で実行することにより、図1に示されるのと同様の機能を有するトランスレータを形成することができる。これにより、図1に示されるのと同様の作用効果を得ることができる。
<実施の形態3>
図3には、本発明にかかるデバッグ装置100の別の構成例が示される。本例においてトランスレータは、インサーキットエミュレータ312の制御用CPU310のファームウェアを記憶する記憶装置313上に、トランスレータプログラム313として実装されている。インサーキットエミュレータ312は、インタフェース309、制御用CPU310、記憶装置312、ターゲットCPU311、記憶装置316を含む。上記ターゲットCPU311は、図示されないユーザシステムに搭載されるチップと等価なエミュレーション用チップとされる。このターゲットCPU311からユーザケーブル317が引き出され、そのケーブル317の先端に設けられたソケットが、図示されないユーザシステムに結合される。ターゲットCPU311では、デバッグ対象とされるユーザプログラムが実行される。このユーザプログラムは暗号化されて、記憶装置316に格納されている。上記ターゲットCPU311は、記憶装置316内の暗号化された命令列を動的に復号化して実行する。上記ターゲットCPU311と上記制御用CPU310との間では、デバッグのために各種制御信号のやり取りが行われる。
トランスレータプログラム313が制御用CPU310で実行されることによりトランスレータが形成される。このトランスレータプログラム313に基づくトランスレータにより、鍵情報記憶領域314の鍵情報と、コードブロック記憶領域315のコードブロック情報とを用いて、PC312に実装されたインタフェース305を介して送出されるリクエストが、インサーキットエミュレータ309内に取り込まれる。そして、必要に応じて上記リクエストが変換され、ターゲットCPU311に対して変換されたリクエストが送出される。リクエストの実行結果に対応するレスポンスついても、必要に応じて、鍵情報記憶領域314に記憶された鍵情報と、コードブロック記憶領域315に記憶されたコードブロック情報を用いて、復号化等の変換を行い、変換されたレスポンスをインタフェース309、インタフェース305を介して、PC301上のデバッガプログラム303に返信する。トランスレータプログラム313によるリクエストとレスポンスの変換により、デバッガプログラム303からは、インサーキットエミュレータ312が通常のCPU(暗号化されていないCPU)をエミュレートしているように見える。
デバッガを実現するための基本的な機能としては、メモリライト、メモリリード、レジスタライト、レジスタリード、プログラム実行再開、ブレークポイントの設定・解除、ステップ実行等が挙げられる。このうち、ブレークポイントの設定、およびステップ実行は、その他の機能の組み合わせで実現できる。例えばブレークポイントをソフトウエアブレークポイントで実現する場合、ブレークポイントは格納されている元の命令を読み出して保存しておき、代わりに割り込みを発生させる命令を書き込んでおき、実行再開リクエストを発行する。プログラムカウンタが割り込み命令に到達して割り込みが発生して停止したら、保存しておいた元の命令をメモリライトで書き戻す。これにより、ブレークポイントをソフトウェアブレークで実現できる。
同様に、ステップ実行は、プログラムカウンタの値をレジスタリードにより読み出し、読み出されたアドレスからメモリリードで命令列を読み出して、簡単なデコードを行い、プログラムカウンタが命令実行後に移行するアドレスを計算する。この計算で求めたアドレスに、ソフトウエアブレークポイントを前記の手順で設定し、実行再開リクエストを発行、設定したブレークポイントで停止したら、ソフトウエアブレークポイントを設定したアドレスをメモリライトで元の命令に戻すことで実現できる。
したがって、ブレークポイントの設定と、ステップ実行は、それらの機能で必要となるメモリライト、メモリリード等のリクエストが、トランスレータプログラム313に基づくトランスレータによりターゲットCPU311向けに変換されることにより、容易に実現される。
次に、上記ブレークポイントの設定手順について説明する。
図18にはターゲットCPU311で管理されるメモリマップが示される。ここでは、下位アドレス側から第1コードブロック(CODEBLOCK1)、第2コードブロック(CODEBLOCK2)、第3コードブロック(CODEBLOCK3)の3つのコードブロックが存在する例が示される。それぞれ3つのコードブロックの先頭アドレスは、EADR1,EADR2,EADR3である。図18では、3つのコードブロックが設定されており、下位アドレス側から順に、BRKP21,BRKP22、BRKP31であり、BRKP21およびBRKP22は第2コードブロック(CODEBLOCK2)内に設定されている。ここで、プログラムカウンタがPOS1を指し示した状態でプログラムの実行が停止されているものとする。この状態で、プログラム実行を再開してブレークポイントで停止する場合、2つのブレークポイント、すなわちBRKP21もしくは、BRKP31にのみたどり着く。これは、コードブロックが、事前に実行される命令が一意に決まる命令列を単位としているため、ひとつのコードブロックに2つのブレークポイントが存在する場合、アドレスで下位側に存在するブレークポイントを通過した後にはじめて、その後のブレークポイントを通過する。図18の例では、BRKP22のブレークポイントは、BRKP21のブレークポイントを通過した後に始めてたどり着くことができる。したがって、プログラムの停止状態から再開して、ブレークポイントBRKP22で停止するには、少なくともBRKP21とBRKP22の間に、プログラムカウンタの値がなければならない。それ以外の場合は、処理の制御フローがBRKP22にたどり着く場合でも、一旦BRKP21のブレークポイントで停止しなければならない。通常のデバッカでは、プログラムがブレークポイントで停止した場合、すべてのブレークポイントを解除し、実行を再開する際に、全てのブレークポイントを設定しなおす処理が行われる。ブレークポイントの設定、解除はメモリの読み込み、書き込みが大量に発生するため、不要なブレークポイントの設定は、可能な限り省略を試みる。その際には、実行が停止したプログラムカウンタの位置、コードブロック、およびブレークポイントのコードブロック内での位置に基づき、現在のプログラムカウンタの位置からでは、他のブレークポイントを通過しないとたどり着けないブレークポイントの設定は行わないようにする。つまり、ターゲットCPU311へのブレークポイント設定指示の送出が禁止される。
また、停止中のプログラムのプログラムカウンタが指し示すコードブロックとは別のコードブロックに設定されたブレークポイントについては、コードブロック中の先頭に一番近いブレークポイントにのみ到達可能であるので、それ以外のブレークポイントについては設定を行わない。停止中のプログラムカウンタが指し示すコードブロックと同じコードブロックに存在するブレークポイントについては、コードブロックの先頭から一番近いブレークポイントと、プログラムカウンタよりも上位に位置するブレークポイントのうちで、一番プログラムカウンタが指し示すアドレスに近いブレークポイントを設定する。コードブロックの先頭から一番近いブレークポイントと、プログラムカウンタよりも上位に位置するブレークポイントのうちで、一番プログラムカウンタが指し示すアドレスに近いブレークポイントが同一となる場合もある。
図4には、トランスレータプログラム313に基づくトランスレータにおけるメモリリード処理のフローチャートが示される。暗号化メモリリード401は、リクエストで指定されたアドレスを含むコードブロックが存在するかを検索し(402)、指定されたアドレス領域がコードブロック内か否かを判定する(403)。指定されたアドレス領域が、コードブロック内ではない場合は、データに対するリードリクエスト(読み込みリクエスト)であるので、変換は不要である。したがって、リクエストをそのままターゲットCPU311に転送し(406)、ターゲットCPU311からのレスポンスをそのままデバッガに転送して(407)、処理を終了する(408)。リクエストで指定されたメモリ領域がコードブロック内であった場合は、命令列の読み込みであり、コードブロックの先頭から指定されたアドレス範囲までのデータが復号化に必要なので、アドレス範囲をコードブロックの先頭から指定アドレス範囲の終端までのアドレス範囲に対するメモリリードリクエストをターゲットCPU311に対して送る(404)。つまり、アドレス範囲の命令列を復元するために必要となるアドレス範囲よりも前の命令列も一緒に読み込まれるように、リードリクエストのアドレス範囲を拡張する変換が行われる。次に、ターゲットCPU311から読み出された値を復号化し、最初のリードリクエストで指定されたアドレス範囲のデータ(命令列)を取り出して、デバッガに返信して処理を終了する(405,408)。メモリリードリクエストを前記のようにトランスレータプログラム313に基づくトランスレータで変換することで、ターゲットCPU311に対するメモリリードリクエストを、暗号化されていないCPUに対するメモリリードリクエスト操作で実現する。
図5には、トランスレータプログラムに基づくトランスレータにおけるメモリライト処理のフローチャートが示される。暗号化メモリライト(501)は、リクエストで指定されたリクエストで指定されたアドレスを含むコードブロックが存在するかを検索し(502)、指定されたアドレス領域がコードブロック内か否かを判定する(503)。指定されたアドレス領域が、コードブロック内ではない場合は、データに対するライトリクエスト(書き込みリクエスト)であるので、変換は不要である。したがって、リクエストをそのままターゲットCPU311に転送し(506)、ターゲットCPU311からのレスポンスをそのままデバッガに転送して(507)、処理を終了する(508)。リクエストで指定されたメモリ領域がコードブロック内であった場合は、命令列への書き込みであり、データの書き換えを行った場合、書き換えを行った以降の命令列の暗号化にも影響をあたえるため、指定されたメモリ領域を含むコードブロック全体のデータが必要になる。そこで、アドレス範囲をコードブロックの先頭からコードブロックの終端までのアドレス範囲に対するメモリリードリクエストをターゲットCPU311に対して送る(504)。次に、ターゲットCPU311から読み出された値を復号化し、最初のライトリクエストで指定されたアドレス範囲のデータを書き換え、コードブロックの再暗号化を行い、ライトリクエストで指定されたアドレス範囲の先頭から、コードブロックの終端に対応するアドレス範囲のデータを取り出して、ターゲットCPU311に対して、メモリライトリクエストを発行し(505)、処理を終了する(508)。メモリライトリクエストを前記のようにトランスレータプログラム313に基づくトランスレータで変換することで、ターゲットCPU311に対するメモリライトリクエストを、暗号化されていないCPUに対するメモリライトリクエスト操作で実現する。
図6には、トランスレータプログラム313に基づくトランスレータにおけるステップ実行処理のフローチャートが示される。暗号化ステップ実行(601)は、まずターゲットCPU311からレジスタリードリクエストにより、現在のプログラムカウンタの値を読み出し、暗号化メモリリードリクエストにより、プログラムカウンタからnバイト分の命令コードを読み出す。ここで、nは、命令を実行後にプログラムカウンタの遷移先の推定に必要な最小限のバイト数であり、ターゲットCPU311の命令コードアーキテクチャに依存する。次に、読み出した命令コードから、プログラムカウンタが制御命令であるか否かを判定し(603)、制御命令であった場合、その制御命令で分岐するか否かを判定する(604)。ここで、無条件分岐命令や、サブルーチンコール命令は、分岐と判定する。条件分岐命令の場合は、分岐条件を検査し、分岐するか否かを判定する。分岐すると判定された場合、分岐先アドレスを変数「dest」に代入し(606)、ステップ607に進む。ステップ603で制御命令でないと判断された場合、およびステップ604で分岐しないと判定された場合、プログラムカウンタに命令コードのバイト数を加算した結果を変数「dest」に代入し(605)、ステップ607の処理に進む。ステップ607の処理は、変数「dest」で指定された1ワードをメモリリードリクエストで読み出してワークエリア107に保存し、割り込みを発生させる命令を暗号化メモリライトリクエストでターゲットCPU311のメモリに書き込む(607)。コードブロックの先頭から現在のプログラムカウンタ+2ワードをメモリリードリクエストでターゲットCPU311から読み出し(608)、復号化器の内部状態を計算(609)。メモリライトリクエストで、ターゲットCPU311内の復号化器の内部状態退避レジスタを書き換える(610)。次にターゲットCPU311に実行再開コマンドを発行し、レスポンスを待つ(611)。レスポンスが返ってきたら、変数「dest」の1ワードに、メモリライトリクエストを用いて、保存していた値を書き戻す(612)。ステップ611で受け取ったレスポンスを、デバッガに送信し(613)、終了する(614)。ステップ実行リクエストを前記のようにトランスレータプログラム313に基づくトランスレータで変換することで、ターゲットCPU311に対するステップ実行リクエストを、暗号化されていないCPUに対するステップ実行リクエスト操作で実現する。
図7には、トランスレータプログラム313に基づくトランスレータにおけるステップ実行処理の別のフローチャートが示される。暗号化実行再開(701)は、先ずターゲットCPU311からレジスタリードリクエストにより、現在のプログラムカウンタの値を読み出す。次に、コードブロックの先頭から現在のプログラムカウンタ+2ワードをメモリリードリクエストでターゲットCPU311から読み出し(702)、復号化器の内部状態を計算する(703)。メモリライトリクエストで、ターゲットCPU311内の復号化器の内部状態退避レジスタを書き換える(704)。次にターゲットCPU311に実行再開コマンドを発行し、レスポンスを待つ(705)。レスポンスが返ってきたら、そのレスポンスをデバッガに送信し(706)、終了する(707)。実行再開リクエストを前記のようにトランスレータプログラム313に基づくトランスレータで変換することで、ターゲットCPU311に対する実行再開リクエストを、暗号化されていないCPUに対する実行再開リクエスト操作で実現する。
図8には、トランスレータプログラム313に基づくトランスレータにおけるレジスタリード処理のフローチャートが示される。暗号化レジスタリード(801)は、デバッガから受け取ったリクエストをターゲットにそのまま転送し(802)、ターゲットからのレスポンスをそのままデバッガに転送する(803)ことで、レジスタリードを実現している。レジスタリードリクエストでは、トランスレータプログラム313に基づくトランスレータはデバッガとターゲットの間でリクエストとレスポンスをそのまま転送することで、実現している。
図9には、トランスレータプログラム313に基づくトランスレータにおけるレジスタライト処理のフローチャートが示される。暗号化レジスタリード(901)は、デバッガから受け取ったリクエストをターゲットにそのまま転送し(902)、ターゲットからのレスポンスをそのままデバッガに転送する(903)ことで、レジスタライトを実現している。レジスタライトリクエストでは、トランスレータプログラム313に基づくトランスレータはデバッガとターゲットの間でリクエストとレスポンスをそのまま転送することで、実現している。
図10には、トランスレータプログラム313に基づくトランスレータと通信を行うターゲットCPU311の割り込み処理のフローチャートが示される。ソフトウエアブレークポイントにより割り込みが発生すると、ターゲットCPU311は、割り込みルーチン(1001)に実行制御が移る。割り込みルーチンでは、最初にレジスタをワークエリアへ退避する(1002)。その後、トランスレータプログラム313に基づくトランスレータからのレジスタへのリードやライト処理は、レジスタが退避されたワークエリアに対して行われる。次に、停止シグナルを返信する(1003)。この停止シグナルは、実行再開リクエストに対するレスポンスを兼ねている。次にパケットの受信待ち(1003)に入り、パケットが到着するのを待つ。パケットが届いたら、実行再開リクエストか否かを判定し(1004)、実行再開リクエストであった場合は、ステップ1002で退避したレジスタをワークエリアから復元し(1006)、割り込み処理から復帰する(1007)。ステップ1003で受信したパケットが、実行再開リクエストでなかった場合は、それぞれのリクエスト内容に応じた解釈、実行を行い(1005)、再びパケット待ちの処理に戻る(1003)。
実施の形態3によれば、以下の作用効果を得ることができる。
(1)トランスレータプログラム313の実行によるトランスレータは、デバッガプログラム303の実行によるデバッガから伝達された通信内容をターゲットCPU311に対応する内容に変換して上記ターゲットCPU311に送出し、上記ターゲットCPU311から伝達された通信内容を上記デバッガに対応する内容に変換して上記デバッガに送出するようにしている。このため、実施の形態1,2の場合と同様の作用効果を得ることができる。
(2)プログラム実行が停止したプログラムカウンタの位置、コードブロック、およびブレークポイントのコードブロック内での位置に基づき、現在のプログラムカウンタの位置からでは、他のブレークポイントを通過しないとたどり着けないブレークポイントの設定について、ターゲットCPU311へのブレークポイント設定指示の送出が禁止される。これにより、トランスレータとターゲットCPU311との間の通信量を削減することができる。
(3)図4に示されるフローチャートに従ってメモリリード処理が行われ、メモリリードリクエストがトランスレータプログラム313に基づくトランスレータで変換されることで、ターゲットCPU311に対するメモリリードリクエストを、暗号化されていないCPUに対するメモリリードリクエスト操作で実現することができる。
(4)図5に示されるフローチャートに従ってメモリライト処理が行われ、メモリライトリクエストがトランスレータプログラム313に基づくトランスレータで変換されることで、ターゲットCPU311に対するメモリライトリクエストを、暗号化されていないCPUに対するメモリライトリクエスト操作で実現することができる。
(5)図6に示されるフローチャートに従ってステップ実行処理が行われ、ステップ実行リクエストがトランスレータプログラム313に基づくトランスレータで変換されることで、ターゲットCPU311に対するステップ実行リクエストを、暗号化されていないCPUに対するステップ実行リクエスト操作で実現することができる。
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
例えば図4乃至図10のフローチャートで示される処理は、図1や図2に示されるデバッグ装置においても実行することができる。
100 デバッグ装置
102 制御用CPU
104 記憶装置
200 トランスレータ装置
201 PC
202 デバッガ
203,207 通信路
204 トランスレータ
208,311 ターゲットCPU
209 メモリ
210 ターゲットシステム
301 PC
304 CPU
308 インサーキットエミュレータ
317 ユーザケーブル

Claims (16)

  1. 暗号化された命令列を復号化して実行するターゲットCPUと、上記ターゲットCPUで実行されるプログラムをデバッグするためのデバッガと、を含むデバッグ装置を用いたデバッグ方法であって、
    上記ターゲットCPUと上記デバッガとの間にトランスレータを介在し、
    上記トランスレータは、上記デバッガから伝達された通信内容を上記トランスレータで上記ターゲットCPUに対応する内容に変換してから上記ターゲットCPUに送出し、上記ターゲットCPUから伝達された通信内容を上記トランスレータで上記デバッガに対応する内容に変換してから上記デバッガに送出することを特徴とするデバッグ方法。
  2. 上記トランスレータは、特定のアドレスの命令を実行した場合にプログラム実行を停止させるブレークポイントを設定する指示を上記デバッガから受け取ってそのブレークポイントを管理し、上記デバッガからプログラムの実行を再開する指示が送られてきた際に、上記ブレークポイントを設定する指示を上記ターゲットCPUに送出した後、プログラム実行を再開する指示を上記ターゲットCPUに送出し、上記ターゲットCPUから、ブレークポイントで停止した際に出力されるレスポンス情報の返信を待ち、上記レスポンス情報を受け取った後、ブレークポイントを解除する指示を上記ターゲットCPUに送出する請求項1記載のデバッグ方法。
  3. 上記トランスレータは、上記デバッカからプログラムの実行を再開する指示が送られてきた際に、上記ターゲットCPUのプログラムカウンタの値と、ブレークポイントのアドレス情報と、直前に実行される命令が一意に確定するブロックとして定義されるコードブロック情報とから、他のブレークポイントを通過しなければたどり着くことのできないブレークポイントを求め、上記他のブレークポイントを通過しなければたどり着くことのできないブレークポイントについては、上記ターゲットCPUへのブレークポイント設定指示の送出を禁止する請求項2記載のデバッグ方法。
  4. 上記トランスレータは、上記ターゲットCPUの命令列の一部分に対してアドレス範囲を指定した読み込みリクエストが送られてきた場合に、上記読み込みリクエストで指定された命令列を復号化するために、上記アドレス範囲の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列も一緒に読み込まれるように、上記読み込みリクエストのアドレス範囲を拡張する変換を行い、変換済み読み込みリクエストを生成し、それを上記ターゲットCPUに送出し、上記ターゲットCPUより返される暗号化命令列を復号化した後、上記読み込みリクエストで指定された上記アドレス範囲の復号化済み命令列を取り出し、それを上記デバッガに返信する請求項3記載のデバッグ方法。
  5. 上記トランスレータは、アドレス範囲と上記アドレス範囲に書き込む命令列を指定した書き込みリクエストが送られてきた場合に、上記アドレス範囲の命令列および上記範囲の命令列を書き換えた場合に影響を受ける上記アドレス範囲以降の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列と、上記影響を受ける命令列を読み込むための拡張アドレス範囲を計算し、上記拡張アドレス範囲を読み込むための読み込みリクエストを生成し、それを上記ターゲットCPUに送出し、上記ターゲットCPUより返される暗号化命令列を復号化して復号化命令列を生成し、上記書き込みリクエストで指定された上記アドレス範囲に対応した上記命令復号化列部分を、上記書き込みリクエストで指定された命令列で置き換えた、命令列置き換え済み復号化命令列を生成し、上記命令列置き換え済み復号化命令列を再暗号化した再暗号化命令列を生成し、上記書き込みリクエストで指定された範囲の先頭から上記拡張アドレス範囲の終端までに相当する、上記再暗号化命令列を上記ターゲットCPUに書き込むための再暗号化命令列書き込みリクエストを生成し、それを上記ターゲットCPUに送出する請求項4記載のデバッグ方法。
  6. 暗号化された命令列を復号化して実行するターゲットCPUと、
    上記ターゲットCPUで実行されるプログラムをデバッグするためのデバッガと、を含むデバッグ装置であって、
    上記ターゲットCPUと上記デバッガとの間には、トランスレータが介在され、
    上記トランスレータは、上記デバッガから伝達された通信内容を上記ターゲットCPUに対応する内容に変換して上記ターゲットCPUに送出し、上記ターゲットCPUから伝達された通信内容を上記デバッガに対応する内容に変換して上記デバッガに送出する変換処理を含むことを特徴とするデバッグ装置。
  7. 上記ターゲットCPUは、暗号化された命令列を復号する復号化回路と、
    上記ターゲットCPUによって管理されるアドレス空間に配置され、上記復号化回路の内部状態を割り込み発生時に格納するための内部状態保存用レジスタと、を含み、
    割り込みからの復帰命令実行時に、上記内部状態保存用レジスタの出力に基づいて上記復号化回路の内部状態が復元される請求項6記載のデバッグ装置。
  8. 上記トランスレータにおける変換処理は、特定のアドレスの命令を実行した場合にプログラム実行を停止させるブレークポイントを設定する指示を上記デバッガから受け取ってそのブレークポイントを管理し、上記デバッガからプログラムの実行を再開する指示が送られてきた際に、上記ブレークポイントを設定する指示を上記ターゲットCPUに送出した後、プログラム実行を再開する指示を上記ターゲットCPUに送出し、上記ターゲットCPUから、ブレークポイントで停止した際に出力されるレスポンス情報の返信を待ち、上記レスポンス情報を受け取った後、ブレークポイントを解除する指示を上記ターゲットCPUに送出する処理を含む請求項7記載のデバッグ装置。
  9. 上記トランスレータにおける変換処理は、上記デバッカからプログラムの実行を再開する指示が送られてきた際に、上記ターゲットCPUのプログラムカウンタの値と、ブレークポイントのアドレス情報と、直前に実行される命令が一意に確定するブロックとして定義されるコードブロック情報とから、他のブレークポイントを通過しなければたどり着くことのできないブレークポイントを求め、上記他のブレークポイントを通過しなければたどり着くことのできないブレークポイントについては、上記ターゲットCPUへのブレークポイント設定指示の送出を禁止する処理を含む請求項8記載のデバッグ装置。
  10. 上記トランスレータにおける変換処理は、上記ターゲットCPUの命令列の一部分に対してアドレス範囲を指定した読み込みリクエストが送られてきた場合に、上記読み込みリクエストで指定された命令列を復号化するために、上記アドレス範囲の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列も一緒に読み込まれるように、上記読み込みリクエストのアドレス範囲を拡張する変換を行い、変換済み読み込みリクエストを生成し、上記ターゲットCPUに対して上記変換済み読み込みリクエストを送出し、上記ターゲットCPUより返される暗号化命令列を復号化した後、上記読み込みリクエストで指定された上記アドレス範囲の復号化済み命令列を取り出し、それを上記デバッガに返信する処理を含む請求項9記載のデバッグ装置。
  11. 上記トランスレータにおける変換処理は、アドレス範囲と上記アドレス範囲に書き込む命令列を指定した書き込みリクエストが送られてきた場合に、上記アドレス範囲の命令列および上記範囲の命令列を書き換えた場合に影響を受ける上記アドレス範囲以降の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列と、上記影響を受ける命令列を読み込むための拡張アドレス範囲を計算し、上記拡張アドレス範囲を読み込むための読み込みリクエストを生成し、上記ターゲットCPUに上記読み込みリクエストを送出し、上記ターゲットCPUより返される暗号化命令列を復号化して復号化命令列を生成し、上記書き込みリクエストで指定された上記アドレス範囲に対応した上記命令復号化列部分を、上記書き込みリクエストで指定された命令列で置き換えた、命令列置き換え済み復号化命令列を生成し、上記命令列置き換え済み復号化命令列を再暗号化した再暗号化命令列を生成し、上記書き込みリクエストで指定された範囲の先頭から上記拡張アドレス範囲の終端までに相当する、上記再暗号化命令列を上記ターゲットCPUに書き込むための再暗号化命令列書き込みリクエストを生成し、それを上記ターゲットCPUに送出する処理を含む請求項10記載のデバッグ装置。
  12. 上記デバッガはパーソナルコンピュータに実装され、上記トランスレータ、及び上記ターゲットCPUは、上記パーソナルコンピュータに結合されたエミュレータに実装されて成る請求項11記載のデバッグ装置。
  13. 暗号化された命令列を復号化して実行するターゲットCPUと、上記ターゲットCPUで実行されるプログラムをデバッグするためのデバッガとの間でやり取りされる通信内容を変換するトランスレータ機能を制御用CPUに実現させるトランスレータプログラムであって、
    上記トランスレータ機能には、特定のアドレスの命令を実行した場合にプログラム実行を停止させるブレークポイントを設定する指示を上記デバッガから受け取ってそのブレークポイントを管理する機能と、
    上記デバッガからプログラムの実行を再開する指示が送られてきた際に、上記ブレークポイントを設定する指示を上記ターゲットCPUに送出した後、プログラム実行を再開する指示を上記ターゲットCPUに送出する機能と、
    上記ターゲットCPUから、ブレークポイントで停止した際に出力されるレスポンス情報の返信を待ち、上記レスポンス情報を受け取った後、ブレークポイントを解除する指示を上記ターゲットCPUに送出する機能と、を含むことを特徴とするトランスレータプログラム。
  14. 上記トランスレータ機能は、更に、上記デバッカからプログラムの実行を再開する指示が送られてきた際に、上記ターゲットCPUのプログラムカウンタの値と、ブレークポイントのアドレス情報と、直前に実行される命令が一意に確定するブロックとして定義されるコードブロック情報とから、他のブレークポイントを通過しなければたどり着くことのできないブレークポイントを求める機能と、
    上記他のブレークポイントを通過しなければたどり着くことのできないブレークポイントについては、上記ターゲットCPUへのブレークポイント設定指示の送出を禁止する機能と、を含む請求項13記載のトランスレータプログラム。
  15. 上記トランスレータ機能には、更に、上記ターゲットCPUの命令列の一部分に対してアドレス範囲を指定した読み込みリクエストが送られてきた場合に、上記読み込みリクエストで指定された命令列を復号化するために、上記アドレス範囲の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列も一緒に読み込まれるように、上記読み込みリクエストのアドレス範囲を拡張する変換を行い、変換済み読み込みリクエストを生成する機能と、
    上記ターゲットCPUに上記変換済み読み込みリクエストを送出する機能と、
    上記ターゲットCPUより返される暗号化命令列を復号化した後、上記読み込みリクエストで指定された上記アドレス範囲の復号化済み命令列を取り出し、上記デバッガに返信する機能と、を含む請求項14記載のトランスレータプログラム。
  16. 上記トランスレータ機能は、更に、アドレス範囲と上記アドレス範囲に書き込む命令列を指定した書き込みリクエストが送られてきた場合に、上記アドレス範囲の命令列および上記範囲の命令列を書き換えた場合に影響を受ける上記アドレス範囲以降の命令列を復号化するために必要となる、上記アドレス範囲よりも前の命令列と、上記影響を受ける命令列を読み込むための拡張アドレス範囲を計算する機能と、
    上記拡張アドレス範囲を読み込むための読み込みリクエストを生成する機能と、
    上記ターゲットCPUに上記読み込みリクエストを送出する機能と、
    上記ターゲットCPUより返される暗号化命令列を復号化して復号化命令列を生成し、上記書き込みリクエストで指定された上記アドレス範囲に対応した上記命令復号化列部分を、上記書き込みリクエストで指定された命令列で置き換えた、命令列置き換え済み復号化命令列を生成し、上記命令列置き換え済み復号化命令列を再暗号化した再暗号化命令列を生成し、上記書き込みリクエストで指定された範囲の先頭から上記拡張アドレス範囲の終端までに相当する、上記再暗号化命令列を上記ターゲットCPUに書き込むための再暗号化命令列書き込みリクエストを生成し、それを上記ターゲットCPUに送出する機能と、を含む請求項15記載のトランスレータプログラム。
JP2009199597A 2009-08-31 2009-08-31 デバッグ方法、デバッグ装置、及びトランスレータプログラム Withdrawn JP2011053749A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009199597A JP2011053749A (ja) 2009-08-31 2009-08-31 デバッグ方法、デバッグ装置、及びトランスレータプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009199597A JP2011053749A (ja) 2009-08-31 2009-08-31 デバッグ方法、デバッグ装置、及びトランスレータプログラム

Publications (1)

Publication Number Publication Date
JP2011053749A true JP2011053749A (ja) 2011-03-17

Family

ID=43942720

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009199597A Withdrawn JP2011053749A (ja) 2009-08-31 2009-08-31 デバッグ方法、デバッグ装置、及びトランスレータプログラム

Country Status (1)

Country Link
JP (1) JP2011053749A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111737103A (zh) * 2019-03-25 2020-10-02 阿里巴巴集团控股有限公司 一种包括调试单元的处理器和调试系统
CN115757191A (zh) * 2023-01-05 2023-03-07 广州市千钧网络科技有限公司 一种数据处理方法和装置
CN118093446A (zh) * 2024-04-28 2024-05-28 上海燧原智能科技有限公司 一种异构程序调试方法、系统、装置、电子设备及存储介质

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111737103A (zh) * 2019-03-25 2020-10-02 阿里巴巴集团控股有限公司 一种包括调试单元的处理器和调试系统
CN115757191A (zh) * 2023-01-05 2023-03-07 广州市千钧网络科技有限公司 一种数据处理方法和装置
CN115757191B (zh) * 2023-01-05 2023-05-16 广州市千钧网络科技有限公司 一种数据处理方法和装置
CN118093446A (zh) * 2024-04-28 2024-05-28 上海燧原智能科技有限公司 一种异构程序调试方法、系统、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
JP7101761B2 (ja) コール・パス依存認証
TWI531968B (zh) 加密方法、及具解密功能之微處理器與微處理器操作方法、與電腦程式產品
US9053300B2 (en) Device and a method for generating software code
RU2620712C2 (ru) Устройство виртуальной машины, имеющее управляемую ключом обфускацию, и способ
US10095636B2 (en) Secure computing
KR101216995B1 (ko) 인덱스 테이블 기반 코드 암호화 및 복호화 장치 및 그 방법
CN105022936A (zh) 一种类class文件加密解密方法和装置
EP2150917A1 (en) Method and apparatus for encrypting and decrypting software
CN106375080B (zh) 一种flash文件的加密及解密方法及其装置
TW201714114A (zh) 微處理器與其中安全執行指令的方法
KR20200136142A (ko) 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법, 이를 수행하기 위한 기록매체 및 장치
JP2005216027A (ja) 暗号化装置及びこれを備えた暗号化システム並びに復号化装置及びこれを備えた半導体システム
JP2011053749A (ja) デバッグ方法、デバッグ装置、及びトランスレータプログラム
TWI437489B (zh) 微處理器以及相關的操作方法、以及加密、解密方法
TW201804349A (zh) 隨選碼解密
WO2013042409A1 (ja) モジュールの暗号化/復号化プログラム
JP2013045277A (ja) プログラム難読化方法およびリモートデバッグシステム
JP2009169489A (ja) 暗号化方法、復号化方法、暗号化装置、復号化装置
EP3387530B1 (en) Secure computing
JP2011123229A (ja) プログラムコード暗号化装置及びプログラム
JP2007172526A (ja) 情報処理システム、情報処理方法
Vojtěšek Analýza rescue souboru BestCrypt Volume Encryption
JP2009211292A (ja) 暗号化方法、復号化方法、暗号化装置、復号化装置
JP2011081429A (ja) プログラム秘匿システム、プログラム秘匿方法
JP2013137646A (ja) プログラム保護装置、プログラム保護方法、及びプログラム

Legal Events

Date Code Title Description
A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20121106