JP2003507811A - ダウンロードされたプログラム断片を管理するためのプロトコル、ダウンロードされたプログラム断片を検証および変換する方法、および対応するシステム - Google Patents

ダウンロードされたプログラム断片を管理するためのプロトコル、ダウンロードされたプログラム断片を検証および変換する方法、および対応するシステム

Info

Publication number
JP2003507811A
JP2003507811A JP2001519256A JP2001519256A JP2003507811A JP 2003507811 A JP2003507811 A JP 2003507811A JP 2001519256 A JP2001519256 A JP 2001519256A JP 2001519256 A JP2001519256 A JP 2001519256A JP 2003507811 A JP2003507811 A JP 2003507811A
Authority
JP
Japan
Prior art keywords
instruction
type
program
object code
stack
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.)
Pending
Application number
JP2001519256A
Other languages
English (en)
Other versions
JP2003507811A5 (ja
Inventor
グザヴィエ ルロイ、
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.)
Trusted Logic SAS
Original Assignee
Trusted Logic SAS
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 Trusted Logic SAS filed Critical Trusted Logic SAS
Publication of JP2003507811A publication Critical patent/JP2003507811A/ja
Publication of JP2003507811A5 publication Critical patent/JP2003507811A5/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44589Program code verification, e.g. Java bytecode verification, proof-carrying code

Abstract

(57)【要約】 本発明は携帯可能なシステムにダウンロードされたプログラム断片、すなわち、アップレット、の検証を管理するプロトコルと、検証する方法に関するものである。アップレット・ダウンロードコマンド(100a、100b)が実行される。肯定応答がひとたび受けられると、アップレットのオブジェクト・コードが読出され(101)、検証プロセスが、命令ごとに、行われる(102)。検証プロセスは、アップレットコードの実行開始時における携帯可能なシステムの仮想マシンの状態を表す、タイプスタックおよびレジスタタイプの初期化を行う段階と、ターゲット分岐命令と、ターゲット例外ハンドラ呼出しと、ターゲットサブルーチン呼出しとの存在の、各ターゲット現在の命令に対する、命令ごとの、検証段階とで構成されている。検証が成功したならば(103a)、アップレットは登録され(104)、確認応答がダウンロードドライブへ送られる(105)。さもなければ、アップレットは破壊される(106)。本発明はJava環境における携帯可能なシステムに使用するのに適している。

Description

【発明の詳細な説明】
【0001】 (技術分野) 本発明は、ダウンロードされたプログラム断片を管理するプロトコル、ダウン
ロードされたプログラム断片を検証する方法、ダウンロードされたプログラム断
片を変換する方法、および対応するシステム、更に詳しくいえば、メモリおよび
コンピューティング・パワーに関して利用できるいくつかの資源を有するオンボ
ード・データ処理システムを意図されているシステムに関する。
【0002】 (背景技術) 一般的なやり方では、図1aを参照して、オンボード・データ処理システム1
0はマイクロプロセッサ11と、実行可能なプログラムのコードを含んでいる書
き替えできないメモリ12などの、固定メモリと、システムに保存されるデータ
を含んでいるEEPROMタイプの書き替え可能で、不揮発性の固定メモリ13
と、プログラムが実行中にそれの中間結果を保存する揮発性のランダムアクセス
メモリ14と、システムがそれの周辺と相互作用できるようにする入力/出力装
置15とを含んでいることが繰り返される。オンボード・データ処理システムが
、銀行カードタイプの、マイクロプロセッサ・カードで構成されている場合には
、入力/出力装置15は、そのカードが、カード読取り端末装置などの、端末装
置と通信できるようにする直列リンクで構成される。
【0003】 従来のオンボード・データ処理システムでは、システムにより実行されるプロ
グラムのコードはシステムの製造中、または少なくとも後者が最終需要者へ出荷
される前、は固定される。
【0004】 しかし、より高度なオンボード・データ処理システムが実現されており、それ
らのシステムは、たとえば、JavaCardタイプのマイクロプロセッサ・カ
ード、などのように、再プログラム可能である。先のタイプに関しては、それら
の再プログラム可能なシステムは、ダウンローディング・プログラム断片のオペ
レーションを介して、システムが実務に供された後でプログラムの性能を高める
可能性を付加する。「アップレット」により広く名付けられている、それらのプ
ログラム断片を、この記述ではごちゃまぜにアップレットまたはプログラム断片
と呼ぶことにする。JavaCardシステムについての詳細については、企業
SUN MICROSYSTEMS INC.により1999年6月に出版され
た文書、特にwww(ワールド・ワイド・ウエブ)サイト上で電子的に利用でき
るドキュメンテーション、JavaCard技術チャプター、http://j
ava.sun.com./products/javacard/index
.html、を参照することができ、そうすると有用である。
【0005】 図1bはそのような再プログラム可能なオンボード・データ処理システムのア
ーキテクチャを示す。このアーキテクチャは従来のオンボードシステムのそれに
類似しているが、再プログラム可能なオンボード・データ処理システムは、それ
の入力/出力装置の1つによりアップレットを更に受けることができ、その後で
それらをそれの固定メモリ13に保存し、その後でそのメモリからそれらを主プ
ログラムを補充するものとして実行できる、ことが異なる。
【0006】 種々のオンボード・データ処理システムの間の可搬性という理由で、アップレ
ットは標準仮想マシンのためのコードの形で提供される。このコードはマイクロ
プロセッサ11により直接実行されるものではなく、仮想マシン16によりソフ
トウエア用語で解釈しなければならない。それは書き替えできない固定メモリ1
2に常駐しているプログラムで構成される。JavaCardカードの上記の例
では、使用される仮想マシンはJava仮想マシンのサブセットである。Jav
a仮想マシンに関連する仕様と、使用される仮想マシンとについての説明につい
ては、1996年にAddison‐Wesleyにより出版された、Tim
LINDHOLMおよびFrank YELLINの「Java仮想マシン仕様
(The Java Virtual Machine Specificat
ion)」、および企業SUN MICROSYSTEMS INC.により1
999年3月に出版された文書、特にwwwサイト上で電子的に利用できるドキ
ュメンテーション、「JavaCard2.1仮想マシン仕様」、http:/
/java.sun.com./products/javacard/JCV
MSpec.pdf、を参照することができ、そうすると有用である。
【0007】 サービス中のオンボード・データ処理システムにアップレットをダウンロード
する操作はかなりのセキュリティ問題をひき起こす。知らずに、またはわざと、
誤って書かれたアップレットはシステムに存在するデータを不正確に修正して、
主プログラムを正しく、または正しい時刻に、実行することを妨げ、またはそれ
以外に、以前にダウンロードされた他のアップレットを変更して、それらを使用
不能または有害なものにすることがあるかもしれない。
【0008】 コンピュータ・ハッカーにより書かれたアップレットはシステムに保存されて
いる秘密情報、たとえば、銀行カードの場合にはアクセスコードなどの情報、を
暴露することもあるかもしれない。現在は、アップレットのセキュリティの問題
を解決するために3つの解決策が提案されている。
【0009】 第1の解決策は、信用されている法人または個人から出されたアップレットの
みを受けるように、暗号署名を用いることである。
【0010】 銀行カードの上記例では、カードを発行した銀行の暗号署名を有するアップレ
ットのみが受けられ、カードにより実行され、署名のない他のいかなるアップレ
ットもダウンロード操作中に捨てられる。銀行から暗号化キーを利用できないカ
ードの悪意のユーザーは、したがってカード上の署名されていない危険なアップ
レットを実行できない。
【0011】 この第1の解決策は、同じ1つの出所、上記例では銀行、から全てのアップレ
ットが出る場合にはよく適する。この解決策は、銀行カードの例では、カードの
製作者、銀行、銀行カードのサービスを管理する企業、顧客のロイヤリティ・プ
ログラムを提供し、特定のアップレットをカードに合法的にダウンロードするこ
とを提案している大規模な商用分配組織などの、いくつかの出所からアップレッ
トが出るような場合には適用が困難である。アップレットの電子署名のために必
要な暗号鍵をそれらの種々の経済的関与者の間で共有することが大きな技術的、
経済的および法的な諸問題をひき起こす。
【0012】 第2の解決策は、アップレットの実行中にアクセスとタイピングのダイナミッ
クな検証を実行することである。
【0013】 この解決策では、仮想マシンが、アップレットの実行中に、 − メモリに対するアクセスの検証:メモリ領域での各読出しおよび各書込み
時に、仮想マシンが対応するデータに対するアップレットによるアクセスの権利
を検証する、 − データタイプのダイナミック検証:アップレットから各命令が届くと、仮
想マシンは、データタイプに対する制約が満たされることを調べる。例により、
仮想マシンは、有効なメモリアドレスなどのデータについての特殊な取扱いを行
い、整数アドレス変換またはアドレスに対する算術演算により無効なアドレスを
発生するアップレットを阻止することができる、 − スタックのあふれおよび仮想マシンの実行スタックに対する不法なアクセ
スの検出、それは、ある条件の下では、先行する検証機構を迂回する点まで、そ
れの動作を乱しがちである、 などのいくらかの検証を行う。
【0014】 この第2の解決策によって、満足できるセキュリティ条件の下で広範囲のアッ
プレットを実行できる。しかし、ダイナミック検証の範囲によって実行がかなり
遅くされるという欠点を持つ。実行を速くするために、マイクロプロセッサが複
雑となって、オンボードシステムのコスト費用が増大するが、それらの検証のい
くらかをマイクロプロセッサ自体が引き受けることができる。その検証は、取り
扱われるデータに関連付けるために追加のタイプ情報を必要とするために、装置
のランダムアクセスメモリおよび固定メモリの必要量が一層増加する。
【0015】 第3の解決策は、ダウンロード中にアップレットのコードの静的な検証を行う
ことである。
【0016】 この解決策では、この静的な検証はデータタイプのレベルでアップレットの実
行をシミュレートし、アップレットのコードがデータタイプの規則と、仮想マシ
ンにより課されるアクセス制御の規則とに適合することを、全てに対して1回、
設定し、スタックのあふれをひき起こさない。この静的検証が成功すれば、この
規則に適合することを動的に検証する必要なくアップレットを実行できる。静的
検証に失敗したならば、オンボード装置は「アップレット」を除却し、それの以
後の実行を行えないようにする。上記第3の解決策の詳細については、前記Ti
m LINDHOLMおよびFrank YELLINにより著作された文献と
、proceeding of the ACM SIGPLAIN,Work
shop on Intermediate Representation(
IR′95)、1995年1月号、118〜118ページ所載のJames A
.GOSLINGの「Java中間バイトコード(Java Intermed
iate Byte code)」と題する論文、および1998年5月5日に
認可された米国特許第5,748,964号を参照すると有用である。
【0017】 第2の解決策と比較して、第3の解決策は、仮想マシンが実行中にいかなる検
証も行わないので、アップレットの実行がはるかに速いという利点を有する。
【0018】 しかし、第3の解決策には、静的検証プロセスを行うために必要なコードのサ
イズと、検証の中間結果を保存するために必要なランダムアクセスメモリの容量
と、計算時間との面で複雑で費用がかさむという欠点がある。例によって、SU
N MICROSYSTEMSにより市販されているJava JDKシステム
に統合されているコード検証は約50kバイトのマシンコードを表し、ランダム
アクセスメモリの必要な容量は(Tp×Tr)×Nbに比例する。ここに、Tp
は最大スタック空間を示し、Trは最大レジスタ数を示し、Nbはアップレット
の、方法により広く示されている、サブプログラムにより使用される分岐ターゲ
ットの最大数を示す。それらのメモリの必要容量は、今日の多数のオンボード・
データ処理システム、特に商用のマイクロプロセッサカード、の資源の容量を大
幅に超えていた。
【0019】 第3の解決策のいくつかの変形が提案されている。そのうちには、アップレッ
トの書き手が、アップレットのコードに加えて、予め計算されたデータタイプま
たは正しいデータタイピングの予め設定された証明などの、ある量の特定の補充
情報を検証する装置へ送るものがある。対応する操作モードについての詳細につ
いては、proceedings of the Workshop Form
al Underspinning of Java 1988年10月、所載
のEvs ROSEおよびKristoffer HOGSBRO ROSEの
「軽量バイトコード検証(Lightweight Bytecode Ver
ification)」と、第24回プログラミング言語の原理についてのAC
Mシンポジウム紀要(Proceeding of the 24th ACM
Symposium Principles of ProgrammingL
anguages)106〜119ページ所載のGeorge c.NECUL
Aの「証明保持コード(Proof‐Carrying Code)」と題する
論文とを参照すると有用である。
【0020】 この補充情報によってコードをより迅速に検証すること、および検証プログラ
ムのコードのサイズをわずかに小さくすることが可能にされるが、ランダムアク
セスメモリに対する要求を減少したり、または正確なデータタイピングの予め設
定された証明情報の場合に、それらを十分増加することさえ可能にはしない。
【0021】 本発明の目的は先行技術の上記諸欠点を解消することである。
【0022】 (発明の開示) 特に、本発明の1つの主題は、ダウンロードされたプログラム断片、すなわち
、アップレット、を管理して、利用できるいくつかの資源を有する、マイクロプ
ロセッサカードなどの、オンボードデータ処理システムにより後者の実行を行え
るようにするプロトコルを実現することである。
【0023】 本発明の他の主題は、ダウンロードされたプログラム断片、すなわち、アップ
レット、を検証する方法をまた実現することであって、アップレットのコードが
ダウンロードされた時にそれを静的に検証するプロセスが実行され、このプロセ
スは、少なくともそれの原理においては、上記第3の解決策におそらく沿うもの
であるが、メモリの容量の値の限度内と、マイクロプロセッサカードおよびその
他の低性能オンボードデータ処理システムにより課される計算速度の限度内でこ
の検証を実行できるように、新しい検証技術が導入されている。
【0024】 本発明の別の主題は、たとえば、標準化されたプログラム断片、すなわち、ア
ップレット、についてJavaコンパイラを使用することにより得られる従来の
タイプのプログラム断片を変換する方法を実現することでもある。この方法は、
検証のプロセスを加速し、かつ今日のマイクロプロセッサカードまたはオンボー
ドデータ処理システムのレベルでそれらを実行するねらいで、本発明の主題であ
る検証方法の検証基準を、先験的に、満足する。
【0025】 本発明の他の主題は、最後に、ダウンロードされたプログラム断片の検証を管
理する前記プロトコルと、ダウンロードされたプログラム断片を検証する上記方
法とを実施できるようにするオンボードデータ処理システムと、従来のプログラ
ム断片、すなわち、アップレット、を標準化されたプログラム断片、すなわち、
アップレット、を上記のようにして変換する方法を実施できるようにするデータ
処理システムとを製造することである。
【0026】 本発明の主題である、再プログラム可能なオンボードデータ処理システムにダ
ウンロードされたプログラム断片を管理するプロトコルは、書き替え可能なメモ
リを装備されているマイクロプロセッサカードに特に応用される。プログラム断
片は、オブジェクト・コードと一連の命令とにより構成されている。それらは、
実行スタックと、それらの命令を介して操作されてこのオブジェクト・コードの
解釈を可能にするローカル変数またはレジスタとを装備されている仮想マシンに
より、オンボードシステムのマイクロプロセッサによって実行できる。オンボー
ドシステムは端末装置と相互に接続されている。
【0027】 それは、少なくともオンボードシステムのレベルにおいて、プログラム断片を
ダウンロードするためのコマンドを検出することにあることは注目に値する。ダ
ウンローディング・コマンドを検出する段階に対して肯定応答が行われると、そ
れは、更に、プログラム断片を構成しているオブジェクト・コードを読出しこの
オブジェクト・コードを書き替え可能なメモリに一時的に保存する。メモリに保
存されているオブジェクト・コードの全ては、命令ごとに、検証される。検証プ
ロセスは少なくとも、タイプスタックと、一時的に保存されているオブジェクト
・コードの実行開始時に仮想マシンの状態を表しているレジスタタイプのテーブ
ルを初期化する段階と、現在の各命令に対して、ターゲットと、分岐命令ターゲ
ットと、例外ハンドラのターゲットとの存在の、命令ごとの、検証の一連の段階
と、タイプスタックとレジスタタイプのテーブルとについての現在の命令の効果
の検証および更新の段階とにある。オブジェクト・コードの検証に合格しなかっ
た場合には、本発明の主題であるプロトコルは、一時的に保存されているプログ
ラム断片を削除し、その時に利用できるプログラム断片のディレクトリに後者を
記録することを省き、かつ誤りコードを読取り器へ送る。
【0028】 本発明の主題である、オンボードシステムにダウンロードされたプログラム断
片を検証する方法は、書き替え可能なメモリを装備されているマイクロプロセッ
サカードに特に適用される。プログラム断片はオブジェクト・コードにより構成
され、少なくとも1つのサブプログラム、一連の命令、を含んでいる。そのサブ
プログラムは、実行スタックと、それらの命令により操作されるオペランド・レ
ジスタとを装備されて、このオブジェクト・コードを解釈可能にする仮想マシン
により、オンボードシステムのマイクロプロセッサによって実行できる。オンボ
ードシステムは端末装置と相互に接続されている。
【0029】 ダウンローディング・コマンドの検出と、プログラム断片を構成しているオブ
ジェクト・コードの書き替え可能なメモリへの保存とに続いて、それは、各サブ
プログラムごとに、一時的に保存されているオブジェクト・コードの実行開始時
に、仮想マシンの状態を表しているデータによりタイプスタックとレジスタタイ
プのテーブルの初期化段階を実行することと、分岐命令ターゲットと、例外ハン
ドラ呼出しのターゲットと、サブルーチン呼出しのターゲットとの存在の弁別に
より、現在の各命令について、一時的に保存されているオブジェクト・コードの
検証を命令ごとに検証することと、タイプスタックのデータタイプとレジスタタ
イプのテーブルのデータタイプとに対する現在の命令の効果の実行と更新を、分
岐命令ターゲット、ターゲットサブルーチン呼出し、または例外ハンドラ呼出し
のターゲットの存在を基にして行うことにあることは注目するに値する。レジス
タタイプのテーブルが全ての命令の検証中に変更されていなければ、検証は成功
し、検証プロセスは、レジスタタイプのテーブルが安定して、変更が存在しなく
なるまで命令ごとに実行される。さもなければ、検証プロセスは中断される。
【0030】 本発明の主題である、プログラム断片のオブジェクト・コードをこの同じプロ
グラム断片に対する標準化されたオブジェクト・コードに変換する方法は、各命
令のオペランドランドがこの命令により操作されるデータタイプに属するような
プログラム断片のオブジェクト・コードに適用される。実行スタックはいかなる
あふれ現象も示さず、各分岐命令に対して、この分岐におけるスタックの変数の
タイプはこの分岐のターゲットにおけるものと同じである。得られた標準化され
たオブジェクト・コードは、各命令のオペランドが、この命令により操作される
データタイプに属し、実行スタックはいかなるあふれ現象も示さず、実行スタッ
クは分岐ターゲット命令において空きである。
【0031】 それは、オブジェクト・コードの全ての命令に対して、この命令の実行前およ
び実行後の実行スタックのデータタイプを持つ現在の各命令を注釈することと、
命令内および現在の各命令内で、それに対する実行スタックが空きでないような
分岐の存在を検出することと、にあることに注目するに値する。注釈データはこ
の命令に関連するデータ流の分析により計算され、検出操作は現在の各命令に割
当てられているスタック変数のタイプの注釈データを基にして実行される。空き
でない実行スタックの検出が行われると、それは更に、この分岐の前に実行スタ
ックの内容を一時的レジスタに入れて空きにし、かつこの分岐の後で一時的レジ
スタから実行スタックを再設定するために、命令を挿入してスタック変数をそれ
らの分岐または分岐ターゲットのいずれかの側に転送すること、およびさもなけ
ればいかなる転送命令も挿入しないことにある。
【0032】 したがって、この方法はこの同じプログラム断片に対して標準化されたオブジ
ェクト・コードを得ることを可能にする。そのプログラム断片では、プログラム
断片の実行に対するいかなる変更も存在しないと、実行スタックは各分岐命令お
よび各分岐ターゲット命令において空きである。
【0033】 本発明の主題である、プログラム断片のオブジェクト・コードをこの同じプロ
グラム断片のために標準化されたオブジェクト・コードへ転送する方法は、各命
令のオペランドがこの命令により操作されているデータタイプの属しているプロ
グラム断片のオブジェクト・コードに更に適用され、このオブジェクト・コード
の命令によりレジスタに書込まれた所与のタイプのオペランドが、同じ所与のデ
ータタイプを持つこのオブジェクト・コードの別の命令により同じレジスタから
再び読出される。得られた標準化されたオブジェクト・コードは、オペランドが
この命令により操作されているデータタイプに属するようなものであり、1つの
同じデータタイプが標準化されたオブジェクト・コード全体にわたって同じレジ
スタに割当てられている。
【0034】 それは、オブジェクト・コードの全ての命令に対して、この命令の実行前およ
び後のレジスタのデータタイプを持つ現在の各命令を注釈することと、採用され
ている元のレジスタを別々の標準化されたレジスタに分割することにより、それ
らの元のレジスタの種々のタイプの再割当てを実行することにあることに注目す
るに値する。注釈データはこの命令に関連するデータ流の分析により計算される
。1つの標準化されたレジスタが使用されている各データタイプに割当てられる
。標準化されたレジスタを使用するオペランドを操作する命令の再更新が行われ
る 。
【0035】 本発明の主題である、プログラム断片を管理するプロトコルと、プログラム断
片を検証する方法と、プログラム断片のオブジェクト・コードを標準化されたオ
ブジェクト・コードに変換する方法と、対応するシステムとは、マイクロプロセ
ッサカード、特にJava環境における、などの再プログラム可能なオンボード
システムの開発において応用される。
【0036】 それらは下記の説明を読み、かつ、先行技術に関連する図1aと図1b以外の
図面を見ることにより一層良く理解されるであろう。
【0037】 (発明を実施するための最良の形態) 一般に、本発明の主題である、ダウンロードされたプログラム断片を管理する
プロトコルと、ダウンロードされたプログラム断片を検証および変換する方法と
、対応するシステムとは、資源を少し有する、特にマイクロプロセッサカードな
どの、オンボードデータ処理システムにおけるアップレットの確実なダウンロー
ドおよび実行のためのソフトウエアアーキテクチャにより実現されることが示さ
れている。
【0038】 一般に、下記の説明はJavaCardタイプの再プログラム可能なマイクロ
プロセッサカードの応用に関するものであることが示されている。先に説明の冒
頭で述べた、企業SUN MICROSYSTEMS INC.から電子的に入
手できる文書、JavaCard Technologyを参照されたい。
【0039】 しかし、本発明は、実行スタック、ローカル変数またはレジスタ、を含む仮想
マシンのコードで書かれたアップレットをダウンロードすることにより再プログ
ラムできる任意のオンボードシステムに応用できる。それの実行モデルが強力に
タイプづけられ、アップレットのコードの各命令が特定のデータタイプのみに適
用される。次に本発明の主題である、再プログラム可能なオンボードシステムに
ダウンロードされたプログラム断片を管理するプロトコルを図2を参照して説明
する。
【0040】 上記図を参照して、プログラム断片すなわちアップレットを構成しているオブ
ジェクト・コードが、上記仮想マシンによってオンボードシステムのマイクロプ
ロセッサにより実行できる一連の命令で構成されていることが示されている。仮
想マシンは上記オブジェクト・コードを解釈することを可能にする。オンボード
システムはたとえば直列リンクを介して端末装置に相互接続されている。
【0041】 上記図2を参照して、本発明の主題である管理プロトコルは、段階100a、
100bで、オンボードシステムにおいて、このプログラム断片をダウンロード
するコマンドを検出することに少なくともある。したがって、段階100aは、
上記コマンドを読取る段階で構成でき、段階100bは読取られたコマンドを試
験し、ダウンロード・コマンドの存在を検証する段階である。
【0042】 ダウンロード・コマンドを検証する段階である段階100a、100bに対し
て肯定応答が行われると、本発明の主題であるプロトコルは、次に段階101に
おける、関連するプログラム断片を構成しているオブジェクト・コードを読取り
、上記オブジェクト・コードをオンボードデータ処理システムのメモリに一時的
に保存することにある。上記一時的保存操作は再書き込み可能なメモリにおいて
実行でき、または適切であるならば、十分な容量を有している、オンボードシス
テムのランダムアクセスメモリで実行できる。オブジェクト・コードを読み出し
て再書き込み可能なメモリに一時的に保存する段階は、図2においてアップレッ
トのコードをロードするとして示されている。
【0043】 その後で上記段階に、一時的に保存されているオブジェクト・コードの全てを
、上記オブジェクト・コードの、命令ごとの、検証プロセスに提出することであ
る段階102が続く。
【0044】 検証プロセスは、タイプのスタックと、一時的に保存されているオブジェクト
・コードの実行開始時に仮想マシンの状態を表すデータタイプのテーブルとを初
期化する段階と、CIBと示されている分岐命令ターゲットなどのターゲットと
、例外ハンドラ呼出しのターゲットまたはサブルーチン呼出しのターゲットなど
のターゲットの存在を、Iiで示されている、各命令に対して、見分けることに
より、命令ごとに、検証する一連の段階とに少なくともある。現在の命令Ii
タイプのスタックとレジスタタイプのテーブルとに対する効果の検証と更新が行
われる。
【0045】 段階103aで検証に合格すると、本発明の主題であるプロトコルは、段階1
04において、ダウンロードされたプログラム断片を利用できるプログラム断片
のディレクトリに記録することと、段階105において、肯定的な受領確認応答
を読取り器へ送ることにある。
【0046】 他方、段階103bにおけるオブジェクト・コードの検証に合格しない場合に
は、本発明の主題であるプロトコルは、段階103cにおいて、一時的に記録さ
れているプログラム断片のオンボードシステムにおけるいかなる実行も禁止する
ことにある。禁止段階103cは種々のやり方で実現できる。限定しない例とし
て、この段階は、段階106において、一時的に記録されているプログラム断片
を、利用できるプログラム断片のディレクトリに記録することなく削除すること
と、段階107において、誤りコードを読取り器へ送ることとにある。段階10
7と105は段階106と104のそれぞれの後に実現でき、またはそれらとの
マルチタスク動作で実現できる。
【0047】 同じ図2を参照して、段階100bにおけるダウンロード・コマンドを検出す
ることにある段階に対する応答が否定であると、本発明の主題であるプロトコル
は、段階108において、プログラム断片のディレクトリからの利用できるプロ
グラム断片を選択するコマンドを検出することにあり、利用できるプログラム断
片の選択を検出した、段階108に対する応答が肯定であると、段階109にお
いて、この選択された利用できるプログラム断片を実行するためにそれを読出す
ことにある。その後で段階109の後に、仮想マシンにより呼出された利用でき
るプログラム断片を実行する段階110が続く。これには可変タイプの動的な検
証と、呼出された利用できるプログラム断片により操作されるオブジェクトのア
クセス権、または各命令が実行された時の実行スタックのあふれははない。
【0048】 段階108において否定応答が得られた場合には、この段階は呼出された利用
できるプログラム断片を選択するコマンドを検出することにあり、本発明の主題
であるプロトコルは、段階111において、オンボードシステムの標準コマンド
を処理することに進むことにある。
【0049】 たとえば、タイプの動的な検証またはJavaCardタイプのオブジェクト
に対するアクセス権が無いことに関しては、この検証なしはカードのセキュリテ
ィを妥協するものではない。その理由は、アップレットのコードは必然的にうま
く合格した検証を有するからである。
【0050】 更に詳しく言えば、本発明の主題である方法で、マイクロプロセッサカードま
たはオンボードデータ処理システムに対して行われるように、実行されるコード
検証は、説明において以前に述べた「Java仮想マシン仕様(Java Vi
rtual Machine Specification)」と題する文書に
記述されている仮想Javaマシンについてのコードの従来の検証よりも選択的
である。
【0051】 しかし、従来のJava検証者が関連する限り正しいJava仮想マシンの任
意のコードを、マイクロプロセッサカードで行われるコード検証にうまく合格で
きる等価コードに変換できる。
【0052】 本発明の主題であるプロトコルを実現するということに関して述べた上記検証
基準を満たすJavaコードを直接に書込むことを思い浮かべることは可能であ
るが、本発明の注目すべき目的は任意の標準的なJavaコードを、同じプログ
ラム断片に対する標準化されたコードに自動的に変換する方法を実現することで
もあり、上記のように実現された検証基準を必然的に満たす。標準化されたコー
ドに変換する方法、および対応する装置についてこの説明に続いて詳細に説明す
る。
【0053】 本発明の主題に従ってプログラム断片、すなわちアップレット、を検証する方
法のより詳細な説明を図3aおよび以後の図を参照して以下に詳細に説明する。
【0054】 一般に、本発明の主題である検証方法を、図2を参照して上で説明したように
、本発明の主題であるプログラム断片を管理するプロトコルの一部として、また
は独立に実現できて、必要であると判定された検証プロセスをそれがどのような
ものであっても提供することが示されている。
【0055】 一般に、プログラム断片は、少なくとも1つのサブプログラム、より一般的に
は方法と名付けられている、を含んでいるオブジェクト・コードで構成され、か
つオンボードシステムのマイクロプロセッサにより仮想マシンを介して実行でき
る一連の命令で構成されることが示されている。
【0056】 図3aに示されているように、この検証法は、各サブプログラムに対して、検
証の主題であるオブジェクト・コードの実行の開始時に仮想マシンの状態を表し
ているデータにより、タイプのスタックと、この仮想マシンのレジスタタイプの
テーブルとを初期化する段階200を実行することにある。このオブジェクト・
コードは、本発明の主題であるプロトコルの実現を参照して上で説明したように
一時的に保存できる。
【0057】 上記段階200の後に、オブジェクト・コードの最初の命令に現在の命令Ii
、インデックスi、の読出しを配置することにある段階200aが続く。段階2
00aの後に、Iiで示されている、現在の各命令に対して、分岐命令ターゲッ
トCIB、例外ハンドラ呼出し、CEMで示されている、のターゲット、または
サブルーチン呼出しのターゲットCSRの存在を見分けることにより、上記オブ
ジェクト・コードの検証を命令ごとに行うことである段階201が続く。
【0058】 検証段階201の後に、タイプのスタックのデータタイプとレジスタタイプの
テーブルのデータタイプとに対する現在の命令Iiの効果を他の命令により指摘
された現在の命令について、分岐命令ターゲットCIBと、サブルーチン呼出し
のターゲットCSRと、例外ハンドラ呼出しCEMのターゲットとの存在の関数
として検証および更新する段階が続く。
【0059】 現在の命令Iiのための段階202の後に、最後の命令に達したかかどうかを
判定する段階203が続く。この判定は: Ii=オブジェクト・コードの最後の命令か と書かれる。この判定203に対する応答が否定であると、プロセスは、i=i
+1と書かれている次の命令203へ進み、それから段階201へ戻る。
【0060】 段階202における、上記検証は、レジスタタイプのテーブルが、オブジェク
ト・コードを構成している全ての命令Iiの検証中に変更されていない時に合格
したと示されている。このために、レジスタタイプのテーブルの安定な状態の存
在についての判定205が設けられている。この判定は: ∃?レジスタタイプのテーブルの安定な状態 と書かれている。
【0061】 判定205に対する応答が肯定であると、検証に合格したことになる。
【0062】 他方、変更が存在していることが通知されている場合には、検証プロセスは繰
り返され、段階200aへ戻ることにより再開される。最大Nr×Hの繰り返し
の後でプロセスは終了することが保証されている。ここに、Nrは使用されてい
るレジスタの数を示し、Hはサブタイプ関係に依存する定数を示す。
【0063】 図3aを参照して上で説明した検証方法の最中に操作される変数のタイプに関
する種々の指示を、図3bを参照して次に説明する。
【0064】 上記変数タイプは、検証されるプログラム断片中で定められているオブジェク
トクラスに対応するクラス識別子と、数値変数タイプとを少なくとも含む。数値
お変数タイプは、タイプshort、pビットに符号化された整数、ここにpの
値は16にできる、飛び越し命令JSRの戻りアドレスのためのタイプ、このア
ドレスタイプはretaddrと識別されている、零オブジェクトの参照に関連
するタイプnull、オブジェクトプロパーに関連するタイプobject、全
てのタイプの交差を表し、値零nilに対応する特定のタイプ、全てのタイプ
の連合を表し、値の任意のタイプに対応する他の特定のタイプとを少なくとも
含んでいる。
【0065】 図3bを参照して、上記変数タイプの全てがサブタイピング関係: objectεT; short,retaddrεT; εnullshortretaddr を検証することが示されている。
【0066】 次に、付録の表T1に示されているデータ構造の第1の例を参照して、図3a
に示されている検証プロセスのより具体的な例を説明する。
【0067】 上記例はJavaコードで書かれているアップレットに関するものである。
【0068】 この検証法は、検証されるポインタ‐ツー‐命令Iiを介して検証されるアッ
プレットを形成するサブプログラムのコードをアクセスする。
【0069】 この検証プロセスは、上記表T1の例におけるsaloadに対応する現在の
命令Iiにおいて実行スタックのサイズとタイプを記録する。
【0070】 その後でこの検証法は、タイプのスタック中の現在の命令における実行スタッ
クのサイズとタイプを、それのタイプスタック・ポインタを介して記録する。
【0071】 上の記述で述べたように、このタイプのスタックは、現在の命令Iiにおける
仮想マシンの実行スタックの状態を反映する。表T1に示されている例では、命
令Iiの将来の実行時に、スタックは3つのエントリ:クラスCのオブジェクト
に対する参照、p=16ビットで符号化されている整数、タイプshort[]
の表に対する参照、及びタイプshortのp=16ビットの整数、を含む。こ
れはタイプスタックにも示されている。これも3つのエントリ:C、クラスCの
オブジェクトのタイプ、short[]、整数p=16ビットの表のタイプ、お
よびshort、整数p=16ビットのタイプ、を含む。
【0072】 他の注目すべきデータ構造はレジスタタイプのテーブルで構成されている。こ
のテーブルはレジスタの状態、すなわち、ローカル変数を保存するレジスタの状
態と、仮想マシンの状態で構成されている。
【0073】 表T1に示されている例を続けて、レジスタタイプCのテーブルのエントリ0
がタイプCを含んでいる、すなわち、現在の命令Ii=saloadの将来の実
行時にレジスタ0がクラスCのオブジェクトに対する参照を含むことが保証され
ることが示されている。
【0074】 検証中に操作されて、レジスタタイプのテーブルと、タイプスタックに保存さ
れている種々のタイプが図3bに表されている。それらのタイプは次のものを含
む。 − アップレットで定められている特定のオブジェクト・クラスに対応するクラ ス識別子CB; − p=16ビットで符号化された整数であるshort、たとえば、2pビッ トで符号化された整数の、それぞれ、最上位のpビットおよび最下位のpビ ットであるint1およびint2、または上記したように命令の戻りアド レスであるretaddr; − 零オブジェクトの参照を表すタイプnull
【0075】 サブタイピングの関係については、タイプT1のあらゆる有効な値がタイプT
2の有効な値でもあれば、タイプT1はタイプT2のサブタイプであることが示
されている。クラス識別子の間のサブタイピングがアップレットのクラスの間の
承継階層を反映する。他のタイプについては、サブタイピングは図3bに示され
ている格子により定められる。ここに、は全てのタイプのサブタイプであり、
全てのタイプはのサブタイプである。
【0076】 アップレットを形成しているサブプログラムを検証するプロセスのシーケンス
は、上記表T1を参照して、次の通りである。
【0077】 検証プロセスはアップレットの各サブプログラムで独立に実行される。各サブ
プログラムに対して、プロセスは関連するサブプログラムの命令について1つま
たは複数の検証動作を行う。検証プロセスの擬似コードが付録の表T2に与えら
れている。
【0078】 サブプログラムを検証するプロセスは表T1に示されているタイプスタックと
レジスタタイプのテーブルを初期化することで始まる。この初期化は調べられる
サブプログラムの実行の開始時の仮想マシンの状態を反映する。
【0079】 タイプスタックは最初は空きであり、スタック・ポインタは零に等しく、レジ
スタタイプはサブプログラムのパラメータのタイプで初期化される。これは、仮
想マシンがそれらのレジスタ内のこのサブプログラムのパラメータをパスすると
いう事実を示す。サブプログラムにより割当てられたレジスタタイプはデータタ
イプに初期化される。これは、仮想マシンがサブプログラムの実行時にそれら
のレジスタを零に初期化するという事実を示す。
【0080】 次に、命令およびサブプログラムの現在の各命令Iiに対して1つまたは複数
の検証動作が行われる。
【0081】 実現された検証動作、またはたとえば一連の動作が終わると、検証プロセスは
、付録の表T1に示されているレジスタタイプのテーブルに含まれているレジス
タタイプが検証動作中に変化したかどうかを判定する。変化しなければ、検証は
終了され、合格コードが主プログラムへ戻される。これは、図2に示されている
管理プロトコルの段階105において肯定的な受領確認応答を送ることを可能に
する。
【0082】 レジスタタイプの上記テーブルに対する変化が存在したとすると、検証プロセ
スは、レジスタタイプのテーブルに含まれているレジスタタイプが安定するまで
検証動作を繰り返す。
【0083】 次に、レジスタタイプのテーブルが安定するまで1回またはそれ以上実行され
る検証動作のシーケンスそのものについて、図3cないし3jを参照して説明す
る。
【0084】 図3aを参照する。段階201において、検証プロセスは、上記のように、現
在の命令Iiが分岐命令のターゲットか、サブルーチン呼び出しのターゲットか
、または実行ハンドラのターゲットであるかについて判定する。この検証は、サ
ブプログラムのコードに含まれている分岐命令と、このサブプログラムに関連づ
けられている例外ハンドラを調べることにより実行される。
【0085】 段階201で始まる図3cを参照する。現在の命令Iiが分岐命令のターゲッ
トである時は、この条件はIi=CIBで示されているテスト300により実現
されており、この分岐は無条件または条件付きであるが、検証プロセスはタイプ
スタックがサブプログラムのこの点において空きであることをテスト301によ
り調べる。このテスト301に対する応答が肯定であれば、検証プロセスは、続
行Aと記されているコンテキスト続行段階により続行される。
【0086】 続行Aで始まる図3dを参照して、現在の命令Iiがサブルーチン呼び出しの
ターゲットである時は、この条件はIi=CSRで示されているテスト304に
より行われるが、検証プロセスは、テスト305において、以前の命令Ii-1
順次続行しないことを検証する。この検証は、以前の命令が無条件分岐、サブプ
ログラム戻りまたは例外の増大である時に、テスト段階305により実現される
。テスト段階305は次のように記される。
【0087】 Ii-1=IB無条件、戻りRSRまたは増大L−例外。
【0088】 テスト305における応答が否定であると、検証プロセスは不合格段階で不合
格になる。他方、テスト305における応答が肯定であると、検証プロセスは、
それがretaddrタイプのエントリ、上記サブルーチンの戻りアドレス、を
正確に1つ含むようにしてタイプスタックを再初期化する。段階304において
現在の命令Iiがサブルーチン呼出しのターゲットでないとすると、検証プロセ
スは続行B段階においてコンテキストで続行される。
【0089】 図3eを参照して、現在の命令Iiが例外ハンドラのターゲットであると、こ
の条件はIi=CEMと記されているテスト307により実現される。ここにC
EMは例外ハンドラのターゲットを示す。この条件は、 Ii=CEM と記されているテスト307により実現される。テスト307における応答が否
定であると、プロセスは、 Ii-1=IB無条件、戻りRSRまたは増大L−例外。 記されているテスト305により、以前の命令が無条件分岐、サブルーチン戻り
または例外の増大であるとプロセスは検証する。
【0090】 テスト305に対する応答が肯定であると、検証プロセスはEXCEPTタイ
プと記されている、例外タイプに入ることにより、段階308において、タイプ
スタックの再更新へ進む。この段階308にコンテキスト続行段階、続行C、が
続く。テスト305に対する応答が否定であると、検証プロセスは不合格と記さ
れている段階によって不合格になる。その後でプログラム断片は拒否される。
【0091】 図3fを参照して、現在の命令Iiが多数の不適合分岐のターゲットであると
すると、この条件は、 Ii=不適合XIBs と記されているテスト309により実現される。不適合分岐は、たとえば、無条
件分岐またはサブルーチン呼出し、あるいは2つの異なる例外ハンドラである。
テスト309に対する応答が肯定であると、即ち、分岐が不適合であると、検証
プロセスは不合格と記されている段階によって不合格になり、プログラム断片は
拒否される。テスト309に対する応答が否定であると、検証プロセスは続行D
と記されている段階によって続行される。テスト309は先の説明において述べ
た続行段階Cで始まる。
【0092】 図3gを参照して、現在の命令Iiがいかなる分岐のターゲットでもないとす
ると、この条件は、上記続行Dで始まるテスト310により実現される。このテ
ストは Ii∃?分岐ターゲット、 記されている。ここに∃は既存の記号を示す。検証プロセスは、テスト310に
対する否定応答で、段階311におけるタイプスタックの更新へ進むことにより
続行する。段階311とテスト310に対する肯定応答の後に段階202のコン
テキスト続行段階が続く。その段階については図3aを参照して上で説明した。
【0093】 次に、上記段階202におけるタイプスタックに対する現在の命令の効果を検
証する段階を図3hを参照して詳細に説明する。
【0094】 上の図に従って、この段階は、タイプ実行スタックが現在の命令が含んでいる
オペランドの数と少なくとも同数のエントリを含んでいることを検証する少なく
とも1つの段階400を含むことができる。このテスト段階400は Nbep≧NOpi と記されている。ここにNbepはタイプスタックのエントリの数を示し、NO
piは現在の命令に含まれているオペランドの数を示す。
【0095】 テスト400に対する応答が肯定であると、このテストの後に、タイプスタッ
クを解く段階401aと、スタックのトップにおけるエントリのタイプが上記現
在の命令のオペランドのタイプのサブタイプであることを検証する段階401b
とが続く。テスト段階401aでは、命令iのオペランドタイプがTOpiと記
され、スタックのトップにおけるエントリのタイプがTargsと記されている
【0096】 段階401bでは、検証はTOpiのサブタイピング関係Targsサブタイ
プの検証に対応する。
【0097】 テスト400と401bに対する応答が否定であると、検証プロセスは検証プ
ロセスは不合格である。これは不合格段階をアクセスすることにより示されてい
る。他方、テスト401bに対する応答が肯定であると、検証プロセスは続行さ
れ、 −現在の命令の結果を積み重ねることを進めるためにタイプスタックに十分な
メモリ空間が存在することを検証する段階を行う。この検証段階は スタック空間≧結果空間 と記されているテスト402により実現される。ここに、不等号の各辺は対応す
るメモリ空間を示す。
【0098】 テスト402に対する応答が否定であると、検証プロセスは不合格である。こ
れは不合格段階により示されている。他方、テスト402に対する応答が肯定で
あると、検証プロセスは、段階403において結果に割当てられたデータタイプ
を積み重ねるために進む。積み重ねはそれらの結果に割当てられたデータタイプ
のスタックに対して行われる。
【0099】 限定しない例として、タイプスタックに対する現在の命令の効果を検証する図
3hを実現するために、整数のテーブルにおけるp=16ビットで符号化された
整数要素を読出すために対応するJava saloadより成る現在の命令の
ために、この整数のテーブルは整数のテーブルと、このテーブル中の整数インデ
ックスと、このテーブルでこのインデックスにおいて読出される整数による結果
とにより定められ、検証プロセスはタイプスタックが少なくとも2つの要素を含
んでいること、タイプスタックのトップにおける2つの要素がそれぞれshor []およびshortのサブタイプであり、スタックを解くプロセスへ進み、
その後でタイプshortを結果タイプとしてスタックするプロセスへ進むこと
が示されている。
【0100】 また、図3iを参照して、タイプスタックに対する現在の命令の効果を検証す
るために、現在の命令Iiがアドレスnのレジスタの読出し命令、IRと記され
ている、である時に、この条件はIi=IRnと記されているテスト404により
実現され、上記テスト404に対する応答が肯定であれば、検証プロセスは、段
階405において、レジスタタイプのテーブル中のエントリnを読出すことによ
り、この読出しの結果のデータタイプを検証すること、その後で、この現在の命
令のオペランドに対応するスタックのエントリのスタックを解く操作406aに
よるタイプスタックに対する現在の命令Iiの効果を検証すること、およびこの
結果のデータタイプをスタックすること406bにある。命令Iiのオペランド
はOPiと記されている。段階406aと406bの後にコンテキスト続行、続
行F、へ戻ることが続く。テスト404に対する応答が否定であると、検証プロ
セスはコンテキスト続行、続行F、により続行される。
【0101】 図3jを参照して、現在の命令Iiがアドレスnのレジスタの書込み命令、I
Wと記されている、であると、この条件はIi=IWmと記されているテストによ
り実現され、テスト407に対する応答が肯定であれば、検証プロセスは、段階
408における、タイプスタックとアドレスnのレジスタに書込まれているオペ
ランドのタイプtとに対する現在の命令の効果を判定することと、その後で、段
階409において、アドレスnにおけるレジスタタイプのテーブルのタイプエン
トリを、以前に保存されたタイプの直ぐ上と、アドレスnのレジスタに書込まれ
ているオペランドのタイプtの上とのタイプで置き換えること、にある。段階4
09にコンテキスト続行、続行204、へ戻ることが続く。テスト407に対す
る応答が否定であると、検証プロセスはコンテキスト続行、続行204、により
続行される。
【0102】 例として、現在の命令IiがタイプDの値をアドレス1のレジスタに書込むこ
とに対応し、命令の実行前のレジスタ1のタイプがCであったとすると、レジス
タ1のタイプがタイプobjectにより置き換えられる。これは、図3bに示
されているタイプの格子におけるCおよびDより高い最小タイプである。
【0103】 同様にして、例として、現在の命令Iiが、レジスタ0の内容をスタックする
ことにある命令aload‐0の読出しで、レジスタタイプのテーブルのエント
リ0がCであると、検証者はCをタイプスタックにスタックする。
【0104】 次に、付録の表T3とT4を参照して、Java環境で書かれたサブプログラ
ムの検証の例について説明する。
【0105】 表T3はこの表に含まれているJavaサブプログラムに対応する特定のJa
vaCardコードを表す。
【0106】 表T4はレジスタタイプの表と、各命令の検証前のタイプスタックの表との内
容を示す。種々の命令のオペランドに対するタイプ制約は全て観察される。命令
9へ分岐する命令5、矢印で表されている、の後と、上記分岐ターゲット9の前
とでスタックは空きである。レジスタ1の、最初はであった、タイプは、タイ
nullの値をレジスタ1に保存する命令1が調べられた時に、null ull の上限及び、となり、その後でタイプshort[]の値をレジスタ1
に保存する命令8が処理される時に、タイプshort[]、タイプshort []の上限及びnull、となる。最初の検証パス中に変化した、第2のパスが
行われる、レジスタ1のタイプは、最初のパスが終わった時に得られたレジスタ
タイプに寄与する。この第2の検証パスは最初のそれとまったく同様に、成功し
、レジスタタイプを変化しない。したがって、検証プロセスは成功裡に終了する
【0107】 次に、不正確なコードの4つの例に対する検証プロセスの失敗の場合の種々の
例について、付録の表T5を参照して説明する。 − 表T5の点a)において、例として与えられているコードの目的は、ポイン
タに対する算術プロセスを用いて無効なオブジェクト基準をつくることを試みる
ことである。それは命令2 saddの引数のタイプの検証により除却される。
それはそれら2つの引数をタイプshortのものであることを求める。 − 表T5の点b)とc)において、コードの目的は任意の整数をオブジェクト
基準に変換する2つの試みを行うことである。点b)では、レジスタ0がタイプ short 、命令0、およびタイプnull、命令5、と同時に用いられる。し
たがって、検証プロセスはタイプを記録0に割当て、レジスタ0が命令7にお
いてタイプobjectの結果として戻される時にタイプ誤りを検出する。 − 表T5のc)では、タイプ"if...then...else"の1組の
分岐が用いられて、整数またはオブジェクト基準で構成されている結果をス タ
ックのトップに放置する。検証プロセスはこのコードを除却する。その理 由は
、それが、命令5から命令9への分岐、矢印により表されている、にお いてス
タックが空きでないことを検出するからである。 − 最後に、表T5の点d)では、コードは、スタックのトップへの追加整数ス
タックする作用を、各繰り返しにおいて、持つループを含み、したがって、
ある数の繰り返しの後ではスタックあふれをひき起こす。検証プロセスはこのコ
ードを除却し、命令8から命令0への逆分岐、矢印により示されている、時には
スタックは空きでないことを知らせる。スタックは分岐点では空きではない。
【0108】 表T3、T4、T5を参照して上で説明した種々の例は、本発明の主題である
、検証プロセスは特に効率的であり、かつアップレット、および特にそれのサブ
プログラムに応用される。そのアップレットに対して、スタックタイプの条件、
またはタイプスタックの空きキャラクタの条件、分岐命令または分岐ターゲット
に対して、が満たされる。
【0109】 明らかに、そのような検証プロセスは、それらの基準を満たすオブジェクト・
コードを書込むことを意味する。それらのオブジェクト・コードは上記表T3に
おけるサブプログラムに対応する。
【0110】 しかし、および本発明の主題である方法の検証基準を必ずしも満たさない既存
のアップレットおよびアップレットのサブプログラム、特にJava環境で書か
れているアップレットとサブプログラムに関して、を確実に検証するために、本
発明の目的はそれらのアップレットまたはサブプログラムを標準化されたアップ
レットまたはプログラム断片に変換する方法を確立して、本発明の主題である検
証方法およびこの方法を実現する管理プロトコルの検証テストを成功裡に行うこ
とを可能にする。
【0111】 このために、本発明の主題は、方法およびアップレットを構成している従来の
オブジェクト・コードを変換するプログラムを実現することであって、この方法
と変換プログラムを、関連するアップレットが作成された時に、オンボード装置
すなわちマイクロプロセッサカードの外部で実現することが可能である。
【0112】 次に、まったく例示的な例として、Java環境の枠組みで、本発明の主題で
ある、コードを標準化されたコードへ変換する方法について説明する。
【0113】 既存のJavaコンパイラにより作成されるJVMコードは下記の種々の基準
を満たす。 C1: 各命令の引数は、この命令が予測するタイプに実際に属する; C2: スタックはあふれない; C′3: 各分岐命令に対して、この分岐におけるスタックのタイプはこの分岐
に対する可能なターゲットにおけるものと同じである; C′4: コードの1つの点でレジスタに書込まれ、コードの別の点で同じレジ
スタから再び読出されるタイプtの値は同じタイプtで常に再び読出される。
【0114】 本発明の主題である検証法の実現は、検証のために提出されたオブジェクト・
コードにより検証される、基準C′3とC′4が下の基準C3とC4により置き
換えられることを意味する。 C3: 各分岐命令および各分岐ターゲットにおいてスタックは空きである; C4: サブプログラムのコード全体を通じて1つの同じタイプに同じレジス
タが使用される。
【0115】 上記基準を参照して、Javaコンパイラはより弱い基準C′3とC′4のみ
を保証することが示されている。本発明の主題である検証プロセスおよび対応す
る管理プロトコルが実際により限定的な基準C3とC4を実際に保証して、アッ
プレットの実行と管理のセキュリティを確保することが示されている。
【0116】 標準化されたコードへのコードの変換をカバーする、標準化の概念は、本発明
の主題である検証プロセスに従って、基準C′3とC′4の基準C3とC4によ
る置き換えを独立に実現できる範囲まで種々の面で提案できて、各分岐命令およ
び各分岐ターゲットにおいてスタックが空きであることと、かつアップレットが
開くレジスタがタイプ付けられることを保証し、関連するアップレットの実行の
ために割当てられた単一のデータタイプが開かれている各レジスタに対応するよ
うに、または、他方では、一緒に、本発明の主題である検証プロセスの全体を満
たす。
【0117】 次に、本発明により特許請求されている、オブジェクト・コードを標準化され
たコードへ変換する方法を2つのことなる実現モードで説明する。第1の実現モ
ードは、基準C1、C2、C′3、C′4を満たすオブジェクト・コードの基準
C1、C2、C3、C′4を満たす標準化されたオブジェクト・コードへの、分
岐命令または分岐ターゲットによる変換に対応し、その後で、第2の実現モード
で請求されているように、第2の実現モードでは、同じ最初の基準が、基準C1
、C2、C′3、C4を満たす標準化されたオブジェクト・コード、たとえば、
タイプ付けられたレジスタを用いる標準化されたオブジェクト・コードに対応す
る、へ変換される。
【0118】 次に、本発明の主題であるコード変換法の第1の実現モードを図4aを参照し
て説明する。図4aに示されている実現モードでは、最初の従来コードが基準C
1+C2+C′3を満たすものと考えられ、変換の結果得られる標準化されたコ
ードは基準C1+C2+C3を満たすものと考えられる。
【0119】 上記図に従って、変換法は、この命令の実行の前および後のスタックのデータ
タイプを持つ、コードの、またはサブプログラムの現在の各命令Iiに対して、
段階500で、各命令を注釈することにある。注釈データはAIiと記されてお
り、関係Ii←→AIiにより関連する現在の命令に関連付けられる。注釈データ
はこの命令に関連するデータ流の解析により計算される。命令の実行の前および
後のデータタイプはtbeiおよびtaeiとそれぞれ記されている。データ流の
解析による注釈データの計算は当業者に知られている従来の計算であるので、詳
細には説明しない。
【0120】 段階500で実行される動作が付録の表T6に示されている。そこでは、12
の命令を含んでいるアップレットのサブプログラムに対して、レジスタのタイプ
およびスタックのタイプで構成されている注釈データAIiが導入される。
【0121】 上記段階500には、第1の命令Ii=I1にインデクスiを配置する段階50
0aが続く。段階500aには、命令のうちで、かつ現在の各命令Iiのうちで
、それについては実行スタックが空きでないような、IBと記されている分岐と
分岐ターゲットCIBとの存在を検出する段階501が続く。この検出501は
、現在の各命令に割当てられているスタック変数のタイプの注釈データAIi
基にして行われるテストにより実行される。このテストは現在の命令に対して IiはIBまたはCIBおよびスタック(AI)?空き と記されている。
【0122】 テスト501に対する応答が肯定であると、すなわち、空きでない実行スタッ
クの検出が存在すると、上記テストの後に、それらの分岐IBまたは分岐ターゲ
ットCIBの前に実行スタックの内容を一時的レジスタ内に空きにするため、お
よびこの分岐の後で一時的レジスタから実行スタックを再設定するために、命令
を挿入してそれらの分岐の両側にスタック変数を転送する。挿入段階は図4aに
502で記されている。それの後に、 Ii=最後の命令か? と記されている最後の命令に達したことをテストする段階503が続く。テスト
503に対する応答が否定であると、増加504i=i+1が実行されて、次の
命令へ進み、段階501へ戻る。テスト503に対する応答が肯定であれば、終
りの段階が開始される。テスト501に対する応答が否定であると、転送命令の
挿入がない中でこの変換方法は段階503への分岐により続行される。図4aに
示されているように、空きのスタックを有する分岐命令による標準化されたコー
ドへの従来のコードの変換法の実現により、プログラム断片の実行に何等の変更
も加えられない場合に、各分岐命令と各分岐ターゲット命令においてスタック変
数のスタックが空きであるような同じ最初のプログラム断片に対して標準化され
たオブジェクト・コードを得ることが可能にされる。Java環境の場合には、
スタックとレジスタの間でデータを転送する命令はJava仮想マシンのloa 命令およびstore命令である。
【0123】 表T6で導入されている例へ戻って、この変換法は命令9においてスタックが
空きでないような分岐ターゲットを検出する。その後でこの方法は、スタックの
内容をレジスタ1に保存し、分岐時にスタックが空きであるようにするために、
上記命令9へ進む分岐命令5の前に命令istore 1を挿入する。対称的に
、命令iload 1がターゲット9の前に挿入されて、分岐の前にそれがあっ
たのと全く同じにスタックの内容を再設定する。最後に、命令8の後で命令is tore 1 が挿入されて、命令9へ導く2つの経路でスタックが平衡するよう
にする。標準化されたコードへのこのようにして行われた変換の結果が表T7に
示されている。
【0124】 次に、最初の従来のオブジェクト・コードが基準C1+C′4を満たし、標準
化されたオブジェクト・コードが基準C1+C4を満たす場合に、図4bを参照
して本発明の主題である変換方法の第2の実現モードについて説明する。
【0125】 上記図4bを参照して、この方法は、それの実現モードにおいて、図4aに示
されているものにほぼ同じである段階500で求められているように、この命令
の実行前および後のレジスタデータのタイプを持つ現在の各命令Iiを注釈する
。このようにして、注釈データAIiはこの命令に関連するデータ流の解析によ
り計算される。
【0126】 注釈段階500の後に、種々のタイプで採用されている元のレジスタを検出し
、それらの元のレジスタを別々の標準化されたレジスタに分割することにより、
レジスタの再割当てを実行する段階、601と記されている段階、が続く。1つ
の標準化されたレジスタが使用される各データタイプに割当てられている。段階
601の後に、上記標準化されたレジスタを使用するオペランドを操作する命令
を再更新する段階602が続く。段階602にコンテキスト続行段階302が続
く。
【0127】 表T6に与えられている例を参照して、この変換方法は、r0と記されている
、ランク0のレジスタに2つのタイプ、object、命令0と1、およびin 、命令9およびそれ以後、が用いられることを検出することが示されている。
その後で、この方法は元のレジスタr0を2つのレジスタ、objectタイプ
の使用のためのレジスタ0と、intタイプの使用のためのレジスタ1、に分割
する。その後で、intタイプのレコード0の参照をレコード1の参照に変換す
ることにより、レコード0の参照が再び書込まれる。得られた標準化されたコー
ドが付録の表T8に示されている。
【0128】 上記表T8を参照して導入された例においては、スタックを標準化するため、
およびレジスタ0を2つのレジスタに分割することによりタイプ付けられたレジ
スタをつくるために、新しいレジスタが同時に用いられることが、限定しないや
り方で注目される。
【0129】 次に、図4aに示されているように空きスタックを持つ分岐命令で従来のコー
ドを標準化されたコードへ変換する方法を、図5aに関連して、好適な、限定し
ない実現モードでより詳細に説明する。
【0130】 この実現モードは、命令内、および現在の各命令Ii内で、分岐IB、または
、スタックが空きではないような、それぞれ分岐ターゲットCIB、の存在を検
出する段階501に関する。
【0131】 スタックが空きでない、この条件は段階504aでは、Iistack≠em
pty、と記されている、ターゲット命令の決定に続いて、変換プロセスは、上
記段階504aにおいて、それらの命令に、新しいレジスタのセットを組み合わ
せる、それらの命令においてアクティブであるスタック場所ごとに1つ、ことで
ある。このように、iが、関連させられたスタックタイプが空きでなく、タイプ
がtp1i〜tpni、n>0、スタックは空きでない、であるような分岐ターゲ
ットのランクを示すならば、変換プロセスはn個の新しくて、まだ使用されてい
ない、レジスタ、r1〜rn、を割当て、かつそれらを対応する命令iに関連させ
る。この操作は段階504aで行われる。
【0132】 段階504aの後に、ランクiの検出された各命令を調べて、テスト段階50
4で、分岐ターゲットCIBまたは分岐IBの存在を検出する段階504が続く
。段階504は: ∃?CIB,IBおよびIi=CIB により示されているテストの形で示されている。
【0133】 ランクiの命令が、先行する同等性により表されている分岐ターゲットCIB
であり、かつこの命令におけるスタック変数のスタックが空きでない、すなわち
、テスト504に対する応答が肯定である、場合には、分岐と、例外の増大また
はプログラム戻りより成るランクi−1のあらゆる先行する命令に対して、この
条件は: Ii-1=IB,例外の増大,プログラム戻り により示されている、テスト段階505において実現される。ランクiの検出さ
れた命令は分岐によってのみアクセスできる。上記テスト504に対する応答が
肯定であると、変換プロセスは、ランクiの関連する検出された命令の前に新し
いレジスタのセットからloadタイプのロード命令のセットを挿入する段階5
06を実行する。挿入動作506の後に全ての分岐をランクiの検出された命令
へ、最初に挿入されたロード命令loadへ再び向ける段階507が続く。挿入
動作および再び向ける動作が付録の表T9に示されている。
【0134】 順次進行しているランクi−1のあらゆる先行命令に対して、すなわち、ラン
クiの現在の命令が分岐により、先行する命令から同時にアクセスできる時に、
この条件はテスト508により実行され、関係 Ii-1→Ii および IB→Ii により記号化されている。変換プロセスは、ランクiの検出された命令の前に新
しいレジスタのセットに対してバックアップするために検出されたバックアップ
命令storeのセットを挿入すること、およびこの新しいレジスタのセットか
らロードするためにロード命令のセットloadを挿入する段階509である。
段階509の後に、ランクiの検出された命令に対する第1の挿入されたロード
命令loadへ全ての分岐を再び向ける段階510が続く。
【0135】 無条件分岐より成るランクiの任意の検出された命令に対して、ランクiの検
出された命令が決定された命令への分岐である場合に、この条件は Ii=IB無条件 と記されているテスト511により実行される。図5aに示されている変換プロ
セスは、ランクiの検出された命令、多数のバックアップ命令storeの前に
、テスト511に対する肯定応答で、段階512における挿入である。変換プロ
セスは、命令iの前に、例として表T11に示されているようにn個の命令を挿
入する。命令storeはアドレスr1〜rnをアドレスする。ここに、nはレジ
スタの数を示す。したがって、バックアップ命令が新しい各命令に関連させられ
る。
【0136】 条件付き分岐よりなるランクiのあらゆる検出された命令と、この条件付き分
岐命令により操作されるオペランドの、0より大きい、数mOpに対して、この
条件は: Ii=IB条件 mOp>0 と記されているテスト513により実現される。上記テスト513に対する肯定
応答で、この変換プロセスは、ランクiのこの検出された命令の前に段階514
で、swap_xと記されている並べ換え命令を、ランクiの検出された命令の
mOpオペランドのスタック変数と、以後のn個の変数のスタックのトップに挿
入することより成る。この並べ換え操作によってスタック変数のスタックのトッ
プに、新しいレジスタr1〜rnのセット中で調べるべきn個の値を集めることが
可能にされる。段階514に、ランクiの命令の前に、新しいレジスタr1〜rn のセットをバックアップするためにバックアップ命令storeのセットを挿入
することである段階515が続く。上記挿入段階515自体に、ランクiの命令
の後に、新しいレジスタr1〜rnのセットからロードするためにロード命令 oad のセットを挿入する段階516が続く。対応する挿入操作のセットが付録
の表T12に示されている。
【0137】 終了にするという理由で、図5aを参照して、テスト504に対する応答が否
定であると、変換プロセスの続行がコンテキスト続行段階、続行503、により
実現されること、テスト505、508、511および513に対する否定応答
自体の後にコンテキスト続行段階、続行503、を介する変換プロセスの続行が
続くこと、および同じことが上記再方向付け段階507および510と挿入段階
512と516に適用されることが示されている。
【0138】 次に、図5bを参照して、図4bに示されている、タイプ付けされたレジスタ
を用いてオブジェクト・コードを標準化し、標準化されたオブジェクト・コード
に変換する方法について一層詳しく説明する。この実現モードは、より具体的に
は、種々のタイプに使用される元のレジスタを検出することによりレジスタを再
び割当てる段階601の非限定的の、好適な実現に関するものである。
【0139】 上記図5bを参照して、上記段階601は、各レジスタrjのIDjと記されて
いる寿命時間間隔を、段階603、で決定することであることが示されている。
「live range」または「webs」、と記されているそれらの寿命時
間間隔は、レジスタrが部分トレースのあらゆる点で生きているように、それら
のトレースの最大セットとして定義される。それらの概念のより詳しい定義につ
いては、Morgan KAUFMANN、1997、Steven S. M
UCHNICKにより編集された「進歩したコンパイラ設計および実装(Adv
anced Compiler Desigm and Implementa
tion)」と題する著作の16.3節を参照すると有用である。段階603は
、関係 IDj←→rj により示されている。そこに請求されているように対応する寿命時間間隔IDj
は各レジスタrjに関連付けられている。
【0140】 上記段階603に、各寿命時間間隔IDjの、tpjと記されている、主データ
タイプを決定する段階604が続く。レジスタrjに対する寿命時間間隔IDj
主なタイプは、上記寿命時間間隔に属するバックアップ命令storeによりこ
のレジスタrjに保存さされているデータタイプの上限により定められる。
【0141】 段階604自体には、上で段階603と604により定められた寿命時間間隔
の間の干渉グラフを設定することにある段階605が続く。この干渉グラフは向
けられていないグラフで構成され、空きの各ピークは寿命時間間隔で構成され、
ピークが他のピークのレジスタをアドレスするバックアップ命令を含んでいるな
らば、2つのピークIDj1とIDj2の間にそれの弧、aj1,j2と記されている、
が存在し、またはそれの逆も真である。図5bには、干渉グラフの構造が記号で
示されている。当業者に知られている計算技術を基にしてこの構造を実現するこ
とが可能である。このタイプのグラフの構造についての詳細は、Addison
‐Wesleyにより1986年に発行されたAlfred V.AHO、Ra
vi SETHI およびJeffrey D.ULLMAN著「コンパイラ:
原理、技術およびツール(Compilers:princles,techn
iques,and tools)」と題する著作の9.7節を参照すると有用
である。
【0142】 段階605には、全てのピーク対、干渉グラフのピーク対の2つのピークが同
じ関連させられた主データタイプを持っていない、の間に弧を加えることにより
、干渉グラフ中の各レジスタrjに割当てられているデータタイプの独自性を、
段階606で、翻訳することにある図5bに示されている標準化法が続く。各レ
ジスタrjに割当てられているデータタイプの独自性のキャラクタの翻訳は干渉
グラフにおける基準C4を翻訳することおよび考慮することに明らかに対応し、
この基準は説明で以前に述べたことが理解される。その後で、段階606には、
干渉グラフの具体例例示が行われる段階607が続く。この具体例例示は、通常
の技術で主張されているように干渉グラフのペインティング段階としてより一般
的に名付けられている。段階607中は、干渉グラフ中の2つの隣接する間隔が
異なるレジスタ番号を受けるようにして、変換プロセスが各寿命間隔IDjkにレ
ジスタ番号rkを割当てる。
【0143】 この操作は任意の適切なプロセスを基にして実行できる。非限定的な例として
、好適なプロセスが、 a) 干渉グラフ中の最小限度のピークを選択し、それをグラフから抽出する
ことにある。最小限度というのは、隣接するピークの最小数として定義
される。この段階はグラフが空きになるまで繰り返される。
【0144】 b) 以前に抽出された各ピークは抽出とは逆の順序、最後に除去されたもの
が最初に入れられる、で順次干渉グラフに再び入れられる。そうすると
隣接する全てのピークに割当てられていた番号とは異なる最小レジスタ 番
号を入れられる各レジスタに割当てることができる。
【0145】 最後に、図4bに示されている、段階602により、変換および再割当てプロ
セスがレジスタに対するアクセス命令を関連するアップレットのサブプログラム
のコードで書き替える。対応する寿命時間間隔内での所与のレジスタに対するア
クセスは異なるレジスタへのアクセスにより置き換えられる。それの数は例示段
階、ペインティング段階とも名付けられる、中に割当てられていた。
【0146】 本発明の主題において請求されているように、プログラム断片すなわちアップ
レットの管理プロトコルと検証プロセスの実現を可能にする、オンボードデータ
処理システムと、アップレットの開発システムとについてのより詳細な説明を図
6を参照して次に行う。
【0147】 参照番号10を有する対応するオンボードシステムについては、このオンボー
ドシステムは再プログラム可能なタイプのシステムであって、図1bに示されて
いるような重要な部品を含んでいることが想起される。上記オンボードシステム
は直列リンクにより端末装置に相互接続すべきであると考えられる。端末装置自
体は、たとえばローカルネットワークを、またもし適切であれば遠隔ネットワー
クを、介して、参照番号20を有するアップレット開発コンピュータにリンクさ
れている。オンボードシステム10では端末装置が直列リンクへ送るコマンドの
読出しと実行を行う主プログラムを走らす。また、マイクロプロセッサカード用
の、たとえばISO7816の標準コマンドなどの、標準コマンドを実行でき、
主プログラムは2つの追加コマンドを認識する。そのうちの1つのコマンドはア
ップレットの遠隔ローディングのためのものであり、他方はマイクロプロセッサ
カードに以前ロードされたアップレットを選択するためのものである。
【0148】 本発明の主題に従って、主プログラムの構造は、図2を参照して上で説明した
ように、ダウンロードされたプログラム断片を管理するプロトコルに従って、ダ
ウンロードされたプログラム断片を管理および検証する少なくとも1つのモジュ
ールを含むようにして実現される。
【0149】 このために、メモリ、特に書込みできない固定メモリROM、の構造が特に、
主プログラムから離れて、上記のようにプロトコル管理および検証モジュール1
7を含むようにして変更される。最後に、EEPROMタイプの不揮発性の書き
替え可能なメモリについては、これは、本発明の主題である管理プロトコルおよ
び検証プロセスを実現することを可能にする、18と記されている、アップレッ
トのディレクトリを含むから有利である。
【0150】 同じ図6を参照して、上の説明で述べたように、Java環境の枠組み内で基
準C1+C2+C′3+C′4を満たす、従来のオブジェクト・コードを同じプ
ログラム断片に対する標準化されたオブジェクト・コードへ変換することを実際
に可能にする、本発明の主題に合致するアップレット開発システムが、従来のJ
avaコンパイラ21に関連させられて、図4a、図4bおよび図5a、図5b
を参照した説明で上で述べた第1の実現モードおよび第2の実現モードで求めら
れた標準化されたコードを変換するために進む、22と記されている、コード変
換器モジュールを含むことが示されている。一方では、以前に述べたように、空
きスタックを持つ分岐命令で元の命令を標準化されたオブジェクト・コードへ標
準化することと、他方では、タイプ付けされたレジスタを用いて標準化されたコ
ードへ標準化することは、本発明の主題である検証方法により課される検証基準
C3とC4を満たすことを可能にする。
【0151】 コード変換器モジュールの後にJavaCard変換器23が続く。それは遠
隔ネットワークまたはローカルネットワークによる端末装置への伝送、および直
列リンクを介する、マイクロプロセッサカード10への伝送を可能にする。した
がって、図6に示されているアップレット開発システム20は、アップレットの
JavaソースコードからJavaコンパイラ21により発生されたコンパイル
されたクラスファイルを、等しいが、管理プロトコルと、マイクロプロセッサカ
ード10に搭載されている検証モジュール17とにより課された追加の制約C3
とC4を観察するクラスファウルに変換することを可能にする。それらの変換さ
れたクラスファイルは標準JavaCard変換器23によりカード上のダウン
ロード可能なアップレットに変換される。
【0152】 次に、本発明の主題であるプロトコル・コンポーネントと、方法およびシステ
ムのセットの特に注目に値するコンポーネントを情報提供のためにのみ与えるこ
とにする。
【0153】 説明の初めで述べた先行技術の検証方法と比較して、本発明の主題である検証
方法は、検証努力を、各アップレットの実行のセキュリティにとって重要である
オペランドのタイピング特性に集中すること、すなわち、各命令に関連している
タイプ制約とスタックあふれなしを観察すること、が注目に値するようである。
他の検証はセキュリティに関しては重要ではないようであり、特に、コードが最
初にあらゆるレジスタを最初に読出す前にそのレジスタを正しく初期化する検証
がそうである。これに反して、本発明の主題である検証法は、方法が初期化され
る時に仮想マシンからの全てのレジスタを零に初期化するように動作して、初期
化されていないレジスタの読出しがカードのセキュリティを妥協できないように
することを保証する。
【0154】 また、各分岐命令または各分岐ターゲット命令でスタックが空きでなければな
らないと求められる、本発明の主題である検証方法により課される要求が、分岐
の実行前と、プログラムが分岐した命令の実行後にスタックが同じ状態、空き、
であることを保証する。この動作モードは、関連するサブプログラムまたはアッ
プレットのコードがたどる実行経路がどのようなものであっても、スタックが一
貫した状態にあることを保証する。スタックの一貫性は、分岐または分岐ターゲ
ットが存在していてさえも、そのようにして保証される。TpxNb、使用され
る実行スタックの最大サイズとコード中の分岐ターゲットの最大数との積、に比
例するある量のランダムアクセスメモリを必要とする、各分岐ターゲットにおけ
るスタックのタイプをランダムアクセスメモリに保存する必要がある、先行技術
の方法およびシステムに反して、本発明の主題である検証方法は検証中の命令の
時に実行スタックのタイプを必要とするのみであり、コードの他の点ではこのス
タックのタイプをメモリに保持する必要はない。したがって、本発明の主題であ
る方法はTpに比例するがNb、したがって、サブプログラムまたはアップレッ
トのコードの長さとは独立である、ある量のランダムアクセスメモリにより満た
される。
【0155】 サブプログラムのコード全体にわたって1つの同じタイプで所与のレジスタを
使用せねばならない、請求されている基準C4で求められている要求は、一貫し
たやり方で、たとえば、プログラムの1つの点でshort整数を書込み、プロ
グラムの他の点でオブジェクト参照としてそれを再び読出すことにより、上記コ
ードがレジスタを使用しないことを保証する。
【0156】 先行技術で記述されている検証方法、特に前記した、Tim LINDHOL
MおよびFrank YELLINにより編集された「Java仮想マシン仕様
(Java Virtual Machine Specification)
」と題する検証方法では、Java仕様では、分岐命令を通じる上記仕様の一貫
性を保証するために、各分岐ターゲットにおけるレジスタタイプのテーブルのコ
ピーをランダムアクセスメモリに保持する必要がある。この操作はTrxNbに比
例するある量のランダムアクセスメモリを必要とする。ここにTrはサブプログ
ラムにより使用されるレジスタの数を示し、Nbはこのサブプログラムのコード
中の分岐ターゲットの数を示す。
【0157】 これに反して、本発明の主題である検証方法はコードの種々の点におけるコピ
ーをランダムアクセスメモリに保持することなくレジスタタイプのグローバルテ
ーブルで動作する。したがって、この検証方法を実現するために求められるラン
ダムアクセスメモリはTrに比例するがNbとは独立であり、したがって、関連す
るサブプログラムのコードの長さとは独立である。
【0158】 所与のレジスタが全ての点において、すなわち、関連するコードのあらゆる命
令において、同じタイプで使用される、請求される制約がサブプログラムの検証
を顕著かつ大幅に簡単にする。これに反して、先行技術の検証方法では、一方で
は、検証方法を実行可能にするプログラムコードのサイズを減少すること、他方
では、検証動作中のランダムアクセスメモリの消費を減少することを可能にする
。複雑さの程度は、本発明の主題である検証方法では、先行技術の検証方法の(
O(Tp+Tr)xNb)ではなくて、O(Tp+Tr)の形であり、しかし検証さ
れるコードの実行のセキュリティについて同じ保証を提供する。
【0159】 最後に、元の従来コードを標準化されたコードへ変換するプロセスは、追加情
報を検証コンポーネント、すなわち、マイクロプロセッサカードまたはオンボー
ド処理システム、へ送ることなく、コードのローカル化された変換により実現さ
れる。
【0160】 図4bと図5bに示されているレジスタを再割当てする方法については、この
方法は、 − レジスタ再割当てにより同じレジスタを異なる主タイプを持つ2つの間隔に 割当てることをできなくする。したがって、これは所与のレジスタがコード 全体にわたって同じタイプが使用されることが保証される; − 上記文献に記載されている、既存のレジスタ割当てアルゴリズムが固定数の レジスタをとり、レジスタとスタックの間の、「スピル」と呼ばれる、転送 を最少にし、本発明の主題で請求されているレジスタの再割当ては、レジス タの総数が可変である枠組み内で動作し、その結果、レジスタの総数を最小 にするプロセスが実行される時にレジスタとスタックの間の転送を実行する 目的がない。 という事実により、特に米国特許第4,571,678号および第5,249,
295号に記載されているように、先行技術の既知の方法とは異なる。
【0161】 本発明の主題である、オンボードシステムにダウンロードされたプログラム断
片を管理するプロトコルと、このダウンロードされたプログラム断片を検証する
方法、およびダウンロードされたプログラム断片のオブジェクト・コードを変換
する方法はもちろんソフトウエアで実現できる。
【0162】 したがって、本発明は再プログラム可能なオンボードシステムの内部メモリに
直接ロードできるコンピュータプログラム・プロダクトにも関する。このオンボ
ードシステムは、オンボードシステムのマイクロプロセッサにより、オブジェク
ト・コード、一連の命令、より成るプログラム断片をダウンロードすることを可
能にする。そのオブジェクト・コードは、実行スタックと、そのオブジェクト・
コードを解釈できるようにそれらの命令を介して操作されるローカルレジスタす
なわち変数とが装備されている仮想マシンによって、オンボードシステムのマイ
クロプロセッサにより実行できる。対応するコンピュータプログラム・プロダク
トが、このオンボードシステムが端末装置に相互接続され、このプログラムがこ
のオンボードシステムのマイクロプロセッサにより仮想マシンを介して実行され
る時に、上で説明した図2と図6に示されているように、このオンボードシステ
ムにダウンロードされたプログラム断片を管理するプロトコルを実行するオブジ
ェクト・コードの部分を含む。
【0163】 本発明は、図6参照して示されているように、再プログラム可能なメモリを有
するマイクロプロセッサカードなどの、再プログラム可能なオンボードシステム
の内部メモリに直接ロードできるコンピュータプログラム・プロダクトにも関す
る。このコンピュータプログラム・プロダクトは、図3aないし図3jを参照し
て、説明の上で示しかつ述べたように、このオンボードシステムにダウンロード
されたプログラム断片を検証する段階を実行するオブジェクト・コードの部分を
含む。この検証は、このオンボードシステムが端末装置に相互接続され、このプ
ログラムがこのオンボードシステムのマイクロプロセッサにより仮想マシンを介
して実行されるときに、行われる。
【0164】 本発明はコンピュータプログラム・プロダクトにも関する;このコンピュータ
プログラム・プロダクトは、図4a図4b、図5a、図5bおよび図6に示され
、説明において上で述べたように、プログラム断片のオブジェクト・コードをこ
の同じプログラム断片に対する標準化されたオブジェクト・コードに変換する方
法の諸段階を実行するオブジェクト・コードの部分を含む。
【0165】 本発明は、再プログラム可能なオンボードシステム、たとえば、書き替え可能
なメモリを装備されているマイクロプロセッサ、に使用できる媒体に記録される
コンピュータプログラム・プロダクトにも関する。このオンボードシステムはこ
のマイクロプロセッサにより、それらの命令を介して操作される実行スタックお
よびローカル変数またはレジスタが装備されている仮想マシンを介して実行でき
て、このオブジェクト・コードの解釈を行えるようにするオブジェクト・コード
より成るプログラム断片をダウンロードすることを可能にする。上記コンピュー
タプログラム・プロダクトは、図2に示されており、かつ説明の中で上で述べた
ように、仮想マシンを介してオンボードシステムのマイクロプロセッサにより読
出すことができて、ダウンロードされたプログラム断片のダウンロードを管理す
る手順の実行を指令するプログラムのモジュールと、図3aないし3jに示され
ており、かつ上で説明したように、仮想マシンを介してオンボードシステムのマ
イクロプロセッサにより読出すことができて、このプロトコルを構成しているオ
ブジェクト・コードを、命令ごとに、検証する手順の実行を指令するプログラム
のモジュールと、図2に示されているように、仮想マシンを介してオンボードシ
ステムのマイクロプロセッサにより読出すことができて、このプログラム断片の
オブジェクト・コードのこの同じプログラム断片の標準化されたオブジェクト・
コードへの変換に続いて、またはその変換なしに、ダウンロードされたプログラ
ム断片の実行を指令するプログラムのモジュールとを少なくとも含む。
【0166】 上記コンピュータプログラム・プロダクトは、図2に示し、かつ図2を参照し
て上で述べたように、仮想マシンを介してオンボードシステムのマイクロプロセ
ッサにより読出すことができて、上記プログラム断片の検証手順に失敗した場合
に、プログラム断片の、オンボードシステムにおける、実行の禁止を指令するプ
ログラムのモジュールを含みもする。
【0167】 付録
【0168】
【表1】
【0169】
【表2】
【0170】
【表3】
【0171】
【表4】
【0172】
【表5】
【0173】
【表6】
【0174】
【表7】
【0175】
【表8】
【0176】
【表9】
【0177】
【表10】
【0178】
【表11】
【0179】
【表12】
【図面の簡単な説明】
【図1a】 従来のプログラム可能でないオンボード・データ処理システムを表す図である
【図1b】 従来のアップレットのダウンロードにより再プログラム可能なオンボード・デ
ータ処理システムを表す図である。
【図2】 再プログラム可能なオンボードシステムにダウンロードされたプログラム断片
を管理する方法を示す流れ図を表す。
【図3a】 例により、本発明の主題に従って、ダウンロードされたプログラム断片を検証
する方法の流れ図を表す。
【図3b】 本発明の主題である、ダウンロードされたプログラム断片を、管理する方法お
よび検証する方法により実現されるデータタイプとサブタイピングの関係を示す
図を表す。
【図3c】 分岐命令の管理に関連する、図3aに示されている検証方法の詳細を表す。
【図3d】 サブルーチン呼出し命令の管理に関連する、図3aに示されている検証方法の
詳細を表す。
【図3e】 例外ハンドラ・ターゲットの管理に関連する、図3aに示されている検証方法
の詳細を表す。
【図3f】 適合しない分岐のターゲットの管理に関連する、図3aに示されている検証方
法の詳細を表す。
【図3g】 分岐ターゲットの不存在の管理に関連する、図3aに示されている検証方法の
詳細を表す。
【図3h】 タイプスタックに対する現在の命令の効果の管理に関連する、図3aに示され
ている検証方法の詳細を表す。
【図3i】 レジスタを読出す命令の管理に関連する、図3aに示されている検証方法の詳
細を表す。
【図3j】 レジスタに書込むための命令の管理に関連する、図3aに示されている検証方
法の詳細を表す。
【図4a】 プログラム断片のオブジェクト・コードを、分岐命令と、分岐ターゲット命令
と、空きスタックとを有するこの同じプログラム断片のための標準化されたオブ
ジェクト・コードへ変換する方法を示す流れ図を表す。
【図4b】 タイプ付けされたレジスタ、単一の特定のデータタイプが各レジスタに起因し
ている、を使用させる、プログラム断片のオブジェクト・コードを、この同じプ
ログラム断片のための標準化されたオブジェクト・コードへ変換する方法を示す
流れ図を表す。
【図5a】 図4aに示されている変換方法の実現の詳細を表す。
【図5b】 図4bに示されている変換方法の実現の詳細を表す。
【図6】 標準化されたオブジェクト・コードの開発のための装置と、本発明の主題に従
ってプログラム断片の検証を管理するプロトコルの実現と、プログラム断片を検
証する方法の実現を行えるようにする再プログラム可能なマイクロプロセッサカ
ードとの完全なアーキテクチャの機能図である。

Claims (27)

    【特許請求の範囲】
  1. 【請求項1】 書き替え可能なメモリを装備されているマイクロプロセッサ
    ・カードなどの、再プログラム可能なオンボードシステムにダウンロードされた
    プログラム断片を管理するプロトコルであって、 前記プログラム断片は、オンボードシステムのマイクロプロセッサにより仮想
    マシンを介して実行できるオブジェクト・コード、一連の命令、で構成され、仮
    想マシンには実行スタックおよびローカル変数、またはそれらの命令を介して操
    作されてこのオブジェクト・コードを解釈することを可能にするレジスタが備え
    られており、前記オンボードシステムは端末装置に相互接続されており、 前記オンボードシステムにダウンロードされたプログラム断片を管理するプロ
    トコルにおいて、 このプロトコルは、少なくとも前記オンボードシステムのレベルにおいて、 a) このプログラム断片のダウンローディングのためのコマンドを検出する こと;およびこの段階に対する応答が肯定であれば、ダウンローディン グのためのコマンドを検出することと、 b) このプログラム断片を構成しているオブジェクト・コードを読出すこと 、 およびこのオブジェクト・コードを一時的に保存することと、 c) メモリに一時的に保存されているオブジェクト・コードの全体を命令ご とに検証プロセスにかけることと、 前記オブジェクト・コードの検証が成功した場合に、 d) ダウンロードされたプログラム断片を利用可能なプログラム断片のディ レクトリに記録することと、 前記オブジェクト・コードの検証が成功しなかった場合に、 e) 前記オンボードシステムにおける前記プログラム断片の実行を禁止する ことと、 を含み、 前記検証プロセスは、一時的に保存されているオブジェクト・コードの 実行開始時に前記仮想マシンの状態を表すタイプスタックおよびレジス タタイプのテーブルを初期化する段階と、現在の各命令に対して、ター ゲット、分岐命令ターゲット、例外ハンドラ呼出しのターゲット、また はサブルーチン呼出しのターゲットの存在を判別することにより、命令 ごとに連続して検証する段階と、タイプスタックおよびレジスタタイプ のテーブルについての前記現在の命令の効果の検証および更新とを、少 なくとも含む、 ことを特徴とする、前記オンボードシステムにダウンロードされたプログラム 断片を管理するプロトコル。
  2. 【請求項2】 実行を禁止する前記段階e)が、 f) 一時的に記録されているプログラム断片を利用可能なプログラム断片の 前記ディレクトリに記録することをぬかす時に、一時的に記録されてい るプログラム断片を削除することと、 g) 誤りコードを読取り機へ送ることとを、 含むことを特徴とする請求項1に記載のプロトコル。
  3. 【請求項3】 ダウンローディングのためのコマンドを検出する前記段階a
    )に対する応答が否定であれば、 b′) コマンドを検出して、プログラム断片のディレクトリから利用可能なプ ログラム断片を選択すること;およびこの段階に対する応答が肯定であ れば、コマンドを検出して、利用可能なプログラム断片を選択することと 、 c′) 前記選択された利用可能なプログラム断片を呼出すことと、 d′) 変数のタイプのダイナミックな検証がなく、呼出された利用可能なプロ
    グ ラム断片により操作されるオブジェクトに対するアクセス権がなく、また は各命令が実行される時に実行スタックのあふれがない仮想マシンを介し て前記選択された利用可能なプログラム断片を実行すること、およびこの 段階に対する応答が否定であれば、コマンドを検出して利用可能なプログ ラム断片を選択することと、 e′) オンボードシステムの標準コマンドを処理することを続けることとを、
    含むことを特徴とする請求項1または2に記載のプロトコル。
  4. 【請求項4】 書き替え可能なメモリを装備されているマイクロプロセッサ
    ・カードなどの、再プログラム可能なオンボードシステムにダウンロードされた
    プログラム断片をオンボードシステムのマイクロプロセッサにより仮想マシンで
    検証する方法であって、 前記プログラム断片はオブジェクト・コードで構成されて、少なくとも1つの
    サブプログラム、一連の命令、を含み、前記仮想マシンには実行スタックと、そ
    れらの命令により操作されてこのオブジェクト・コードを解釈することを可能に
    するオペランド・レジスタとが備えられており、前記オンボードシステムは読取
    り器に相互接続されており、 前記オンボードシステムにダウンロードされたプログラム断片をオンボードシ
    ステムのマイクロプロセッサにより仮想マシンで検証する方法において、 前記検証する方法は、ダウンローディングのためのコマンドの検出と、このプ
    ログラム断片を構成している前記オブジェクト・コードの前記書き替え可能なメ
    モリへの保存とに続いて、各サブプログラムに対して、 α) タイプスタックと、仮想マシンの状態を表すデータによるレジスタタイ プのテーブルとを、一時的に保存されているオブジェクト・コードの実 行の開始時に、初期化する段階を実行することと、 β) ターゲットと、分岐命令ターゲットと、例外ハンドラ呼出しのターゲッ トまたはサブルーチン呼出しのターゲットの存在を、各現在の命令ごと に、識別することにより、前記一時的に保存されているオブジェクト・ コードの検証を命令ごとに行うことと、 γ) 分岐命令ターゲットと、サブルーチン呼出しのターゲットまたは例外ハ ンドラ呼出しのターゲットの存在を基にした、前記タイプスタックのデ ータタイプおよびレジスタタイプの前記テーブルのデータタイプについ ての前記現在の命令の効果の検証および更新を行うこととを有し、 前記検証は、レジスタタイプのテーブルが全ての命令の検証中に修正さ れない時に成功し、検証プロセスは、レジスタタイプのテーブルが安定 するまで命令ごとに実行され、修正がなければ、検証プロセスは別の方 法で中断される、 ことを特徴とする、前記オンボードシステムにダウンロードされたプログラム 断片をオンボードシステムのマイクロプロセッサにより仮想マシンで検証する 方法。
  5. 【請求項5】 検証プロセス中に操作される変数タイプが、少なくとも、 − プログラム断片中で定められているオブジェクト・クラスに対応する クラス識別子と、 − タイプshortと、pビットに符合化された整数と、飛び越し命令J SRの戻りアドレスについてのタイプretaddrとを少なくとも含 んでいる数値変数タイプと、 − 零オブジェクトの参照に関連するタイプnullと、 − オブジェクトに関連するタイプobjectと、 − 全てのタイプの交差を表して、値0、nilに対応する第1の特定のタ イプと、 − 全てのタイプの連合を表し、値の任意のタイプに対応する第2の特定の タイプと、 を含むことを特徴とする請求項4に記載の検証する方法。
  6. 【請求項6】 全ての前記変数タイプがサブタイピング関係: objectεT; short、retarddrεT; εnullshortretaddr を検証することを特徴とする請求項5に記載の検証する方法。
  7. 【請求項7】 前記現在の命令が分岐命令ターゲットであると、前記検証す る方法はタイプスタックが空きであることを検証することを含み、肯定的な検 証の場合に検証プロセスが以後の命令のために続行され、さもなければ検証プ ロセスは失敗しプログラム断片は除去されることを特徴とする請求項4から6 のいずれか1項に記載の検証する方法。
  8. 【請求項8】 前記現在の命令がサブルーチン呼出しのターゲットであると 、前記検証プロセスは、以前の命令が無条件分岐、サブルーチン戻りまたは例外
    の増大であることを検証し、前記検証プロセスは、肯定的な検証の場合には、 etaddr タイプの実体、サブルーチンの戻りアドレス、により変数タイプの
    スタックの再更新へ進み、さもなければ検証プロセスは失敗してプログラム断片
    は拒否されることを特徴とする請求項4から7のいずれか1項に記載の検証する
    方法。
  9. 【請求項9】 現在の命令が例外ハンドラ呼出しのターゲットであると、前
    記検証プロセスは、以前の命令が無条件分岐、サブルーチン戻りまたは例外の増
    大であることを検証し、前記検証プロセスは、肯定的な検証の場合には、例外タ
    イプに入ることによりタイプスタックの再更新へ進み、さもなければ検証プロセ
    スは失敗してプログラム断片は拒否されることを特徴とする請求項4から8のい
    ずれか1項に記載の検証する方法。
  10. 【請求項10】 現在の命令が多数の適合できない分岐命令ターゲットであ
    ると、検証プロセスは失敗し、プログラム断片は拒否されることを特徴とする請
    求項4から9のいずれか1項に記載の検証する方法。
  11. 【請求項11】 現在の命令がどのような分岐命令ターゲットでもないと、
    検証プロセスはタイプスタックの更新へ進むことにより続行することを特徴とす
    る請求項4から10のいずれか1項に記載の検証する方法。
  12. 【請求項12】 タイプスタックについての現在の命令の効果の検証段階が
    、少なくとも、 − タイプ実行スタックが現在の命令が含んでいるオペランドの数と少なく とも同数のエントリを含んでいることを検証する段階と、 − スタックを解く段階と、スタックのトップにおけるエントリのタイプ がこの命令のオペランドのオペランド・タイプのサブタイプであること を検証する段階と、 − タイプスタックについての十分なメモリ空間の存在を検証して、現在の 命令の結果を積み重ねるために進む段階と、 − それらの結果に割当てられているスタックデータ・タイプを積み重ねる 段階と、 を含むことを特徴とする請求項4から11のいずれか1項に記載の検証する方法
  13. 【請求項13】 現在の命令がアドレスnのレジスタを読み出す命令である
    と、検証プロセスは、 − エントリnをレジスタタイプのテーブルに読み込むことにより、この読 出しの結果のデータタイプを検証することと、 − この現在の命令のオペランドに対応するスタックのエントリのスタック を解くことにより、およびこの結果のデータタイプをスタックすること により、タイプスタックについての現在の命令の効果を判定することと
    、 を含むことを特徴とする請求項12に記載の検証する方法。
  14. 【請求項14】 現在の命令がアドレスmのレジスタへ書込む命令であると
    、検証プロセスは、 − タイプスタックと、アドレスmのこのレジスタに書込まれているオペラ ンドのタイプtとについての現在の命令の効果を判定することと、 − アドレスmにおけるレジスタタイプのテーブルのタイプエントリを、以 前に保存されたタイプのすぐ上のタイプと、アドレスmのこのレジスタ に書込まれているオペランドのタイプtの上のタイプとで置き換えるこ とと、 を含むことを特徴とする請求項12に記載の検証する方法。
  15. 【請求項15】 各命令のオペランドがこの命令により操作されるデータタ
    イプに属し、実行スタックがいかなるあふれ現象も示さず、各分岐命令に対して
    、この分岐におけるスタック変数のタイプがこの分岐命令ターゲットにおけるの
    と同じである、プログラム断片のオブジェクト・コードを、この同じプログラム
    断片に対する標準化されたオブジェクト・コードに変換する方法であって、 この同じプログラム断片に対する標準化されたオブジェクト・コードは、各命
    令のオペランドがこの命令により操作されるデータタイプに属し、実行スタック
    がいかなるあふれ現象も示さず、実行スタックは各分岐命令と各分岐命令ターゲ
    ットとにおいて空きであり、 前記プログラム断片のオブジェクト・コードを、この同じプログラム断片に対
    する標準化されたオブジェクト・コードに変換する方法において、 前記変換する方法は、前記オブジェクト・コードの全ての命令に対して、 − 注釈データはこの命令に関連するデータ流の分析により計算され、各現 在の命令を、この命令の実行の前および後のスタックのデータタイプで 注釈することと、 − それに対しては前記実行スタックが空きでなく、検出操作は、各現在の 命令に割当てられたスタック変数のタイプの注釈データを基にして、空 きでない実行スタックの検出の存在する中で行われ、前記命令内および 各現在の命令内で、分岐の存在、または分岐命令ターゲットのそれぞれ の存在を検出することと、 − それぞれ、この分岐の前に実行スタックの内容を一時的なレジスタ内に 入れて空きにするため、およびこの分岐の後で前記一時的なレジスタか ら実行スタックを再設定するために、命令を挿入してスタック変数をそ れらの分岐またはそれらの分岐命令ターゲットのいずれかの側に転送す ること、およびさもなければいかなる転送命令も挿入しないで、この同 じプログラム断片に対する標準化されたオブジェクト・コードを得るこ とを可能にすることとを含み、 前記標準化されたオブジェクト・コードにおいては、実行スタックは 各分岐命令と各分岐命令ターゲットとにおいて、前記プログラム断片の 実行に対するいかなる修正も存在しない中で、空きである、 ことを特徴とする、プログラム断片のオブジェクト・コードを、この同じプロ グラム断片に対する標準化されたオブジェクト・コードに変換する方法。
  16. 【請求項16】 各命令のオペランドがこの命令により操作されるデータ タイプに属し、このオブジェクト・コードの命令によりレジスタに書込まれた 所与のタイプのオペランドが、同じ所与のデータタイプを有するこのオブジェ クト・コードの別の命令により同じレジスタから再び読み出される、プログラ ム断片のオブジェクト・コードを、この同じプログラム断片に対する標準化さ れたオブジェクト・コードに変換する方法であって、 この同じプログラム断片に対する標準化されたオブジェクト・コードは、各 命令のオペランドがこの命令により操作されるデータタイプに属し、同じデータ
    タイプが前記標準化されたオブジェクト・コード全体にわたって同じレジスタに
    割当てられており、 前記プログラム断片のオブジェクト・コードを、この同じプログラム断片に対
    する標準化されたオブジェクト・コードに変換する方法において、 前記変換する方法は、前記オブジェクト・コードの全ての命令に対して、 − 注釈データはこの命令に関連するデータ流の分析により計算され、各現 在の命令を、この命令の実行の前および後のレジスタのデータタイプで 注釈することと、 − 種々のタイプで採用されている元のレジスタを検出することにより、そ れらの元のレジスタを別々の標準化されたレジスタ−使用される各デー タタイプごとに1つの標準化されたレジスタ−に分割することにより、 および前記標準化されたレジスタを使用するオペランドを操作する命令 を再更新することによりレジスタの再割り当てを実行することとを、 含むことを特徴とする、プログラム断片のオブジェクト・コードを、この同じ プログラム断片に対する標準化されたオブジェクト・コードに変換する方法。
  17. 【請求項17】 前記命令内でおよび各現在の命令内で、それに対して実 行スタックが空きでないような、分岐の存在、またはそれぞれ分岐命令ターゲ ットの存在を検出することを含む段階が、ランクiの各対応する命令の検出に 続いて、 − 1つの新しいレジスタがこの命令においてアクティブである各スタック 変数に関連させられ、ランクiの各命令に新しいレジスタのセットを関 連させることと、 − ランクiの検出された各命令を調べ、かつ分岐命令ターゲットまたは分 岐のそれぞれの存在を判別することとを含み、 そして、ランクiの命令が分岐命令ターゲットである場合、かつ、こ の命令においては実行スタックは空きではない場合に、 ・ 分岐、例外の増大、またはプログラム戻りより成る、ランクi−1 の、あらゆる先行命令に対して、ランクiの検出された命令が分岐 によってのみアクセスでき、 ・・ ランクiの前記検出された命令の前に、ロード命令loadのセッ トを挿入して新しいレジスタのセットからロードし、ランクiの検 出された命令への全ての分岐を最初に挿入されたロード命令loa へ再び向け、そして、 ・ ランクi−1の、あらゆる先行命令に対して、順次に続いて、 分岐により、ランクi−1の先行命令から、ランクiの検出された 命令が同時にアクセスでき、 ・・ ランクiの検出された命令の前にバックアップ命令storeのセ ットを挿入して新しいレジスタのセットにバックアップし、かつロ ード命令loadのセットを挿入してこの新しいレジスタのセット からロードし、ランクiの前記検出された命令が所与の命令への分 岐である場合には、ランクiの検出された命令への全ての分岐を最 初に挿入されたロード命令loadへ再び向け、 ・ 無条件分岐より成るランクiのあらゆる検出された命令に対して
    、 ・・ ランクiの検出された命令の前に、多数のバックアップ命令st ore、新しい各レジスタに関連させられているバックアップ命 令、を挿入し、そして、 ・ 条件付き分岐より成るランクiのあらゆる検出された命令に対して 、およびこの条件付き分岐命令により操作されるオペランドの数m >0に対して、 ・・ ランクiのこの検出された命令の前に、順列命令、swap−x、 をランクiの検出された命令のm個のオペランドおよびn個の以後 の値の実行スタックのトップに挿入し、この順列操作は実行スタッ クのトップに、新しいレジスタのセットにおいてバックアップすべ きn個の値を集めることを可能にし、そして、 ・・ ランクiの命令の前に、バックアップ命令storeのセットを挿 入して新しいレジスタのセットをバックアップし、そして、 ・・ ランクiの検出された命令の後に、ロード命令loadのセットを 挿入して新しいレジスタのセットからロードすること、 を特徴とする請求項15に記載の変換する方法。
  18. 【請求項18】 種々のタイプで採用されている元のレジスタを検出するこ
    とによりレジスタを再割当てすることを含む段階が、 − 各レジスタの寿命時間間隔を決定することと、 − レジスタrのための寿命時間間隔jの主データタイプは、寿命時間間隔jに
    属するバックアップ命令storeによってこのレジスタrに保存されているデ
    ータタイプの上限によって定められており、各寿命時間間隔の主データタイプを
    決定することと、 − 干渉グラフは、向きを定められていないグラフで構成され、そのグラフの各
    極大は寿命時間間隔で構成され、極大が他の極大のレジスタにアドレスされたバ
    ックアップ命令を含んでいるならば、そのグラフの2つの極大j1とj2の間に
    弧が存在し、またはそのグラフの2つの極大j1とj2の間に弧が存在するなら
    ば、極大が他の極大のレジスタにアドレスされたバックアップ命令を含んでおり
    、寿命時間間隔の間に干渉グラフを設定することと、 − 極大対の2つの極大は同じ関連付けられた主データタイプを持たないが、干
    渉グラフの全ての極大対の間の弧を加えることにより、干渉グラフ中の各レジス
    タに割当てられているデータタイプの独自性を翻訳することと、 − 種々のレジスタ番号が干渉グラフ中の2つの隣接する寿命時間間隔に割当て
    られるようにして、各寿命時間間隔にレジスタ番号を割当てることにより、干渉
    グラフの例示を行うこととを、 含むことを特徴とする請求項16に記載の変換する方法。
  19. 【請求項19】 少なくとも1つのマイクロプロセッサと、1つのランダム
    アクセスメモリと、1つの入力/出力モジュールと、1つの電気的に再プログラ
    ム可能な不揮発性メモリと、1つの固定メモリとを含み、その固定メモリに主プ
    ログラムと、主プログラムを実行可能にする仮想マシンと、前記マイクロプロセ
    ッサを用いる少なくとも1つのプログラム断片とがインストールされている、プ
    ログラム断片をダウンロードすることにより再プログラムできるオンボードシス
    テムにおいて、 前記オンボードシステムはダウンロードされたプログラム断片を管理および検
    証するための少なくとも1つのプログラムモジュールを含み、前記管理および検
    証するためのプログラムモジュールは固定メモリにインストールされていること
    を特徴とするオンボードシステム。
  20. 【請求項20】 少なくとも1つのマイクロプロセッサと、1つのランダム
    アクセスメモリと、1つの入力/出力モジュールと、1つの電気的に再プログラ
    ム可能な不揮発性メモリと、1つの固定メモリとを含み、その固定メモリに主プ
    ログラムと、主プログラムを実行可能にする仮想マシンと、前記マイクロプロセ
    ッサを用いる少なくとも1つのプログラム断片とがインストールされている、プ
    ログラム断片をダウンロードすることにより再プログラムできるオンボードシス
    テムにおいて、 前記オンボードシステムは、請求項1から3のいずれか1項に記載のダウンロ
    ードされたプログラム断片を管理するプロトコルに従って、ダウンロードされた
    プログラム断片を管理および検証するための少なくとも1つのプログラムモジュ
    ールを含み、前記管理および検証するためのプログラムモジュールは固定メモリ
    にインストールされていることを特徴とするオンボードシステム。
  21. 【請求項21】 請求項4から14のいずれか1項に記載の検証プロセスに
    従って、ダウンロードされたプログラム断片を検証する少なくとも1つのサブプ
    ログラムモジュールを含むことを特徴とする請求項20に記載のオンボードシス
    テム。
  22. 【請求項22】 各命令のオペランドがこの命令により操作されるデータタ
    イプに属し、実行スタックはいかなるあふれ現象も示さず、各分岐命令に対して
    、この分岐におけるスタック変数のタイプがこの分岐命令ターゲットにおけるの
    と同じであり、このオブジェクト・コードの命令によりレジスタに書込まれた所
    与のタイプのオペランドが、同じ所与のデータタイプを持つこのオブジェクト・
    コードの他の命令によりこの同じレジスタから、この同じプログラム断片のため
    の標準化されたオブジェクト・コードに再び読込まれ、その同じプログラム断片
    において、各命令のオペランドはこの命令により操作されるデータタイプに属し
    、実行スタックはあふれ現象を示さず、実行スタックは各分岐命令および各分岐
    命令ターゲットにおいて空きであり、同じデータタイプが前記標準化されたオブ
    ジェクト・コード全体にわたって同じレジスタに割り当てられる、プログラム断
    片のオブジェクト・コードを変換する方法において、 変換システムは、開発コンピュータまたは開発ワークステーションのワーキン
    グメモリにインストールされている、このオブジェクト・コードを、請求項15
    から18のいずれか1項に記載の方法に従って、標準化されたオブジェクト・コ
    ードに変換するプログラムモジュールを少なくとも含み、前記プログラム断片の
    ための標準化されたオブジェクト・コードを発生することを可能にして、このダ
    ウンロードされたプログラム断片を検証する基準を満たすことを特徴とするプロ
    グラム断片のオブジェクト・コードを変換する方法。
  23. 【請求項23】 再書込み可能なメモリを装備されているマイクロプロセッ
    サカードなどの、再プログラム可能なオンボードシステムの内部メモリに直接ロ
    ードされ得るコンピュータプログラム・プロダクトであって、 このオンボードシステムは、実行スタックと、それらの命令により操作される
    ローカル変数またはレジスタとを装備されて、このオブジェクト・コードを解釈
    することを可能にする仮想マシンを介してオンボードシステムのマイクロプロセ
    ッサにより実行できるオブジェクト・コード、一連の命令、より成るプログラム
    断片をダウンロードすることを可能にし、 このオンボードシステムが端末装置に相互に接続されて、このプログラムがこ
    のオンボードシステムのマイクロプロセッサにより前記仮想マシンを介して実行
    される時に、このオンボードシステムにダウンロードされたプログラム断片を管
    理する請求項1から3のいずれか1項に記載のプロトコルを実行するオブジェク
    ト・コードの部分を含む、コンピュータプログラム・プロダクト。
  24. 【請求項24】 再書込み可能なメモリを装備されているマイクロプロセッ
    サカードなどの、再プログラム可能なオンボードシステムの内部メモリに直接ロ
    ードされ得るコンピュータプログラム・プロダクトであって、 このオンボードシステムは、実行スタックと、それらの命令により操作される
    オペランドレジスタとを装備されて、このオブジェクト・コードを解釈すること
    を可能にする仮想マシンを介してオンボードシステムのマイクロプロセッサによ
    り実行できるオブジェクト・コード、一連の命令、より成るプログラム断片をダ
    ウンロードすることを可能にし、 このオンボードシステムが端末装置に相互に接続されて、このプログラムがこ
    のオンボードシステムのマイクロプロセッサにより前記仮想マシンを介して実行
    される時に、このオンボードシステムにダウンロードされたプログラム断片を請
    求項4から14のいずれか1項に記載の検証する方法の段階を実行するオブジェ
    クト・コードの部分を含む、コンピュータプログラム・プロダクト。
  25. 【請求項25】 ダウンロードされたプログラム断片のオブジェクト・コー
    ドを、この同じプログラム断片に対する標準化されたオブジェクト・コードに請
    求項15から18のいずれか1項に記載の変換する方法の段階を実行するオブジ
    ェクト・コードの部分を含むコンピュータプログラム・プロダクト。
  26. 【請求項26】 再書込み可能なメモリを装備されているマイクロプロセッ
    サカードなどの、再プログラム可能なオンボードシステムに使用できる媒体に記
    録されているコンピュータプログラム・プロダクトであって、 このオンボードシステムは、実行スタックと、それらの命令を介して操作され
    るローカル変数またはレジスタとを装備されて、このオブジェクト・コードを解
    釈することを可能にする仮想マシンを介してオンボードシステムのマイクロプロ
    セッサにより実行できるオブジェクト・コード、一連の命令、より成るプログラ
    ム断片をダウンロードすることを可能にし、 − このオンボードシステムのマイクロプロセッサにより前記仮想マシンを介し て読出すことができて、ダウンロードされたプログラム断片のダウンローデ ィングを管理する手順の実行を指令することができるプログラム資源と、 − このオンボードシステムのマイクロプロセッサにより前記仮想マシンを介し て読出すことができて、前記プログラム断片を構成しているオブジェクト・ コードを、命令ごとに、検証する手順の実行を指令することができるプログ ラム資源と、 − このオンボードシステムのマイクロプロセッサにより前記仮想マシンを介し て読出すことができて、このプログラム断片のオブジェクト・コードの、こ の同じプログラム断片のための標準化されたオブジェクト・コードへの変換 に続いて、または変換なしで、ダウンロードされたプログラム断片の実行を 指令することができるプログラム資源とを、 少なくとも含むコンピュータプログラム・プロダクト。
  27. 【請求項27】 このオンボードのマイクロプロセッサにより前記仮想マ シンを介して読出すことができて、このプログラム断片の検証手順に成功しな かった場合に、前記プログラム断片の、前記オンボードシステムにおける、実 行の禁止を指令できるプログラム資源を更に含む請求項26に記載のコンピュ ータプログラム・プロダクト。
JP2001519256A 1999-08-23 2000-08-21 ダウンロードされたプログラム断片を管理するためのプロトコル、ダウンロードされたプログラム断片を検証および変換する方法、および対応するシステム Pending JP2003507811A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
FR9910697A FR2797963B1 (fr) 1999-08-23 1999-08-23 Protocole de gestion, procede de verification et de transformation d'un fragment de programme telecharge et systemes correspondants
FR99/10697 1999-08-23
PCT/FR2000/002349 WO2001014958A2 (fr) 1999-08-23 2000-08-21 Protocole de gestion, procede de verification et de transformation d'un fragment de programme telecharge et systemes correspondants

Publications (2)

Publication Number Publication Date
JP2003507811A true JP2003507811A (ja) 2003-02-25
JP2003507811A5 JP2003507811A5 (ja) 2007-10-04

Family

ID=9549281

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001519256A Pending JP2003507811A (ja) 1999-08-23 2000-08-21 ダウンロードされたプログラム断片を管理するためのプロトコル、ダウンロードされたプログラム断片を検証および変換する方法、および対応するシステム

Country Status (11)

Country Link
US (1) US7720939B1 (ja)
EP (1) EP1212678B1 (ja)
JP (1) JP2003507811A (ja)
CN (1) CN1220939C (ja)
AT (1) ATE252742T1 (ja)
AU (1) AU769363B2 (ja)
CA (1) CA2382003C (ja)
DE (1) DE60006141T2 (ja)
ES (1) ES2209969T3 (ja)
FR (1) FR2797963B1 (ja)
WO (1) WO2001014958A2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007516538A (ja) * 2003-12-23 2007-06-21 株式会社エヌ・ティ・ティ・ドコモ コンピュータプログラムのリソース使用に関するチェックの遂行
KR101412576B1 (ko) * 2012-06-27 2014-06-27 한국과학기술원 가상 보드 플랫폼, 시스템-온-칩 시뮬레이션 장치, 시스템-온-칩 시뮬레이션 방법 및 시스템-온-칩 검증 방법

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6092147A (en) 1997-04-15 2000-07-18 Sun Microsystems, Inc. Virtual machine with securely distributed bytecode verification
US7158993B1 (en) 1999-11-12 2007-01-02 Sun Microsystems, Inc. API representation enabling submerged hierarchy
US7010786B2 (en) 1999-11-12 2006-03-07 Sun Microsystems, Inc. Predictive arithmetic overflow detection
US7107581B2 (en) 1999-11-12 2006-09-12 Sun Microsystems, Inc. Overflow predictive arithmetic instruction optimization using chaining
US7207037B2 (en) 1999-11-12 2007-04-17 Sun Microsystems, Inc. Overflow sensitive arithmetic instruction optimization using chaining
US6363523B1 (en) 1999-11-12 2002-03-26 Sun Microsystems, Inc. Optimization of N-base typed arithmetic expressions
US8453133B2 (en) 1999-11-12 2013-05-28 Oracle America, Inc. Optimization of N-base typed arithmetic instructions via rework
US6986132B1 (en) 2000-04-28 2006-01-10 Sun Microsytems, Inc. Remote incremental program binary compatibility verification using API definitions
US6883163B1 (en) 2000-04-28 2005-04-19 Sun Microsystems, Inc. Populating resource-constrained devices with content verified using API definitions
US6651186B1 (en) 2000-04-28 2003-11-18 Sun Microsystems, Inc. Remote incremental program verification using API definitions
US6981245B1 (en) 2000-09-14 2005-12-27 Sun Microsystems, Inc. Populating binary compatible resource-constrained devices with content verified using API definitions
US20100174717A1 (en) * 2002-02-28 2010-07-08 Olivier Fambon Interative serialisation procedure for structured software objects
FR2840084A1 (fr) * 2002-05-27 2003-11-28 Gemplus Card Int Procede de verification de codes pour microcircuits a ressources limitees
US20040003380A1 (en) * 2002-06-26 2004-01-01 Microsoft Corporation Single pass intermediate language verification algorithm
US20040163087A1 (en) * 2003-02-14 2004-08-19 Carl Sandland Computer program code and method for delivering external data to a process running on a virtual machine
AU2004237808B2 (en) * 2003-02-14 2010-08-12 Actividentity (Australia) Pty Ltd System and method for delivering external data to a process running on a virtual machine
FR2853741B1 (fr) 2003-04-14 2005-09-09 Gemplus Card Int Procede de gestion d'un code executable telecharge dans un systeme embarque reprogrammable
US7908653B2 (en) * 2004-06-29 2011-03-15 Intel Corporation Method of improving computer security through sandboxing
FR2884994A1 (fr) * 2005-04-22 2006-10-27 Gemplus Sa Procede de verification de pseudo-code charge dans un systeme embarque, notamment une carte a puce
DE102005026384A1 (de) * 2005-06-08 2006-12-14 Giesecke & Devrient Gmbh Validierung eines zur nativen Ausführung durch einen Prozessor eines Datenträgers vorgesehenen Programms
CN101321353B (zh) * 2008-07-14 2011-08-24 中兴通讯股份有限公司 一种支持Java应用下载空间检测的方法
CN102479155B (zh) * 2010-11-30 2014-07-02 国际商业机器公司 用于网络应用服务器系统的内存过载管理的方法和系统
CN102063371A (zh) * 2010-12-29 2011-05-18 大唐微电子技术有限公司 验证芯片处理器逻辑设计的方法和系统
CN102591696A (zh) * 2011-01-14 2012-07-18 中国科学院软件研究所 一种手机软件行为数据提取方法及系统
US8874688B1 (en) 2012-01-11 2014-10-28 Amazon Technologies, Inc. Securing execution of customer-supplied network page generation code
US8819477B1 (en) 2012-02-01 2014-08-26 Amazon Technologies, Inc. Error handling in a network page generation environment
US9800455B1 (en) 2012-02-08 2017-10-24 Amazon Technologies, Inc. Log monitoring system
US10089089B2 (en) * 2015-06-03 2018-10-02 The Mathworks, Inc. Data type reassignment
US10409600B1 (en) 2016-01-25 2019-09-10 Apple Inc. Return-oriented programming (ROP)/jump oriented programming (JOP) attack protection
US9977725B2 (en) * 2016-08-26 2018-05-22 Cisco Technology, Inc. Automatic classification and parallel processing of untested code in a protected runtime environment
EP3435270B1 (de) * 2017-07-27 2020-09-23 Siemens Aktiengesellschaft Vorrichtung und verfahren zum kryptographisch geschützten betrieb einer virtuellen maschine
CN109968359A (zh) * 2019-03-28 2019-07-05 台州九牛慧联机器人技术有限公司 一种工业机器人控制系统
CN112905196A (zh) * 2019-11-19 2021-06-04 广州汽车集团股份有限公司 软件更新的方法、装置及存储介质
CN111679945A (zh) * 2020-06-12 2020-09-18 地平线(上海)人工智能技术有限公司 处理器的检测方法、装置及计算机可读存储介质
CN113127285B (zh) * 2021-06-17 2021-10-08 北京燧原智能科技有限公司 一种错误数据调试方法、装置、芯片及计算机设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08234994A (ja) * 1994-12-20 1996-09-13 Sun Microsyst Inc コンピュータシステム及びその動作方法
WO1998019237A1 (en) * 1996-10-25 1998-05-07 Schlumberger Systemes Using a high level programming language with a microcontroller

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4571678A (en) 1982-11-05 1986-02-18 International Business Machines Corporation Register allocation and spilling via graph coloring
US5249295A (en) * 1990-06-20 1993-09-28 Rice University Digital computer register allocation and code spilling using interference graph coloring
US5276881A (en) * 1990-06-25 1994-01-04 Hewlett-Packard Company ANDF producer using the HPcode-Plus compiler intermediate language
US5694539A (en) * 1994-08-10 1997-12-02 Intrinsa Corporation Computer process resource modelling method and apparatus
US5668999A (en) * 1994-12-20 1997-09-16 Sun Microsystems, Inc. System and method for pre-verification of stack usage in bytecode program loops
US6151618A (en) * 1995-12-04 2000-11-21 Microsoft Corporation Safe general purpose virtual machine computing system
US6275976B1 (en) * 1996-03-15 2001-08-14 Joseph M. Scandura Automated method for building and maintaining software including methods for verifying that systems are internally consistent and correct relative to their specifications
US6128774A (en) * 1997-10-28 2000-10-03 Necula; George C. Safe to execute verification of software
AU1809599A (en) * 1997-12-11 1999-06-28 Digits Corp. Object code analysis and remediation system and method
US6223337B1 (en) * 1997-12-12 2001-04-24 Hewlett-Packard Company Random test generation for compiler optimization
US6195774B1 (en) * 1998-08-13 2001-02-27 Xilinx, Inc. Boundary-scan method using object-oriented programming language

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08234994A (ja) * 1994-12-20 1996-09-13 Sun Microsyst Inc コンピュータシステム及びその動作方法
WO1998019237A1 (en) * 1996-10-25 1998-05-07 Schlumberger Systemes Using a high level programming language with a microcontroller

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007516538A (ja) * 2003-12-23 2007-06-21 株式会社エヌ・ティ・ティ・ドコモ コンピュータプログラムのリソース使用に関するチェックの遂行
KR101412576B1 (ko) * 2012-06-27 2014-06-27 한국과학기술원 가상 보드 플랫폼, 시스템-온-칩 시뮬레이션 장치, 시스템-온-칩 시뮬레이션 방법 및 시스템-온-칩 검증 방법

Also Published As

Publication number Publication date
DE60006141T2 (de) 2004-08-26
WO2001014958A3 (fr) 2001-12-13
AU769363B2 (en) 2004-01-22
EP1212678A2 (fr) 2002-06-12
FR2797963A1 (fr) 2001-03-02
CN1220939C (zh) 2005-09-28
DE60006141D1 (de) 2003-11-27
CA2382003C (fr) 2008-12-23
EP1212678B1 (fr) 2003-10-22
FR2797963B1 (fr) 2002-11-29
ES2209969T3 (es) 2004-07-01
WO2001014958A2 (fr) 2001-03-01
US7720939B1 (en) 2010-05-18
CN1370294A (zh) 2002-09-18
AU7015000A (en) 2001-03-19
ATE252742T1 (de) 2003-11-15
CA2382003A1 (fr) 2001-03-01

Similar Documents

Publication Publication Date Title
JP2003507811A (ja) ダウンロードされたプログラム断片を管理するためのプロトコル、ダウンロードされたプログラム断片を検証および変換する方法、および対応するシステム
US6964039B2 (en) Method to create optimized machine code through combined verification and translation of JAVA™ bytecode
US7120572B1 (en) Memory efficient program pre-execution verifier and method
US6026237A (en) System and method for dynamic modification of class files
US7644402B1 (en) Method for sharing runtime representation of software components across component loaders
US6477702B1 (en) Bytecode program interpreter apparatus and method with pre-verification of data type restrictions and object initialization
US6880155B2 (en) Token-based linking
US6973646B1 (en) Method for compiling program components in a mixed static and dynamic environment
US5999732A (en) Techniques for reducing the cost of dynamic class initialization checks in compiled code
CN109614165B (zh) 一种com组件的多版本并行运行方法和装置
Small et al. MiSFIT: Constructing safe extensible systems
US20020093856A1 (en) File language verification
US6810519B1 (en) Achieving tight binding for dynamically loaded software modules via intermodule copying
Arvind et al. A multiple processor data flow machine that supports generalized procedures
Zhao et al. Haepg: An automatic multi-hop exploitation generation framework
Avvenuti et al. Java bytecode verification for secure information flow
Lancia et al. Java card virtual machine compromising from a bytecode verified applet
Jones et al. Annotating Java class files with virtual registers for performance
US6804681B2 (en) Identifying and tracking object references in a java programming environment
US6978451B2 (en) Method for fast compilation of preverified JAVA bytecode to high quality native machine code
US7065747B2 (en) Identifying references to objects during bytecode verification
US8458790B2 (en) Defending smart cards against attacks by redundant processing
US6934726B2 (en) Storing and retrieving of field descriptors in Java computing environments
Bernardeschi et al. Using standard verifier to check secure information flow in java bytecode
Ouyang et al. An advanced automatic construction method of ROP

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20050324

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070730

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070730

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20070730

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101102

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110202

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110209

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110302

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110309

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110404

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110426

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110726

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110802

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20111122