JP3868527B2 - バイトコードプログラムの保全性をベリファイするための方法及び装置 - Google Patents
バイトコードプログラムの保全性をベリファイするための方法及び装置 Download PDFInfo
- Publication number
- JP3868527B2 JP3868527B2 JP34916595A JP34916595A JP3868527B2 JP 3868527 B2 JP3868527 B2 JP 3868527B2 JP 34916595 A JP34916595 A JP 34916595A JP 34916595 A JP34916595 A JP 34916595A JP 3868527 B2 JP3868527 B2 JP 3868527B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- stack
- data type
- bytecode
- operand
- 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.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/51—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44589—Program code verification, e.g. Java bytecode verification, proof-carrying code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Virology (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Quality & Reliability (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Description
【発明が属する技術分野】
本発明は、一般に、個別の基本マシン命令セットを用いる複数のコンピュータプラットフォーム上のコンピュータソフトウェアの利用法に関する。より詳細には、データタイプ及びオペランドスタックの使用に関するチェックをより効率的に行う効果的な方法及びプログラムインタープリタに関する。
【0002】
【従来の技術】
図1に一般的に示されているように、典型的な従来のネットワーク化されたコンピュータシステム100に於いて、第1コンピュータ102は、第2コンピュータ104にあるコンピュータプログラム103をダウンロードすることができる。この例では、第1ユーザノード102は、典型的には、中央演算装置(CPU)106、ユーザインタフェース108、プログラム実行用の主メモリ110(例えばRAM)、オペレーティングシステム113、文献及び他のデータを格納するための補助記憶装置112(例えばハードディスク)、及びコンピュータネットワーク120(例えばインターネット、ローカルエリアネットワークまたはワイドエリアネットワーク)に接続するためのモデムなどのコミニュケーションインタフェース114を有するユーザワークステーションである。コンピュータ102及び104は、“ネットワーク上のノード”または“ネットワークノード”と呼ばれることもある。
【0003】
第2コンピュータ104はネットワークサーバであるのが一般的だが、第2ユーザワークステーションであっても良く、通常、第1コンピュータと基本的に同じコンピュータ要素を含んでいる。
【0004】
従来、第1コンピュータ102が第2コンピュータ104からコンピュータプログラム103のコピーをダウンロードした後に、第1コンピュータ102のユーザが、ダウンロードされたプログラム103の保全性をベリファイするのを支援するための標準的なツールは実質的にない。特に、第1コンピュータのユーザが、ダウンロードされたプログラムのソースコードを調べない限り、従来技術のツールを用いて、ダウンロードされたプログラム103がスタックに対しアンダーフローやオーバフローとならないか、或いはダウンロードされたプログラム103がユーザコンピュータのファイルや他のリソースに悪影響を与えないかどうかを判断することは実質的に不可能である。
【0005】
あるコンピュータから別のコンピュータへのコンピュータソフトウェアのダウンロードに関する別の問題は、個別の基本マシン命令セットを用いているコンピュータプラットフォーム間のコンピュータソフトウェアの転送の問題である。従来も、プラットフォームに依存しないコンピュータプログラムやプラットフォームに依存しないコンピュータプログラミング言語の例はいくつかある。しかしながら、従来技術は、データタイプの使用に関する制約やオペランドスタックの使用に関する制約を破らないようにしつつ、そのようなプラットフォームに依存しないコンピュータプログラムを効率よく実行するためのツールに欠けている。
【0006】
【発明が解決しようとする課題】
上述したように、本発明の主な目的は、データタイプの使用に関する制約やオペランドスタックの使用に関する制約を破らないようにしつつ、コンピュータプログラムを効率よく実行するためのツールを備えたコンピュータシステム及びその動作方法を提供することである。
【0007】
【課題を解決するための手段】
本発明は、限定された、データタイプに依存したバイトコードセットを用いたバイトコード言語(“OAK言語(OAK language)”として商品化されている)で書かれたコンピュータプログラムのためのプログラムインタープリタに関する。この言語で使用可能なソースコードのバイトコードは、(A)処理可能なデータタイプについて制約があるスタックデータ消費型バイトコードである、(B)スタックデータは使用しないが、データタイプが既知であるデータをスタックに加えたり、データタイプに関係なくスタックからデータを取り出したりすることによってスタックに影響を与える、或いは(C)スタックデータの使用も、スタックへのデータの付加もしないのいずれかである。
【0008】
本発明のインタープリタは、バイトコードプログラムを実行する前に、バイトコードプログラムベリファイヤを実行し、指定されたプログラムの保全性を確かめる。バイトコードプログラムベリファイヤは、指定されたプログラム内のバイトコード命令のうち、不適合なデータタイプのデータを処理しようとしたり、オペランドスタックのオーバフローまたはアンダーフローを生じさせるようなバイトコード命令を識別することによって、プログラムの保全性をベリファイする。プログラムベリファイヤが、予め定められたスタックやデータタイプの使用に関する制約を破る命令を見つけた場合、そのプログラムがインタープリタによって実行されないようにされる。
【0009】
本発明に関するバイトコードプログラムベリファイヤは、指定されたバイトコードプログラムを実行するとき、プログラムオペランドスタック内に格納されるデータを示すスタック情報を一時的に格納するための仮想スタック(virtual stack)を含んでいる。このベリファイヤは、プログラムの各ポイントに於いてオペランドスタックに格納されるであろうデータの数、順番、及びデータタイプを示すように仮想オペランドスタックを更新しながらプログラムの各バイトコード命令を順次処理していくことによって、指定されたプログラムを処理する。このベリファイヤは、仮想スタックの情報と、各バイトコード命令のデータタイプに関する制約とを比べて、プログラムを実行したときオペランドスタックにバイトコード命令のデータタイプに関する制約に適合しないデータが含まれるようなことがないかどうか判定するとともに、指定されたプログラム内のバイトコード命令によってオペランドスタックのアンダーフローやオーバフローが生じるようなことはないかどうかチェックする。
【0010】
バイトコードプログラムの命令の流れを細かく分析しなくていいように、またバイトコード命令を何度もベリファイしなくていいように、指定されたプログラム内に於いて別個の2以上のバイトコードの実行の直後に実行され得る全てのポイント(多重エントリポイントと呼ぶ)がリストアップされる。一般に、そのような先行する2以上の別個のバイトコードの少なくとも一つは、ジャンプ/分岐バイトコードである。指定されたプログラムの処理時、ベリファイヤは、各多重エントリポイントの直前(即ち、先行するバイトコード命令の一つの後)の仮想オペランドスタックの“スナップショット”をとり、このスナップショットを、同じ多重エントリポイントに対する他の先行するバイトコード命令の各々を処理した後の仮想スタックステータスと比較して、仮想スタックステータスが同一でない場合はプログラムフォールト(program fault)を生成する。
【0011】
ベリファイヤによるプログラムの前処理が終わり、プログラムの欠陥が見つけられなかった場合、インタープリタは、オペランドスタックのオーバフローやアンダーフローのチェック、オペランドスタック内に格納されるデータのデータタイプのチェックを行うことなく、プログラムを実行する。その結果、プログラム実効速度が大幅に向上される。
【0012】
【発明の実施の形態】
本発明の好適実施例について詳細に説明する。これらの例は添付の図面に図示されている。本発明を好適実施例に基づいて説明するが、理解されるように、それらは本発明をそれらの実施例に限定することを意図するものではない。本発明は、特許請求の範囲によって画定される本発明の精神及び範囲に含まれるべき変形変更及び等価物を含むものである。
【0013】
図2に示す分散型コンピュータシステム200を参照されたい。第1コンピュータノード202は、例えばインターネットのようなコンピュータコミュニケーションネットワーク220を介して第2コンピュータノード204とつながっている。第1コンピュータノード202は、中央演算装置(CPU)206、ユーザインタフェース208、主メモリ(RAM)210、補助記憶装置(ディスク記憶装置)212、及び第1コンピュータノード202をコンピュータコミュニケーションネットワーク220につなげるためのモデムその他のコミュニケーションインタフェース214を含んでいる。ディスク記憶装置212は、データファイルその他の情報と共に、CPU206によって実行されるプログラムを格納する。それらのプログラムの少なくとも一つは、実行可能形式のバイトコードプログラム221である。説明のため、第1コンピュータノード202が、第2コンピュータノード204からコンピュータコミュニケーションネットワーク220を介して、当業者には周知の転送プロトコルを用いて、バイトコードプログラム221を受け取ることとする。
【0014】
好適実施例では、バイトコードプログラムはOAKアプリケーションとして書かれており、コンパイルまたはインタープリットされて、一連の実行可能な命令になる。OAK命令セットの全ソースコードバイトコード命令(source code bytecode instructions)のリストを表1に示す。OAK命令セットは、データタイプに依存する(即ちデータタイプが特定されている)バイトコード命令によって特徴付けられる。詳述すると、OAK命令セットでは、異なるデータタイプに対する同じ基本操作に別個の操作コード(opcode)を付すことによって、それらを区別している。その結果、同じ基本機能(例えば2つの数字の加算)を実行するために、それぞれ対応する特定のデータタイプのデータだけを処理する複数のバイトコードが命令セット内に含まれている。更に、OAK命令セットに含まれていない命令についても注意されたい。例えば、OAK言語命令セットには“計算されたgoto(computed goto)”命令はなく、オブジェクトリファレンスを変更したり、新たなオブジェクトリファレンスを生成する命令もない(既存のオブジェクトリファレンスのコピー命令は除く)。OAK命令セットに関するこれらの2つの制約は、他の制約とともに、OAK命令セットに含まれるデータタイプが特定された命令と同じようにデータを用いるバイトコードプログラムであれば、ユーザのコンピュータシステムの保全性を損なうことはないということを保証するのに役立っている。
【0015】
好適実施例では、使用可能なデータタイプは、整数、倍長整数(long integer)、ショートインテジャ(16ビット信号の整数)、単精度浮動小数点数、倍精度浮動小数点数、バイト、キャラクタ、及びオブジェクトポインタ(本明細書中では、オブジェクトリファレンスと呼ぶこともある)がある。各“オブジェクトリファレンス”データタイプはデータタイプの一部としてオブジェクトクラス仕様(object class specification)を含むことができるため、“オブジェクトリファレンス”データタイプに含まれるデータのサブタイプの数には実質的に制限がない。更に、プログラム内で用いられる定数もデータタイプを有しており、好適実施例で使用される定数のデータタイプには、上述したデータタイプに加えて、class、fieldref、methodref、string、及びAscizが含まれる。それらは全て特定の目的を持った2バイト以上の定数データを表す。
【0016】
データタイプに依存しないバイトコードの中には、スタック操作機能を有するものがいくつかある。スタック操作機能には(A)スタック上の1または複数のワードを複製して、それらをスタック内の特定の位置に配置し、それによってデータタイプが既知のより多くのスタックアイテム(stack item)を生成する機能、(B)1または複数のアイテムをスタックから消去する機能などが含まれる。他の少数のデータタイプに依存しないバイトコードには、スタック上のワードを全く用いずスタックを変化させなかったり、あるいは、スタック上にあるワードを使用することはないがスタックにワードを加えたりするものがある。これらのバイトコードは、それらが実効される前のスタックの内容についてデータタイプに関する制約はなく、多少の例外を除いて、全てスタックの内容を変化させ、プログラムベリフィケーションプロセスに影響を与える。
【0017】
第2コンピュータノード204(ここでは、ファイルや他の情報のサーバとして構成されているものとする)は、CPU218、ユーザインタフェース228、主メモリ(RAM)222、補助記憶装置(ディスク記憶装置)224、及びコンピュータコミュニケーションネットワーク220と第2コンピュータノードとを接続するためのモデムその他のコミュニケーションインタフェース234を含んでいる。ディスク記憶装置224は、CPU218によって実行されたり、及び/または他のコンピュータノードに配布されたりするプログラムを格納する。
【0018】
第1コンピュータノード202及び第2コンピュータノード204は、それぞれが異なるコンピュータプラットフォーム及びオペレーティングシステム236、237を用い、これらの2つのコンピュータノードの一方で実行されるオブジェクトコードプログラムが、他方のコンピュータでは実行できないことがあってもよい。例えば、サーバノード204をUnixオペレーティングシステムを用いたサン・マイクロシステムズ社のコンピュータとし、ユーザワークステーションノード202を80486マイクロプロセッサとマイクロソフト社のDOSオペレーティングシステムを用いたIBM互換機とすることもできる。更に、同じネットワークに接続され、同じサーバ204を利用する他のユーザワークステーションに於いて、様々なコンピュータプラットフォーム及びオペレーティングシステムを用いてもよい。
【0019】
これまで、様々なタイプのコンピュータを有するネットワークでソフトウェアを配布するためのサーバ204は、各コンピュータプラットフォーム(例えば、Unix、ウィンドウズ、DOS、マッキントッシュなど)に対して個別のソフトウェアライブラリを有していた。その結果、同じコンピュータプログラムの様々なバージョンが、各ライブラリに格納されることがあった。しかしながら、本発明を用いると、一種類のバイトコードバージョンのプログラムを用いることにより、サーバによって多くのプログラムを配布することができる。
【0020】
図2に示されているように、第1コンピュータノード202の補助記憶装置212は、指定されたバイトコードプログラムの保全性をベリファイするためのバイトコードベリファイヤプログラム240と、指定されたバイトコードプログラムを実行するためのバイトコードインタープリタ242を格納している。別の方法として、または追加して、第1コンピュータノード202は、ベリファイされたバイトコードプログラムをオブジェクトコードプログラムに変換して、インタープリタ244よりバイトコードプログラム221をより効率よく実行するためのバイトコードコンパイラ244を格納していてもよい。
【0021】
バイトコードベリファイヤ240は、バイトコードインタープリタ242の制御の下でCPU206によって指定されたバイトコード(ソース)プログラム221が実行される前に、バイトコードプログラム221のオペランドデータタイプコンパチビリティや、スタック操作の適正さをベリファイする実行可能プログラムである。各バイトコードプログラム103は、対応するベリフィケーションステータス245を有しており、この値はプログラムが他の場所からダウンロードされたとき、最初“偽(False)”にセットされる。プログラムに対するベリフィケーションステータス245は、プログラムがベリファイされ、ベリファイヤ240によって行われるデータタイプテスト及びスタックの使用に関するテストの全てに適合したときのみバイトコードベリファイヤ240によって“真(True)”にセットされる。
【0022】
インタープリタによる通常のプログラムの実行に於いては、インタープリタは、オーバフロー(即ち、スタックが格納できるより多くのデータがスタックに加えられる)やアンダーフロー(即ち、スタックが空の時にスタックからデータをポップ(pop)しようとする)が生じていないかどうか、オペランドスタックを連続的にモニタする必要がある。そのようなスタックモニタリングは、通常、スタックのステータスを変化させる全ての命令(即ち、ほとんど全ての命令)に対して実行しなければならない。多くのプログラムで、インタープリタによって実行されるスタックモニタリング命令は、インタープリットされるコンピュータプログラムの実行時間の約80%に達する。
【0023】
更に、ダウンロードされたバイトコードプログラムがエラーを含んでいることもある。そのようなエラーには、オペランドのデータタイプと、それらのオペランドを用いる命令のデータタイプに関する制約とのミスマッチも含まれ、それによってプログラムが実行中にフェイル(fail)が発生することがある。より悪い場合には、バイトコードプログラムが(例えば、計算された数値をオペランドスタックにローディングし、その数値をオブジェクトハンドルとして用いることによって)オブジェクトリファレンスの生成を試み、ユーザコンピュータの保全性及び/またはセキュリティを損なうことがある。
【0024】
本発明のバイトコードベリファイヤ240を用いると、バイトコードプログラムの保全性をベリファイすることが可能となり、インタープリタ242がプログラム実行中に通常のスタックモニタリング命令を実行しなくてもよくなり、プログラムのインタープリット速度を大幅に高めることができる。
【0025】
バイトコードプログラムベリファイヤ
図3を参照されたい。バイトコードプログラムベリファイヤ240の処理について、特定のバイトコードプログラム340に関連して説明する。ベリファイヤ240は、ベリフィケーションプロセスに於いて必要とする情報を格納するため、いくつかの一時的なデータ構造(temporary data structure)を使用する。特に、ベリファイヤ240は、スタックカウンタ342、仮想スタック344、仮想ローカル変数アレイ345、及びスタックスナップショット格納構造346を使用する。
【0026】
スタックカウンタ342は、仮想スタック操作を追跡し、その時々の仮想スタック320のエントリ数が反映されるように、ベリファイヤ240によって更新される。
【0027】
仮想スタック344は、実際の実行時にバイトコードプログラム340によってオペランドスタック内に格納される各データに関するデータタイプ情報を格納する。好適実施例では、仮想スタック344は正規のスタックと同様に用いられるが、実際のデータ及び定数を記憶するのではなく、プログラムを実際に実行したときオペランドスタック内に格納される各データに対応するデータタイプを示す値を格納する点が異なる。従って、例えば、もし実際に実行したとき、スタックに3つの値:
HandleToObjectA
5
1
が格納されるとすると、対応する仮想スタックエントリは、
R
I
I
となる。ここで、仮想スタック内の“R”は、オブジェクトリファレンスを示し、仮想スタック内の各“I”は、整数を示す。更に、この例では、スタックカウンタ342は、仮想スタック344に格納されている3つの値に対応して、値3を格納する。
【0028】
各データタイプのデータには、対応する仮想スタックマーカ値(例えば、整数(I)、倍長整数(L)、単精度浮動小数点数(F)、倍精度浮動小数点数(D)、バイト(B)、ショート(S)、オブジェクトリファレンス(R))が割り当てられる。オブジェクトリファレンスに対するマーカ値には、しばしばオブジェクトクラス値が含まれる(例えば、R:point、ここで“point”はオブジェクトクラスである)。
【0029】
仮想ローカル変数アレイ345は、仮想スタック344と同じ基本機能を果たす。即ち、仮想ローカル変数アレイ345は、指定されたバイトコードプログラムが使用するローカル変数に対するデータタイプ情報を格納するのに用いられる。データは、しばしばプログラムによってローカル変数とオペランドスタックとの間で転送されるため、そのようなデータ転送を実行するか、あるいはそのようなデータ転送はしないがローカル変数を使用するようなバイトコード命令についてチェックすることにより、各バイトコード命令によってアクセスされるローカル変数が、これらのバイトコード命令に関するデータタイプの制約に適合するということを保証することができる。
【0030】
指定されたバイトコードプログラムの処理に於いて、処理のためにバイトコード命令によってポップされる各データに対し、ベリファイヤは仮想スタック342から同じ数のデータタイプ値をポップし、それらのデータタイプ値をバイトコードのデータタイプ要求と比較する。また、バイトコード命令によってスタックにプッシュ(push)される各データに対して、ベリファイヤは、対応するデータタイプ値を仮想スタックにプッシュする。
【0031】
本発明によるプログラムベリフィケーションの一側面によると、オペランドスタックステータス(operand stack status)に於けるオペランドの数とデータタイプが、ある特定の命令が実行されるとき常に同一となるかという点についてベリフィケーションがなされる。ある特定のバイトコード命令が2以上の異なる命令の直後に処理され得る場合、これらの異なる先行命令の各々を処理した直後の仮想スタックステータスを比較する必要がある。通常、これらの異なる先行命令の内の少なくとも一つは、条件付きまたは無条件ジャンプまたは分岐命令である。上述したような“スタックの一致(stack consistency)”を要求する結果として、各プログラムループ(program loop)によって、オペランドスタック内に格納されるオペランド数の正味の増加や減少が起こるようなことはなくなる。
【0032】
スタックスナップショット格納構造346は、スタックカウンタ342及び仮想スタック344の“スナップショット”を格納するのに用いられ、プログラムの様々な点に於ける仮想スタックステータスを効果的に比較することを可能としている。格納されるスタックスナップショットの各々は、例えば: SC、DT1、DT2、DT3、...、DTnのような形であり、ここでSCはスタックカウンタの値、DT1は仮想オペランドスタック内の最初のデータタイプ値、DT2は仮想オペランドスタック内の2番目のデータタイプ値であり、DTnまで同様である。DTnは仮想オペランドスタック内の、全アイテム中最後のアイテムに対するデータタイプ値である。
【0033】
スタックスナップショット格納構造346は、ディレクトリ部348とスナップショット部350の2つに分かれる。ディレクトリ部348はターゲット命令識別子(例えば、各ターゲット命令の絶対または相対アドレス)を格納するのに用いられ、スナップショット部350は、これらのターゲット命令識別子(target instruction identifier)に関連する仮想スタック344のスナップショットを格納するのに用いられる。“ターゲット”命令は、ジャンプまたは分岐命令の行き先となり得るバイトコード命令として定義される。例えば、条件付き分岐命令は、条件(満たされることも満たされないこともある)と、条件が成立したとき、処理が“ジャンプ”すべきプログラム内の場所(ターゲット)を示す分岐先支持部とを含む。条件付きジャンプ命令を評価する際、ベリファイヤ300は、スタックスナップショット格納構造346を用いて、ジャンプする直前の、ターゲット命令識別子をディレクトリ部348内に格納するとともに、仮想スタック344のステータスをスナップショット部350内に格納する。スタックスナップショット格納構造346の動作については、バイトコードベリファイヤプログラムの動作と共に、後により詳細に説明する。
【0034】
上述したように、バイトコードプログラム350は、データタイプに依存する複数の命令を含んでおり、それらの命令の各々は、本発明のベリファイヤ300によって評価される。バイトコードプログラム350は、スタック操作に関する命令352(スタックへの整数のプッシュ)及び354(スタックからの整数のポップ)、前方ジャンプ356とその関連するターゲット364、後方ジャンプ366とその関連するターゲット362、及びDOループ358とその終わり(end)360(DOループのタイプによって、条件付きまたは無条件分岐命令であってもよい)を含んでいる。本発明の好適実施例のベリファイヤ240は、スタック操作及びデータタイプコンパチビリティをベリファイするだけなので、このバイトコードベリファイヤの動作は、これらの代表的な命令セットを用いることによって説明することができる。
【0035】
図4乃至図10、及び付録1を参照して、バイトコードベリファイヤプログラム240の動作について以下に詳細に説明する。付録1は、ベリファイヤプログラムを疑似コードで表したものである。付録1の疑似コードは、本質的には、従来の汎用コンピュータ言語を用いたコンピュータ言語と同等である。この疑似コードは、本発明の説明のためにのみ作られたものであって、本分野の通常の知識を有するコンピュータプログラマであれば容易に理解されるように意図して書かれている。
【0036】
図4に示されているように、ダウンロードされたバイトコードプログラムは、処理のためバイトコードベリファイヤ300にロードされる(400)。ベリファイヤ300は、オペランド及びローカル変数のデータタイプ情報を格納するため、メモリ内にアレイ状に位置を指定することによって、仮想スタック344及び仮想ローカル変数アレイ345を生成する(402)。同様に、ベリファイヤは、スナップショット情報を格納するため、メモリ内にアレイ上に位置を指定することによってスタックスナップショット格納構造を生成する(404)。最後に、ベリファイヤは、仮想スタックのエントリ数を追跡するためのスタックカウンタ342として働くレジスタを指定する(406)。
【0037】
第1パスは、条件付き及び無条件ジャンプ及びループ命令に関連するターゲット情報を抽出するべく、バイトコードプログラム内に形成されたものである。第1パスに於いて、ベリファイヤ300は全ての命令を順次処理していき(ステップ408、410、412)、命令が条件付きまたは無条件ジャンプ命令の場合(ステップ414)、かつそのジャンプに対するターゲット位置がまだディレクトリ348内に記憶されていない場合(ステップ418)、ターゲット位置を示す情報をスタックスナップショット格納構造346のディレクトリ部348に格納する(ステップ416)。例えば、ターゲット命令の絶対または相対アドレスを、ディレクトリ部348の次に使用可能なスロットに格納しても良い。他のタイプのバイトコード命令は、この第1パスでは無視される。
【0038】
プログラム内の全ての命令に対し処理が終了した後、ディレクトリ部348をソートして、リストアップされたターゲット位置をアドレス順に並び替えることが好ましい。
【0039】
再度図3を参照されたい。図3では、説明のため、スタックスナップショット格納構造346は、既にベリフィケーションの第1パスがバイトコードプログラム350内に示されているバイトコード命令に基づいて終了したように、ディレクトリ部348内に情報が格納され、ロードされている。即ち、ディレクトリ部には、バイトコードプログラム内にある条件付き及び無条件ジャンプ命令の全てのターゲットのアドレスがロードされている。
【0040】
図5では、バイトコードプログラムによるオペランドスタック及びデータタイプの使用が適切かどうかをベリファイするため、バイトコードプログラムの第2のパスが開始される。バイトコードプログラムの最初の命令が選択されると(430)、ベリファイヤは、選択された命令に対するアドレスが、上述した第1パスに於いて既にスタックスナップショット格納構造346のディレクトリ部348内に格納されているかどうかチェックする(432)。
【0041】
選択された命令のアドレスがディレクトリ348内にある場合(即ち、選択された命令が条件付きまたは無条件ジャンプのターゲットであることを意味している)、ベリファイヤは関連するスタックスナップショットがスタックスナップショット格納構造346のスナップショット部350内に格納されているかどうかをチェックする(434)。スタックスナップショットが格納されていない場合(即ち、命令が後方ジャンプのターゲットであることを意味する)、スタックカウンタ及び仮想スタックの内容が、スタックスナップショット格納構造346内に格納される(436)。スナップショットは、処理中の命令を実行する直前の仮想スタックのステータスに関する情報を含み、それにはスタックにプッシュされている各データに対するデータタイプ値も含まれる。
【0042】
スタックスナップショットが、選択されている命令に対し格納されている場合(このターゲット命令に関連するジャンプ命令が既に処理されているということを意味する)、ベリファイヤは、スタックスナップショット格納構造346のスナップショット部350内に格納されている、この命令に対する仮想スタックスナップショット情報と、仮想スタックのそのときの状態とを比較する(438)。比較の結果、仮想スタックの状態とスナップショットとがマッチしないことが示された場合(スタックステータスミスマッチ)、スタックステータスミスマッチが発生したバイトコードプログラム内の場所を示すエラーメッセージまたは信号が生成される(440)。好適実施例では、仮想スタックとスナップショットが同数または同タイプのエントリを含んでいない場合にミスマッチが発生する。ベリファイヤは、その後、そのプログラムが“偽(False)”であることを示すようにベリフィケーションステータス245をセットし、ベリフィケーションプロセスをアボートする(442)。プログラムが“偽”であることを示すようにベリフィケーションステータス245をセットすることにより、バイトコードインタープリタ242によるプログラムの実行が阻止される(図3)。
【0043】
選択されている命令に対し既に格納されているスタックスナップショットと、その時の仮想スタックの状態とがマッチする場合(438)、ベリファイヤはベリフィケーションプロセスを続け、後に述べるようにステップ450から個々の命令に対して分析を開始する。
【0044】
選択されている命令のアドレスがスタックスナップショット格納構造346のディレクトリ部348内に見つからない場合、またはスタックステータスミスマッチが検出されない場合、ベリファイヤは、その命令特有のスタック使用法及び機能に応じて、命令に対する一連のチェックのうち、いくつかを選択して実行する。
【0045】
図6を参照されたい。最初に行われるチェックは、オペランドスタックからデータをポップさせる命令に関する。選択されている命令によってデータがスタックからポップされる場合(450)、スタックカウンタが調べられ、命令のデータポップ要求を満足する十分なデータがスタック内にあるかどうかが判定される(452)。
【0046】
オペランドスタックがその命令に対し十分なデータを持っていない場合(452)、これはスタックアンダーフローと呼ばれ、スタックアンダーフローが検出されたプログラム内の場所を示すエラー信号またはメッセージが生成される(454)。更にベリファイヤはプログラムが“偽”であることを示すようにベリフィケーションステータス245をセットし、ベリフィケーションプロセスをアボートする(456)。
【0047】
スタックアンダーフロー状態が検出されない場合、ベリファイヤは、予め仮想スタック内に格納されているデータタイプコード情報と、(もしあれば)選択されている命令のデータタイプ要求とを比較する。例えば、分析されるている命令の操作コード(opcode)がスタックからポップされた値の整数型の加算(integer add)を要求する場合、ベリファイヤは、ポップされている仮想スタックのアイテムのオペランド情報を比較して、それが適切なデータタイプであること、即ち整数であることを確認する。比較がマッチする結果となった場合、ベリファイヤは、ポップされているエントリに関連する情報を仮想スタックから削除し、仮想スタック344からポップされたエントリ数が反映されるようにスタックカウンタ342を更新する。
【0048】
仮想スタック344のポップされているエントリのオペランド情報と、選択されている命令のデータタイプ要求との間でミスマッチが検出された場合(458)は、ミスマッチがバイトコードプログラム内のどこで発生したかを示すメッセージが生成される(462)。更に、ベリファイヤは、プログラムが“偽”であることを示すようにベリフィケーションステータス245をセットし、ベリフィケーションプロセスをアボートする(456)。これで、ポップベリフィケーションプロセスが終了する。
【0049】
次に、図7を参照されたい。選択されている命令がデータをスタックにプッシュしようとする場合(470)、スタックカウンタが調べられ、その命令がプッシュしようとするデータを格納するための十分な余地がスタックにあるかどうかが判定される(472)。オペランドスタックに、その命令がプッシュしようとするデータを格納するための十分な余地がない場合(472)、これはスタックオーバフローと呼ばれ、スタックオーバフローが検出されたプログラム内の場所を示すエラー信号またはメッセージが生成される(474)。更に、ベリファイヤは、プログラムが“偽”であることを示すようにベリフィケーションステータス245をセットし、ベリフィケーションプロセスをアボートする(476)。
【0050】
スタックオーバフロー状態が検出されない場合、ベリファイヤは、選択されている命令によってスタックにプッシュされる各データに対し、(実際にプログラムが実行される際に)オペランドスタックにプッシュされるデータ(オペランド)のタイプを示すエントリを仮想スタックに加える(478)。この情報は、本発明の好適実施例のバイトコードプログラムで用いられている、データタイプが特定された操作コードから導かれる。また、ベリファイヤは、スタックカウンタ342を更新して、仮想スタックに追加された1または複数のエントリが反映されるようにする。これでスタックプッシュベリフィケーションプロセスが終了する。
【0051】
図8を参照されたい。選択されている命令により、通常の逐次的ステップを飛び越すような、条件付きまたは無条件の前方ジャンプまたは分岐が発生する場合(480)、ベリファイヤは、まずそのジャンプ命令のターゲット位置に対するスナップショットがスタックスナップショット格納構造346内に格納されているかどうかをチェックする。スタックスナップショットが格納されていない場合、(そのジャンプに関連する仮想スタックの更新がなされた後の)仮想スタック状態が、スタックスナップショット格納構造346内の、そのターゲットプログラム位置に関連する位置に格納される(484)。このジャンプに関連するスタックポップ操作は、既に実行されているステップ460に於いて仮想スタック内に反映されていることに注意されたい(図6参照)。
【0052】
スタックスナップショットが格納されている場合(このターゲットに関連する他のエントリポイント(entry point)が既に処理されていることを示す)、ベリファイヤは、スタックスナップショット格納構造346のスナップショット部340内に格納されている仮想スタックスナップショット情報と、仮想スタックのその時の状態とを比較する。比較の結果、スナップショットと仮想スタックの状態とがマッチしていないことが示された場合(スタックステータスミスマッチ)、スタックステータスミスマッチが発生したバイトコードプログラム内の場所を示すエラーメッセージが生成される(488)。好適実施例では、スナップショットとその時の仮想スタックが、同数または同タイプのエントリを含んでいないときミスマッチが発生する。更に、その時の仮想スタック内の1以上のデータタイプ値が、スナップショット内の対応するデータタイプ値に一致しないときにもミスマッチが発生する。ベリファイヤは、その後プログラムが“偽”であることを示すようにベリフィケーションステータス245をセットし、ベリフィケーションプロセスをアボートする(490)。ステップ486でスタックステータスマッチングが検出された場合、ベリファイヤはステップ500へと処理を継続する(図9)。
【0053】
図9を参照されたい。選択されている命令によってプログラムの後方に向かう条件付きまたは無条件ジャンプまたは分岐が発生する場合(ステップ500)、ベリファイヤは、スタックスナップショット格納構造346のスナップショット部340内に格納されている、その後方ジャンプのターゲットに関連する仮想スタックスナップショット情報(ステップ436で格納した)と、仮想スタックのその時の状態とを比較する。比較の結果、スナップショットとその時のステータスがマッチしないことが示された場合(スタックステータスミスマッチ)、スタックステータスミスマッチが発生したバイトコードプログラム内の場所を示すエラーメッセージが生成される(504)。好適実施例では、ミスマッチは、その時の仮想スタックとスナップショットが同数または同タイプのエントリを含んでいないか、あるいは仮想スタック内のデータタイプエントリのどれかが、スナップショット内の対応するデータタイプエントリとマッチしない場合に発生する。ベリファイヤは、その後プログラムが“偽”であることを示すようにベリフィケーションステータス245をセットし、ベリフィケーションプロセスをアボートする(506)。
【0054】
スタックステータスがマッチしていることが検出されるか(ステップ502)、または命令が後方ジャンプでない場合(ステップ500)、ベリファイヤはステップ510へと処理を継続する。
【0055】
選択されている命令が、ローカル変数からデータを読み出す場合(510)、ベリファイヤは対応する仮想ローカル変数内に予め格納されているデータタイプコード情報と、(もしあれば)選択されている命令のデータタイプ要求とを比較する。仮想ローカル変数に格納されているデータタイプ情報と選択されている命令のデータタイプ要求との間にミスマッチが検出された場合(512)、ミスマッチが発生したバイトコードプログラム内の場所を示すメッセージが生成される(514)。その後、ベリファイヤはプログラムが“偽”であることを示すようにベリフィケーションステータス245をセットし、ベリフィケーションプロセスをアボートする(516)。
【0056】
その時選択されている命令がローカル変数からデータを読み出さない場合(510)、またはステップ512に於けるデータタイプの比較がマッチする結果となった場合、ベリファイヤは、選択されている命令の処理を更にステップ520へと継続する。
【0057】
図10を参照されたい。選択されている命令によってデータがローカル変数に格納される場合(520)、対応する仮想ローカル変数が調べられ、その仮想ローカル変数がデータタイプ値を格納しているかどうかが判定される(522)。その仮想ローカル変数がデータタイプ値を格納している場合(即ちそのデータは以前にそのローカル変数内に格納されたことを意味する)、ベリファイヤは、その仮想ローカル変数内にあるデータタイプ情報と、選択されているバイトコード命令に関するデータタイプとを比較する(524)。仮想ローカル変数内に格納されているデータタイプ情報と、選択されている命令によって要求されているデータタイプとの間にミスマッチが検出されると(524)、ミスマッチが発生したバイトコードプログラム内の場所を示すメッセージが生成される(526)。その後、ベリファイヤはプログラムが“偽”であることを示すようにベリフィケーションステータス245をセットし、ベリフィケーションプロセスをアボートする(528)。
【0058】
選択されている命令が、ローカル変数にデータを格納しない場合(520)、選択されている命令に対する処理は終了する。選択されている命令によってデータがローカル変数内に格納されるが、その仮想ローカル変数がデータタイプ値を格納していない場合(即ち、そのローカル変数にデータを格納するような命令がベリファイヤによってまだ処理されていないことを示す)、選択されているバイトコード命令に関連するデータタイプが、その仮想ローカル変数に格納される(ステップ530)。
【0059】
続いて、ベリファイヤは、その命令が処理中のバイトコードプログラム340の最後の命令であるかどうかをチェックする(540)。処理すべき命令がまだ残っている場合、ベリファイヤは次の命令をロードし(542)、ベリフィケーションプロセスをステップ432から繰り返す。それ以上処理する命令がない場合は、ベリファイヤはプログラムが“真”であることを示すようにベリフィケーションステータス245をセットし(544)、ベリフィケーションプロセスの終了を伝える。
【0060】
バイトコードインタープリタ
図11のフローチャート及び付録2を参照しつつ、バイトコードインタープリタ242の動作について説明する。付録2は、バイトコードインタープリタを疑似コードで表したものである。
【0061】
指定されたバイトコードプログラムが与えられた場合、即ち、実行すべきプログラムとして選択された後(560)、バイトコードプログラムインタープリタ242は、指定されたバイトコードプログラムの保全性をベリファイするべく、バイトコードベリファイヤ240を呼び出す(562)。バイトコードベリファイヤについては既に上述した。
【0062】
ベリファイヤが“ベリフィケーション失敗(verification failure)”をリターンしてきた場合(564)、指定されたバイトコードプログラムのインタープリタによって実行されることなくアボートされる(566)。
【0063】
ベリファイヤ242が“ベリフィケーション成功”をリターンしてきた場合(564)、指定されたバイトコードプログラムはリソースユーティリティプログラムにリンクされ(568)、更に、そのプログラムによって参照される他のプログラム、関数、及びオブジェクトにもリンクされる。そのようなリンク過程は多くのプログラムインタープリタに於ける従来の前処理(pre-execution)過程と同様である。その後リンクされたバイトコードプログラムはインタープリタによってインタープリットされ実行される(570)。本発明のバイトコードインタープリタは、プログラムの実行中、オペランドスタックオーバフロー及びアンダーフローのチェックをしない。また、オペランドスタック内に格納されているデータに対するデータタイプのチェックもしない。このような従来インタープリット過程で行われていたスタックオーバフロー/アンダーフロー、及びデータタイプのチェックは、本発明では省略することができる。これは、ベリファイヤによって、このようなエラーがプログラム実行中に発生しないことが既にベリファイされているためである。
【0064】
本発明のプログラムインタープリタは、何度も繰り返し実行される命令ループ(instruction loop)を有するバイトコードプログラムの実行に対し、特に効果的である。なぜなら、本発明では、そのような各命令ループ内の各バイトコードに対して、オペランドスタックチェック命令は一度だけしか行われないからである。対照的に、従来のインタープリタによるプログラムの実行に於いては、インタープリタは、オーバフロー(即ち、スタックが格納できるより多くのデータがスタックに加えられる)やアンダーフロー(即ち、スタックが空の時にスタックからデータをポップしようとする)が生じていないかどうか、オペランドスタックを連続的にモニタする必要がある。そのようなスタックモニタリングは、通常、スタックのステータスを変化させる全ての命令(即ち、ほとんど全ての命令)に対して実行しなければならない。多くのプログラムで、インタープリタによって実行されるスタックモニタリング命令は、インタープリットされるコンピュータプログラムの実行時間の約80%に達する。その結果、本発明のインタープリタは、しばしば、同じコンピュータ上で実行される従来のプログラムインタープリタの2倍から5倍の速さでプログラムを実行する。
【0065】
本発明の特定の実施例について行った上述の説明は、例示を目的としたものであり、本発明を網羅的に記載することを意図したものでも、本発明を開示した形態そのものに限定することを意図したものでもなく、上述したことから多くの変形変更が可能であることは明らかであろう。上記の実施例は、本発明の原理とその実際的な応用が最も良く説明されるように選択及び記述したものであり、それによって当業者が本発明を最も良く利用して、特定の使用に合うように様々な改良を加えた変形実施態様が可能なようにしたものである。本発明の範囲は、特許請求の範囲によって画定される。
【0066】
【実施例】
【0067】
【0068】
【図面の簡単な説明】
【図1】図1は、ネットワークを介して接続された2つのコンピュータを示している。
【図2】図2は、ネットワークを介して接続された2つのコンピュータを示しており、それらのコンピュータのうち少なくとも一つは、本発明によるバイトコードプログラムベリファイヤを含んでいる。
【図3】図3は、本発明によるバイトコードプログラムのベリフィケーションに於いてバイトコードベリファイヤによって維持されるデータ構造を示している。
【図4】図4は、本発明の好適実施例に於けるバイトコードプログラムベリフィケーションプロセスのフローチャートの一部である。
【図5】図5は、本発明の好適実施例に於けるバイトコードプログラムベリフィケーションプロセスのフローチャートの一部である。
【図6】図6は、本発明の好適実施例に於けるバイトコードプログラムベリフィケーションプロセスのフローチャートの一部である。
【図7】図7は、本発明の好適実施例に於けるバイトコードプログラムベリフィケーションプロセスのフローチャートの一部である。
【図8】図8は、本発明の好適実施例に於けるバイトコードプログラムベリフィケーションプロセスのフローチャートの一部である。
【図9】図9は、本発明の好適実施例に於けるバイトコードプログラムベリフィケーションプロセスのフローチャートの一部である。
【図10】図10は、本発明の好適実施例に於けるバイトコードプログラムベリフィケーションプロセスのフローチャートの一部である。
【図11】図11は、本発明の好適実施例に於けるバイトコードプログラムインタープリットプロセスのフローチャートである。
【符号の説明】
100 分散型コンピュータシステム
102 第1コンピュータ
103 コンピュータプログラム
104 第2コンピュータ
106 CPU
108 ユーザインタフェース
110 主メモリ(RAM)
112 補助記憶装置
113 オペレーティングシステム
114 コミニュケーションインタフェース(モデム)
120 コンピュータネットワーク
200 分散型コンピュータシステム
202 第1コンピュータノード(ユーザワークステーションノード)
204 第2コンピュータノード(サーバノード)
206 CPU
208 ユーザインタフェース
210 主メモリ(RAM)
212 補助記憶装置(ディスク記憶装置)
214 コミュニケーションインタフェース(モデム)
218 CPU
220 コンピュータコミュニケーションネットワーク
221 バイトコードプログラム
222 主メモリ(RAM)
224 補助記憶装置(ディスク記憶装置)
228 ユーザインタフェース
234 コミュニケーションインタフェース(モデム)
236 オペレーティングシステム
237 オペレーティングシステム
240 バイトコードプログラムベリファイヤ
242 バイトコードプログラムインタープリタ
244 バイトコードプログラムコンパイラ
245 ベリフィケーションステータス
340 バイトコードプログラム
342 スタックカウンタ
344 仮想スタック
345 仮想ローカル変数アレイ
346 スタックスナップショット格納構造
348 ディレクトリ部
350 スナップショット部
352 バイトコード命令
354 バイトコード命令
356 バイトコード命令
358 バイトコード命令
360 バイトコード命令
362 バイトコード命令
364 バイトコード命令
366 バイトコード命令
368 バイトコード命令
Claims (11)
- メモリと少なくとも1つのデータ処理装置とを含むコンピュータの前記メモリにダウンロードされたバイトコードプログラムの保全性をベリファイする方法であって、
前記プログラムに含まれる一連のバイトコードの各バイトコードが、特定のデータタイプのデータに関する演算を表しかつ前記各バイトコードの扱うデータタイプのデータに関して対応するデータタイプ制約を有するとき、
(A)前記プログラムの実行前に前記プログラムを前処理する過程であって、前記プログラムに含まれる前記バイトコードのいずれかを実行することが該バイトコードに対する前記データタイプ制約に違反することになるかどうかをデータタイプ適合性判定手段が判定するとともに、前記プログラムに含まれる前記バイトコードのいずれかを実行することが該バイトコードに対する前記データタイプ制約に違反することになるときには信号生成手段がプログラムフォールト信号を生成することによって、前記プログラムを前処理する該過程と、
(B)前記前処理過程で前記信号生成手段がプログラムフォールト信号を生成しなかったとき、イネーブル手段が、前記プログラムを実行可能な状態にする過程と、
(C)前記前処理過程で前記信号生成手段がプログラムフォールト信号を生成したとき、阻止手段が、前記プログラムの実行を阻止する過程と、
(D)前記プログラムが実行可能な状態になったとき、前記データ処理装置が前記バイトコードプログラムを実行する過程とを含み、
前記バイトコードプログラムが、少なくとも1つの実行ループを含み、
前記前処理過程(A)が、
前記プログラムの実行中にオペランドスタックに格納されることになるオペランドに対するデータタイプ値を前記プログラムに対応する仮想スタックに格納し、前記仮想スタックに格納された前記データタイプ値を、スタックステータス追跡手段が、前記プログラムに含まれる前記各バイトコードの実行前後に特定する過程と、
前記プログラムに含まれるいずれかのループを実行することが前記オペランドスタックにオペランドの正味の増加または減少をもたらすことになるかどうかをスタックオーバフロー/アンダーフロー検査手段が判定するとともに、前記プログラムに含まれる前記いずれかのループを実行することが前記オペランドスタックにオペランドの正味の増加または減少をもたらすことになるときには前記信号生成手段がプログラムフォールト信号を生成する過程とを更に含み、
それによって、前記バイトコードプログラム実行過程において、前記データ処理装置が前記プログラムを実行する間の、オペランドスタックに格納されているオペランドに関するデータタイプのチェックとオペランドスタックのオーバフロー及びアンダーフローのチェックとを省略可能ならしめることを特徴とする方法。 - メモリと少なくとも1つのデータ処理装置とを含むコンピュータの前記メモリにダウンロードされたバイトコードプログラムの保全性をベリファイする方法であって、
前記プログラムに含まれる一連のバイトコードの各バイトコードが、特定のデータタイプのデータに関する演算を表しかつ前記各バイトコードの扱うデータタイプのデータに関して対応するデータタイプ制約を有するとき、
(A)前記プログラムの実行前に前記プログラムを前処理する過程であって、前記プログラムに含まれる前記バイトコードのいずれかを実行することが該バイトコードに対する前記データタイプ制約に違反することになるかどうかをデータタイプ適合性判定手段が判定するとともに、前記プログラムに含まれる前記バイトコードのいずれかを実行することが該バイトコードに対する前記データタイプ制約に違反することになるときには信号生成手段がプログラムフォールト信号を生成することによって、前記プログラムを前処理する該過程と、
(B)前記前処理過程で前記信号生成手段がプログラムフォールト信号を生成しなかったとき、イネーブル手段が、前記プログラムを実行可能な状態にする過程と、
(C)前記前処理過程で前記信号生成手段がプログラムフォールト信号を生成したとき、阻止手段が、前記プログラムの実行を阻止する過程と、
(D)前記プログラムが実行可能な状態になったとき、前記データ処理装置が、前記バイトコードプログラムを実行する過程とを含み、
前記バイトコードプログラムが、複数のジャンプ/分岐バイトコードを含み、
前記過程(A)が、
前記プログラムの実行中にオペランドスタックに格納されることになるオペランドに対するデータタイプ値を前記プログラムに対応する仮想スタックに格納し、前記プログラムに含まれる2つ以上のバイトコードが前記プログラム中の同じ位置にジャンプ/分岐するバイトコードを含むときにはいつでも、前記仮想スタックに格納された前記データタイプ値が異なるジャンプ/分岐に対し同じであるかどうかを前記各ジャンプ/分岐の実行前にジャンプ/分岐検査手段が判定するとともに、前記仮想スタックに格納された前記データタイプ値が同じでなければ前記信号生成手段がプログラムフォールト信号を生成する過程を含み、
それによって、前記バイトコードプログラムを実行する前記過程(D)において、前記データ処理装置が前記プログラムを実行する間の、オペランドスタックに格納されているオペランドに関するデータタイプのチェックと前記オペランドスタックに格納されるオペランドの数及びデータタイプが同じバイトコードに対して同一となるか否かのチェックとを省略可能ならしめることを特徴とする方法。 - メモリと少なくとも1つのデータ処理装置とを含むコンピュータの前記メモリにダウンロードされたバイトコードプログラムの保全性をベリファイする方法であって、
一連のバイトコードを含む前記プログラムが、複数のジャンプ/分岐バイトコードを含むとき、
(A)前記プログラムの実行前に前記プログラムを前処理する過程であって、
前記プログラムの実行中にオペランドスタックに格納されることになるオペランドに対するデータタイプ値を前記プログラムに対応する仮想スタックに格納し、該仮想スタックに格納された前記データタイプ値を、スタックステータス追跡手段が、前記プログラムに含まれる前記各バイトコードの実行前後に特定し、かつ、
前記プログラムに含まれる2つ以上のバイトコードが前記プログラム中の同じ位置にジャンプ/分岐するバイトコードを含むときにはいつでも、前記仮想スタックに格納された前記データタイプ値が異なるジャンプ/分岐に対し同じであるかどうかを前記各ジャンプ/分岐の実行前にジャンプ/分岐検査手段が判定するとともに、前記仮想スタックに格納された前記データタイプ値が同じでなければ前記信号生成手段がプログラムフォールト信号を生成することによって、前記プログラムを前処理する該過程と、
(B)前記前処理過程で前記信号生成手段がプログラムフォールト信号を生成しなかったとき、イネーブル手段が、前記プログラムを実行可能な状態にする過程と、
(C)前記前処理過程で前記信号生成手段がプログラムフォールト信号を生成したとき、阻止手段が、前記プログラムの実行を阻止する過程と、
(D)前記プログラムが実行可能な状態になったとき、前記データ処理装置が前記プログラムを実行する過程とを含み、
それによって、前記プログラム実行過程における前記オペランドスタックに格納されるオペランドの数及びデータタイプが同じバイトコードに対して同一となるか否かのチェックを省略可能ならしめることを特徴とする方法。 - 前記過程(A)が、
前記プログラムに含まれるいずれかのループを実行することが前記オペランドスタックにオペランドの正味の増加または減少をもたらすことになるかどうかをスタックオーバフロー/アンダーフロー検査手段が判定するとともに、前記プログラムに含まれる前記いずれかのループを実行することが前記オペランドスタックにオペランドの正味の増加または減少をもたらすことになるときには前記信号生成手段がプログラムフォールト信号を生成する過程を含むことを特徴とする請求項3に記載の方法。 - メモリと少なくとも1つのデータ処理装置とを含むコンピュータの前記メモリにダウンロードされたバイトコードプログラムの保全性をベリファイする方法であって、
一連のバイトコードを含む前記プログラムが、複数のジャンプ/分岐バイトコードと、少なくとも1つの実行ループとを含むとき、
(A)前記プログラムの実行前に前記プログラムを前処理する過程であって、前記プログラムの実行中にオペランドスタックに格納されることになるオペランドに対するデータタイプ値を前記プログラムに対応する仮想スタックに格納し、該仮想スタックに格納された前記データタイプ値を、スタックステータス追跡手段が、前記プログラムに含まれる前記各バイトコードの実行前後に特定し、前記プログラムに含まれる前記バイトコードのいずれかを実行することが前記オペランドスタックにオペランドの正味の増加または減少をもたらすことになるかどうかをスタックオーバフロー/アンダーフロー検査手段が判定するとともに、前記プログラムに含まれる前記いずれかのループを実行することが前記オペランドスタックにオペランドの正味の増加または減少をもたらすことになるときには、信号生成手段がプログラムフォールト信号を生成することによって、前記プログラムを前処理する該過程と、
(B)前記前処理過程で前記信号生成手段がプログラムフォールト信号を生成しなかったとき、イネーブル手段が、前記プログラムを実行可能な状態にする過程と、
(C)前記前処理過程で前記信号生成手段がプログラムフォールト信号を生成したとき、阻止手段が、前記プログラムの実行を阻止する過程と、
(D)前記プログラムが実行可能な状態になったとき、前記データ処理装置が前記プログラムを実行する過程とを含み、
それによって、前記プログラム実行過程におけるオペランドスタックのオーバフロー及びアンダーフローのチェックを省略可能ならしめることを特徴とする方法。 - バイトコードプログラムの保全性をベリファイするための装置であって、
前記バイトコードプログラムに含まれる一連のバイトコードの各バイトコードが、(A)特定のデータタイプのデータに関する演算を表しかつ(B)前記各バイトコードの扱うデータタイプのデータに関して対応するデータタイプ制約を有するとき、
前記バイトコードプログラムを格納するためのメモリと、
前記メモリに格納されたプログラムを実行するためのデータ処理装置と、
前記プログラムに含まれる前記バイトコードのいずれかを実行することが該バイトコードに対する前記データタイプ制約に違反することになるかどうかを判定するデータタイプ適合性判定手段と、
前記プログラムに含まれる前記バイトコードのいずれかを実行することが該バイトコードに対する前記データタイプ制約に違反することになるときにプログラムフォールト信号を生成する信号生成手段と、
前記信号生成手段がプログラムフォールト信号を生成しなかったときにのみ前記プログラムを実行可能な状態にするイネーブル手段とを含み、
これによって、前記イネーブル手段が前記プログラムを実行可能な状態にした後に前記データ処理装置が前記プログラムを実行する間の、オペランドスタックに格納されているオペランドに関するデータタイプのチェックを省略可能ならしめることを特徴とする装置。 - 前記プログラムの実行中にオペランドスタックに格納されることになるオペランドに対するデータタイプ値を格納している前記プログラムに対応する仮想スタックの状態を、前記プログラムに含まれる前記各バイトコードの実行前後に判定するスタックステータス追跡手段と、
(A)前記バイトコードプログラムを実行することがオペランドスタックのオーバフローまたはアンダーフローを生じさせることになるかどうか及び(B)前記バイトコードプログラムに含まれるいずれかのループを実行することが前記オペランドスタックにオペランドの正味の増加または減少をもたらすことになるかどうかを判定するスタックオーバフロー/アンダーフロー検査手段とを更に含み、
前記プログラムに含まれる前記いずれかのループを実行することが前記オペランドスタックにオペランドの正味の増加または減少をもたらすことになるときには、前記信号生成手段がプログラムフォールト信号を生成し、
これによって、前記データ処理装置が前記バイトコードプログラムを実行する間の、オペランドスタックのオーバフロー及びアンダーフローのチェックを省略可能ならしめることを特徴とする請求項6に記載の装置。 - 前記プログラムの実行中にオペランドスタックに格納されることになるオペランドに対するデータタイプ値を前記プログラムに対応する仮想スタックに格納する手段と、
前記プログラムに含まれる2つ以上のバイトコードが前記プログラム中の同じ位置にジャンプ/分岐するバイトコードを含むときにはいつでも、前記仮想スタックに格納された前記データタイプ値が異なるジャンプ/分岐に対し同じであるかどうかを前記各ジャンプ/分岐の実行前に判定するジャンプ/分岐検査手段を更に含み、
前記仮想スタックに格納された前記データタイプ値が同じでなければ、前記信号生成手段がプログラムフォールト信号を生成し、
これによって、前記データ処理装置が前記バイトコードプログラムを実行する間の、前記オペランドスタックに格納されるオペランドの数及びデータタイプが同じバイトコードに対して同一となるか否かのチェックを省略可能ならしめることを特徴とする請求項6に記載の装置。 - バイトコードプログラムの保全性をベリファイするための装置であって、
一連のバイトコードを含む前記バイトコードプログラムが、複数のジャンプ/分岐バイトコードを含むとき、
前記バイトコードプログラムを格納するためのメモリと、
前記メモリに格納されたプログラムを実行するためのデータ処理装置と、
前記プログラムの実行中にオペランドスタックに格納されることになるオペランドに対するデータタイプ値を前記プログラムに対応する仮想スタックに格納する手段と、
前記仮想スタックに格納された前記データタイプ値を、前記プログラムに含まれる前記各バイトコードの実行前後に特定するスタックステータス追跡手段と、
前記プログラムに含まれる2つ以上のバイトコードが前記プログラム中の同じ位置にジャンプ/分岐するバイトコードを含むときにはいつでも、前記仮想スタックに格納された前記データタイプ値が異なるジャンプ/分岐に対し同じであるかどうかを前記各ジャンプ/分岐の実行前に判定するジャンプ/分岐検査手段と、
前記仮想スタックに格納された前記データタイプ値が同じでない場合プログラムフォールト信号を生成する信号生成手段とを有し、
前記信号生成手段がプログラムフォールト信号を生成しなかったときにのみ前記プログラムを実行可能な状態にするようなイネーブル手段を更に含み、
これによって、前記イネーブル手段が前記プログラムを実行可能な状態にした後に前記データ処理装置が前記プログラムを実行する間の、前記オペランドスタックに格納されるオペランドの数及びデータタイプが同じバイトコードに対して同一となるか否かのチェックを省略可能ならしめることを特徴とする装置。 - (A)前記バイトコードプログラムを実行することがオペランドスタックのオーバフローまたはアンダーフローを生じさせることになるかどうか及び(B)前記バイトコードプログラムに含まれるいずれかのループを実行することが前記オペランドスタックにオペランドの正味の増加または減少をもたらすことになるかどうかを判定するスタックオーバフロー/アンダーフロー検査手段を更に含み、
前記プログラムに含まれる前記いずれかのループを実行することが前記オペランドスタックにオペランドの正味の増加または減少をもたらすことになるときには、前記信号生成手段がプログラムフォールト信号を生成することを特徴とする請求項9に記載の装置。 - バイトコードプログラムの保全性をベリファイするための装置であって、
一連のバイトコードを含む前記バイトコードプログラムが、複数のジャンプ/分岐バイトコードと少なくとも1つの実行ループとを含むとき、
前記バイトコードプログラムを格納するためのメモリと、
前記メモリに格納されたプログラムを実行するためのデータ処理装置と、
前記プログラムの実行中にオペランドスタックに格納されることになるオペランドに対するデータタイプ値を格納している前記プログラムに対応する仮想スタックの状態を、前記プログラムに含まれる前記各バイトコードの実行前後に判定するスタックステータス追跡手段と、
(A)前記バイトコードプログラムを実行することがオペランドスタックのオーバフローまたはアンダーフローを生じさせることになるかどうか及び(B)前記バイトコードプログラムに含まれるいずれかのループを実行することが前記オペランドスタックにオペランドの正味の増加または減少をもたらすことになるかどうかを判定するスタックオーバフロー/アンダーフロー検査手段と、
前記プログラムに含まれる前記いずれかのループを実行することが前記オペランドスタックにオペランドの正味の増加または減少をもたらすことになるときプログラムフォールト信号を生成する信号生成手段とを有し、
前記信号生成手段がプログラムフォールト信号を生成しなかったときにのみ前記プログラムを実行可能な状態にするようなイネーブル手段を更に含み、
これによって、前記イネーブル手段が前記プログラムを実行可能な状態にした後に前記データ処理装置が前記プログラムを実行する間の、オペランドスタックのオーバフロー/アンダーフローのチェックを省略可能ならしめることを特徴とする装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/360,202 | 1994-12-20 | ||
US08/360,202 US5748964A (en) | 1994-12-20 | 1994-12-20 | Bytecode program interpreter apparatus and method with pre-verification of data type restrictions |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH08234994A JPH08234994A (ja) | 1996-09-13 |
JP3868527B2 true JP3868527B2 (ja) | 2007-01-17 |
Family
ID=23417012
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP34916595A Expired - Lifetime JP3868527B2 (ja) | 1994-12-20 | 1995-12-20 | バイトコードプログラムの保全性をベリファイするための方法及び装置 |
Country Status (4)
Country | Link |
---|---|
US (6) | US5748964A (ja) |
EP (3) | EP0718764B1 (ja) |
JP (1) | JP3868527B2 (ja) |
DE (2) | DE69523029T2 (ja) |
Families Citing this family (294)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5630066A (en) * | 1994-12-20 | 1997-05-13 | Sun Microsystems, Inc. | System and method for locating object view and platform independent object |
US5668999A (en) * | 1994-12-20 | 1997-09-16 | Sun Microsystems, Inc. | System and method for pre-verification of stack usage in bytecode program loops |
US5748964A (en) * | 1994-12-20 | 1998-05-05 | Sun Microsystems, Inc. | Bytecode program interpreter apparatus and method with pre-verification of data type restrictions |
US6704923B1 (en) * | 1994-12-20 | 2004-03-09 | Sun Microsystems, Inc. | System and method for pre-verification of stack usage in bytecode program loops |
US6138140A (en) * | 1995-07-14 | 2000-10-24 | Sony Corporation | Data processing method and device |
US5970242A (en) * | 1996-01-24 | 1999-10-19 | Sun Microsystems, Inc. | Replicating code to eliminate a level of indirection during execution of an object oriented computer program |
KR100529416B1 (ko) * | 1996-01-24 | 2006-01-27 | 선 마이크로시스템즈 인코퍼레이티드 | 스택기반컴퓨터를위한명령폴딩방법및장치 |
US6532531B1 (en) * | 1996-01-24 | 2003-03-11 | Sun Microsystems, Inc. | Method frame storage using multiple memory circuits |
US6091897A (en) | 1996-01-29 | 2000-07-18 | Digital Equipment Corporation | Fast translation and execution of a computer program on a non-native architecture by use of background translator |
US6535903B2 (en) * | 1996-01-29 | 2003-03-18 | Compaq Information Technologies Group, L.P. | Method and apparatus for maintaining translated routine stack in a binary translation environment |
US6075863A (en) * | 1996-02-28 | 2000-06-13 | Encanto Networks | Intelligent communication device |
US6161121A (en) * | 1996-07-01 | 2000-12-12 | Sun Microsystems, Inc. | Generic transfer of exclusive rights |
US6266709B1 (en) * | 1996-07-01 | 2001-07-24 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server failure reporting process |
EP0825506B1 (en) | 1996-08-20 | 2013-03-06 | Invensys Systems, Inc. | Methods and apparatus for remote process control |
US5958050A (en) * | 1996-09-24 | 1999-09-28 | Electric Communities | Trusted delegation system |
US6094528A (en) * | 1996-10-24 | 2000-07-25 | Sun Microsystems, Inc. | Method and apparatus for system building with a transactional interpreter |
CN1183449C (zh) | 1996-10-25 | 2005-01-05 | 施卢默格系统公司 | 用微控制器使用高级程序设计语言 |
US7058822B2 (en) * | 2000-03-30 | 2006-06-06 | Finjan Software, Ltd. | Malicious mobile code runtime monitoring system and methods |
US9219755B2 (en) | 1996-11-08 | 2015-12-22 | Finjan, Inc. | Malicious mobile code runtime monitoring system and methods |
US7613926B2 (en) * | 1997-11-06 | 2009-11-03 | Finjan Software, Ltd | Method and system for protecting a computer and a network from hostile downloadables |
US8079086B1 (en) | 1997-11-06 | 2011-12-13 | Finjan, Inc. | Malicious mobile code runtime monitoring system and methods |
US5937193A (en) * | 1996-11-27 | 1999-08-10 | Vlsi Technology, Inc. | Circuit arrangement for translating platform-independent instructions for execution on a hardware platform and method thereof |
US5907707A (en) * | 1997-01-14 | 1999-05-25 | International Business Machines Corporation | Object model for Java |
US5920720A (en) * | 1997-02-25 | 1999-07-06 | Microsoft Corporation | Efficient computer based virtual machine object structure |
US5935249A (en) | 1997-02-26 | 1999-08-10 | Sun Microsystems, Inc. | Mechanism for embedding network based control systems in a local network interface device |
US5905895A (en) * | 1997-03-07 | 1999-05-18 | International Business Machines Corporation | Method and system for optimizing non-native bytecodes before bytecode interpretation |
US5983366A (en) * | 1997-03-19 | 1999-11-09 | Optimay Corporation | Data processing system having monitoring of software activity |
US6892226B1 (en) * | 1997-03-27 | 2005-05-10 | Intel Corporation | System for delivery of dynamic content to a client device |
US6003038A (en) * | 1997-03-31 | 1999-12-14 | Sun Microsystems, Inc. | Object-oriented processor architecture and operating method |
US6092147A (en) * | 1997-04-15 | 2000-07-18 | Sun Microsystems, Inc. | Virtual machine with securely distributed bytecode verification |
US6960133B1 (en) | 2000-08-28 | 2005-11-01 | Igt | Slot machine game having a plurality of ways for a user to obtain payouts based on selection of one or more symbols (power pays) |
US6009511A (en) * | 1997-06-11 | 1999-12-28 | Advanced Micro Devices, Inc. | Apparatus and method for tagging floating point operands and results for rapid detection of special floating point numbers |
US6021273A (en) * | 1997-06-30 | 2000-02-01 | Sun Microsystems, Inc. | Interpreter generation and implementation utilizing interpreter states and register caching |
US5978901A (en) * | 1997-08-21 | 1999-11-02 | Advanced Micro Devices, Inc. | Floating point and multimedia unit with data type reclassification capability |
US6085035A (en) * | 1997-09-09 | 2000-07-04 | Sun Microsystems, Inc. | Method and apparatus for efficient operations on primary type values without static overloading |
US6071316A (en) * | 1997-09-29 | 2000-06-06 | Honeywell Inc. | Automated validation and verification of computer software |
US6009517A (en) * | 1997-10-06 | 1999-12-28 | Sun Microsystems, Inc. | Mixed execution stack and exception handling |
US6317796B1 (en) * | 1997-10-06 | 2001-11-13 | Sun Microsystems, Inc. | Inline database for receiver types in object-oriented systems |
US6026237A (en) * | 1997-11-03 | 2000-02-15 | International Business Machines Corporation | System and method for dynamic modification of class files |
US7975305B2 (en) * | 1997-11-06 | 2011-07-05 | Finjan, Inc. | Method and system for adaptive rule-based content scanners for desktop computers |
US8225408B2 (en) * | 1997-11-06 | 2012-07-17 | Finjan, Inc. | Method and system for adaptive rule-based content scanners |
US6118940A (en) * | 1997-11-25 | 2000-09-12 | International Business Machines Corp. | Method and apparatus for benchmarking byte code sequences |
US6039765A (en) * | 1997-12-15 | 2000-03-21 | Motorola, Inc. | Computer instruction which generates multiple results of different data types to improve software emulation |
US6349344B1 (en) * | 1997-12-16 | 2002-02-19 | Microsoft Corporation | Combining multiple java class files into a run-time image |
US6081665A (en) * | 1997-12-19 | 2000-06-27 | Newmonics Inc. | Method for efficient soft real-time execution of portable byte code computer programs |
US6105129A (en) * | 1998-02-18 | 2000-08-15 | Advanced Micro Devices, Inc. | Converting register data from a first format type to a second format type if a second type instruction consumes data produced by a first type instruction |
US6185671B1 (en) * | 1998-03-31 | 2001-02-06 | Intel Corporation | Checking data type of operands specified by an instruction using attributes in a tagged array architecture |
US6075942A (en) * | 1998-05-04 | 2000-06-13 | Sun Microsystems, Inc. | Encoding machine-specific optimization in generic byte code by using local variables as pseudo-registers |
US6502123B1 (en) * | 1998-06-09 | 2002-12-31 | Advanced Micro Devices, Inc. | Isochronous system using certified drivers to ensure system stability |
US6141635A (en) * | 1998-06-12 | 2000-10-31 | Unisys Corporation | Method of diagnosing faults in an emulated computer system via a heterogeneous diagnostic program |
WO1999066383A2 (en) * | 1998-06-15 | 1999-12-23 | Dmw Worldwide, Inc. | Method and apparatus for assessing the security of a computer system |
US6760907B2 (en) | 1998-06-30 | 2004-07-06 | Sun Microsystems, Inc. | Code generation for a bytecode compiler |
US6430569B1 (en) * | 1998-08-14 | 2002-08-06 | Sun Microsystems, Inc. | Methods and apparatus for type safe, lazy, user-defined class loading |
US6205578B1 (en) * | 1998-08-14 | 2001-03-20 | Ati International Srl | Interpreter for stack-based languages |
US6131187A (en) * | 1998-08-17 | 2000-10-10 | International Business Machines Corporation | Method and system for translating exception handling semantics of a bytecode class file |
US6631515B1 (en) | 1998-09-24 | 2003-10-07 | International Business Machines Corporation | Method and apparatus to reduce code size and runtime in a Java environment |
JP2000122875A (ja) * | 1998-10-19 | 2000-04-28 | Internatl Business Mach Corp <Ibm> | 例外処理方法およびシステム |
US6530075B1 (en) * | 1998-12-03 | 2003-03-04 | International Business Machines Corporation | JIT/compiler Java language extensions to enable field performance and serviceability |
US7225436B1 (en) | 1998-12-08 | 2007-05-29 | Nazomi Communications Inc. | Java hardware accelerator using microcode engine |
US6826749B2 (en) | 1998-12-08 | 2004-11-30 | Nazomi Communications, Inc. | Java hardware accelerator using thread manager |
US6338160B1 (en) * | 1998-12-08 | 2002-01-08 | Nazomi Communications, Inc. | Constant pool reference resolution method |
US20050149694A1 (en) * | 1998-12-08 | 2005-07-07 | Mukesh Patel | Java hardware accelerator using microcode engine |
US6332215B1 (en) | 1998-12-08 | 2001-12-18 | Nazomi Communications, Inc. | Java virtual machine hardware for RISC and CISC processors |
JP3360635B2 (ja) | 1999-01-14 | 2002-12-24 | 日本電気株式会社 | プログラム検査システムとプログラム検査方法並びにその記憶媒体 |
US6581206B2 (en) * | 1999-11-12 | 2003-06-17 | Sun Microsystems, Inc. | Computer program language subset validation |
US6425003B1 (en) * | 1999-01-22 | 2002-07-23 | Cisco Technology, Inc. | Method and apparatus for DNS resolution |
JP3470948B2 (ja) * | 1999-01-28 | 2003-11-25 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ |
US6412109B1 (en) | 1999-01-29 | 2002-06-25 | Sun Microsystems, Inc. | Method for optimizing java bytecodes in the presence of try-catch blocks |
US6880155B2 (en) * | 1999-02-02 | 2005-04-12 | Sun Microsystems, Inc. | Token-based linking |
US7200842B1 (en) * | 1999-02-02 | 2007-04-03 | Sun Microsystems, Inc. | Object-oriented instruction set for resource-constrained devices |
AU763141B2 (en) * | 1999-04-19 | 2003-07-17 | Motorola Australia Pty Ltd | A method of detecting illegal sequences of code execution |
US7089530B1 (en) * | 1999-05-17 | 2006-08-08 | Invensys Systems, Inc. | Process control configuration system with connection validation and configuration |
WO2000070417A1 (en) * | 1999-05-17 | 2000-11-23 | The Foxboro Company | Process control configuration system with parameterized objects |
AU2004200283B2 (en) * | 1999-05-27 | 2006-11-02 | Sun Microsystems, Inc. | Module-by-module verification |
US6763397B1 (en) | 1999-05-27 | 2004-07-13 | Sun Microsystems, Inc. | Fully lazy linking |
US6601114B1 (en) | 1999-05-27 | 2003-07-29 | Sun Microsystems, Inc. | Fully lazy linking with module-by-module verification |
US6618855B1 (en) * | 1999-05-27 | 2003-09-09 | Sun Microsystems, Inc. | Caching untrusted modules for module-by-module verification |
US6618769B1 (en) * | 1999-05-27 | 2003-09-09 | Sun Microsystems, Inc. | Module-by-module verification |
US6766521B1 (en) * | 1999-05-27 | 2004-07-20 | Sun Microsystems, Inc. | Dataflow algorithm for symbolic computation of lowest upper bound type |
US6378087B1 (en) * | 1999-06-08 | 2002-04-23 | Compaq Computer Corporation | System and method for dynamically detecting unchecked error condition values in computer programs |
DE19926467C1 (de) * | 1999-06-10 | 2001-01-11 | Siemens Ag | Verfahren zum Betreiben eines Computersystems, Bytecode-Verifier und Computersystem |
US6788980B1 (en) | 1999-06-11 | 2004-09-07 | Invensys Systems, Inc. | Methods and apparatus for control using control devices that provide a virtual machine environment and that communicate via an IP network |
US6408280B1 (en) | 1999-07-22 | 2002-06-18 | Toshiba America Information Systems, Inc. | Data driven constraints engine |
US6779117B1 (en) | 1999-07-23 | 2004-08-17 | Cybersoft, Inc. | Authentication program for a computer operating system |
FR2797963B1 (fr) * | 1999-08-23 | 2002-11-29 | Trusted Logic | Protocole de gestion, procede de verification et de transformation d'un fragment de programme telecharge et systemes correspondants |
US6594783B1 (en) | 1999-08-27 | 2003-07-15 | Hewlett-Packard Development Company, L.P. | Code verification by tree reconstruction |
US6560774B1 (en) | 1999-09-01 | 2003-05-06 | Microsoft Corporation | Verifier to check intermediate language |
EP1085396A1 (en) | 1999-09-17 | 2001-03-21 | Hewlett-Packard Company | Operation of trusted state in computing platform |
US6684387B1 (en) | 1999-09-23 | 2004-01-27 | International Business Machines Corporation | Method and apparatus for verifying Enterprise Java Beans |
US7107581B2 (en) * | 1999-11-12 | 2006-09-12 | Sun Microsystems, Inc. | Overflow predictive arithmetic instruction optimization using chaining |
US7158993B1 (en) | 1999-11-12 | 2007-01-02 | Sun Microsystems, Inc. | API representation enabling submerged hierarchy |
US7207037B2 (en) * | 1999-11-12 | 2007-04-17 | Sun Microsystems, Inc. | Overflow sensitive arithmetic instruction optimization using chaining |
US7010786B2 (en) | 1999-11-12 | 2006-03-07 | Sun Microsystems, Inc. | Predictive arithmetic overflow detection |
US8453133B2 (en) * | 1999-11-12 | 2013-05-28 | Oracle America, Inc. | Optimization of N-base typed arithmetic instructions via rework |
US6363523B1 (en) * | 1999-11-12 | 2002-03-26 | Sun Microsystems, Inc. | Optimization of N-base typed arithmetic expressions |
US6601019B1 (en) * | 1999-11-16 | 2003-07-29 | Agilent Technologies, Inc. | System and method for validation of objects |
US7219335B1 (en) * | 1999-12-08 | 2007-05-15 | Intel Corporation | Method and apparatus for stack emulation during binary translation |
JP3640081B2 (ja) * | 1999-12-27 | 2005-04-20 | 日本電気株式会社 | Mpiプログラムのコンパイルにおける最適化方法 |
US7120572B1 (en) * | 2000-01-06 | 2006-10-10 | Sun Microsystems, Inc. | Memory efficient program pre-execution verifier and method |
AU2001241454A1 (en) * | 2000-02-07 | 2001-08-14 | Panacya, Inc. | Computer security system indentifying suspect behaviour |
US6986132B1 (en) | 2000-04-28 | 2006-01-10 | Sun Microsytems, Inc. | Remote incremental program binary compatibility verification using API definitions |
US6651186B1 (en) * | 2000-04-28 | 2003-11-18 | Sun Microsystems, Inc. | Remote incremental program verification using API definitions |
US6675375B1 (en) * | 2000-04-28 | 2004-01-06 | Sun Microsystems, Inc. | Method and apparatus for optimized multiprocessing in a safe language |
US6883163B1 (en) | 2000-04-28 | 2005-04-19 | Sun Microsystems, Inc. | Populating resource-constrained devices with content verified using API definitions |
US6981249B1 (en) * | 2000-05-02 | 2005-12-27 | Microsoft Corporation | Methods for enhancing type reconstruction |
FR2809200B1 (fr) * | 2000-05-17 | 2003-01-24 | Bull Cp8 | Procede de securisation d'un langage du type a donnees typees, notamment dans un systeme embarque et systeme embarque de mise en oeuvre du procede |
US7475404B2 (en) | 2000-05-18 | 2009-01-06 | Maquis Techtrix Llc | System and method for implementing click-through for browser executed software including ad proxy and proxy cookie caching |
US8086697B2 (en) | 2005-06-28 | 2011-12-27 | Claria Innovations, Llc | Techniques for displaying impressions in documents delivered over a computer network |
US6769985B1 (en) | 2000-05-31 | 2004-08-03 | Igt | Gaming device and method for enhancing the issuance or transfer of an award |
US7699699B2 (en) | 2000-06-23 | 2010-04-20 | Igt | Gaming device having multiple selectable display interfaces based on player's wagers |
US7695363B2 (en) | 2000-06-23 | 2010-04-13 | Igt | Gaming device having multiple display interfaces |
US6675338B1 (en) | 2000-08-09 | 2004-01-06 | Sun Microsystems, Inc. | Internally generated vectors for burnin system |
GB0020441D0 (en) | 2000-08-18 | 2000-10-04 | Hewlett Packard Co | Performance of a service on a computing platform |
US6935955B1 (en) | 2000-09-07 | 2005-08-30 | Igt | Gaming device with award and deduction proximity-based sound effect feature |
US6981245B1 (en) | 2000-09-14 | 2005-12-27 | Sun Microsystems, Inc. | Populating binary compatible resource-constrained devices with content verified using API definitions |
US6993761B1 (en) * | 2000-09-28 | 2006-01-31 | Sun Microsystems, Inc. | Method and apparatus to verify type safety of an application snapshot |
US7340592B1 (en) | 2000-09-29 | 2008-03-04 | Intel Corporation | Executing a translated block of instructions and branching to correction code when expected top of stack does not match actual top of stack to adjust stack at execution time to continue executing without restarting translating |
KR20020028814A (ko) * | 2000-10-10 | 2002-04-17 | 나조미 커뮤니케이션즈, 인코포레이티드 | 마이크로코드 엔진을 이용한 자바 하드웨어 가속기 |
US6739973B1 (en) | 2000-10-11 | 2004-05-25 | Igt | Gaming device having changed or generated player stimuli |
US6968540B2 (en) * | 2000-10-25 | 2005-11-22 | Opnet Technologies Inc. | Software instrumentation method and apparatus |
US7171588B2 (en) * | 2000-10-27 | 2007-01-30 | Empirix, Inc. | Enterprise test system having run time test object generation |
US6996813B1 (en) | 2000-10-31 | 2006-02-07 | Sun Microsystems, Inc. | Frameworks for loading and execution of object-based programs |
GB2376763B (en) | 2001-06-19 | 2004-12-15 | Hewlett Packard Co | Demonstrating integrity of a compartment of a compartmented operating system |
US6964039B2 (en) * | 2000-12-13 | 2005-11-08 | Esmertec Ag | Method to create optimized machine code through combined verification and translation of JAVA™ bytecode |
US6874025B2 (en) * | 2000-12-22 | 2005-03-29 | Intel Corporation | System and method of application input validation |
US7379475B2 (en) * | 2002-01-25 | 2008-05-27 | Nvidia Corporation | Communications processor |
GB2372345A (en) * | 2001-02-17 | 2002-08-21 | Hewlett Packard Co | Secure email handling using a compartmented operating system |
GB2372595A (en) | 2001-02-23 | 2002-08-28 | Hewlett Packard Co | Method of and apparatus for ascertaining the status of a data processing environment. |
GB2372592B (en) | 2001-02-23 | 2005-03-30 | Hewlett Packard Co | Information system |
US7512935B1 (en) * | 2001-02-28 | 2009-03-31 | Computer Associates Think, Inc. | Adding functionality to existing code at exits |
US6775763B2 (en) * | 2001-03-09 | 2004-08-10 | Koninklijke Philips Electronics N.V. | Bytecode instruction processor with switch instruction handling logic |
US7040983B2 (en) | 2001-03-21 | 2006-05-09 | Igt | Gaming device having a multi-round, multi-characteristic matching game |
US7020874B2 (en) * | 2001-03-26 | 2006-03-28 | Sun Microsystems, Inc. | Techniques for loading class files into virtual machines |
US7096466B2 (en) | 2001-03-26 | 2006-08-22 | Sun Microsystems, Inc. | Loading attribute for partial loading of class files into virtual machines |
US7543288B2 (en) | 2001-03-27 | 2009-06-02 | Sun Microsystems, Inc. | Reduced instruction set for Java virtual machines |
US6978451B2 (en) * | 2001-05-31 | 2005-12-20 | Esmertec Ag | Method for fast compilation of preverified JAVA bytecode to high quality native machine code |
US7036111B2 (en) * | 2001-06-01 | 2006-04-25 | Hewlett-Packard Development Company, L.P. | Code verification system and method |
GB2376764B (en) * | 2001-06-19 | 2004-12-29 | Hewlett Packard Co | Multiple trusted computing environments |
GB0114898D0 (en) * | 2001-06-19 | 2001-08-08 | Hewlett Packard Co | Interaction with electronic services and markets |
GB2376762A (en) * | 2001-06-19 | 2002-12-24 | Hewlett Packard Co | Renting a computing environment on a trusted computing platform |
GB2376761A (en) * | 2001-06-19 | 2002-12-24 | Hewlett Packard Co | An arrangement in which a process is run on a host operating system but may be switched to a guest system if it poses a security risk |
GB2376765B (en) | 2001-06-19 | 2004-12-29 | Hewlett Packard Co | Multiple trusted computing environments with verifiable environment identities |
WO2003009140A2 (en) * | 2001-07-20 | 2003-01-30 | Altaworks Corporation | System and method for adaptive threshold determination for performance metrics |
US7143407B2 (en) * | 2001-07-26 | 2006-11-28 | Kyocera Wireless Corp. | System and method for executing wireless communications device dynamic instruction sets |
US7039904B2 (en) | 2001-08-24 | 2006-05-02 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for storing values into local variables |
US7058934B2 (en) * | 2001-08-24 | 2006-06-06 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for instantiating Java objects |
US7228533B2 (en) * | 2001-08-24 | 2007-06-05 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for performing programming loops |
US8769508B2 (en) | 2001-08-24 | 2014-07-01 | Nazomi Communications Inc. | Virtual machine hardware for RISC and CISC processors |
US6988261B2 (en) * | 2001-08-24 | 2006-01-17 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions in Java computing environments |
US7219034B2 (en) | 2001-09-13 | 2007-05-15 | Opnet Technologies, Inc. | System and methods for display of time-series data distribution |
US7901291B2 (en) | 2001-09-28 | 2011-03-08 | Igt | Gaming device operable with platform independent code and method |
US6848996B2 (en) | 2001-10-15 | 2005-02-01 | Igt | Gaming device with sound recording changes associated with player inputs |
US7708642B2 (en) | 2001-10-15 | 2010-05-04 | Igt | Gaming device having pitch-shifted sound and music |
US7666098B2 (en) | 2001-10-15 | 2010-02-23 | Igt | Gaming device having modified reel spin sounds to highlight and enhance positive player outcomes |
EP1313012A1 (en) * | 2001-11-15 | 2003-05-21 | Texas Instruments France | Java DSP acceleration by byte-code optimization |
GB2382419B (en) | 2001-11-22 | 2005-12-14 | Hewlett Packard Co | Apparatus and method for creating a trusted environment |
US6976254B2 (en) * | 2001-11-28 | 2005-12-13 | Esmertec Ag | Inter-method control transfer for execution engines with memory constraints |
US7506322B2 (en) * | 2001-12-13 | 2009-03-17 | Synopsys, Inc. | System and method of utilizing a hardware component to execute an interpretive language |
US7203930B1 (en) * | 2001-12-31 | 2007-04-10 | Bellsouth Intellectual Property Corp. | Graphical interface system monitor providing error notification message with modifiable indication of severity |
US6941328B2 (en) | 2002-01-22 | 2005-09-06 | International Business Machines Corporation | Copy process substituting compressible bit pattern for any unqualified data objects |
US7181737B2 (en) * | 2002-03-18 | 2007-02-20 | Sun Microsystems, Inc. | Method and apparatus for deployment of high integrity software using static procedure return addresses |
US7010783B2 (en) * | 2002-03-18 | 2006-03-07 | Sun Microsystems, Inc. | Method and apparatus for deployment of high integrity software using reduced dynamic memory allocation |
US6996802B2 (en) * | 2002-03-18 | 2006-02-07 | Sun Microsystems, Inc. | Method and apparatus for deployment of high integrity software using initialization order and calling order constraints |
US20040215444A1 (en) * | 2002-03-25 | 2004-10-28 | Patel Mukesh K. | Hardware-translator-based custom method invocation system and method |
US7272827B2 (en) * | 2002-04-03 | 2007-09-18 | International Business Machines Corporation | Statically detecting externally referenced interfaces of a program |
US7447886B2 (en) * | 2002-04-22 | 2008-11-04 | Freescale Semiconductor, Inc. | System for expanded instruction encoding and method thereof |
FR2840084A1 (fr) * | 2002-05-27 | 2003-11-28 | Gemplus Card Int | Procede de verification de codes pour microcircuits a ressources limitees |
US7085933B2 (en) * | 2002-06-11 | 2006-08-01 | Lenvo (Singapore) Pte, Ltd. | Computer system apparatus and method for improved assurance of authentication |
US20040003380A1 (en) * | 2002-06-26 | 2004-01-01 | Microsoft Corporation | Single pass intermediate language verification algorithm |
US7603341B2 (en) | 2002-11-05 | 2009-10-13 | Claria Corporation | Updating the content of a presentation vehicle in a computer network |
US7281244B2 (en) * | 2003-01-16 | 2007-10-09 | Sun Microsystems, Inc. | Using a digital fingerprint to commit loaded data in a device |
US8121955B2 (en) * | 2003-01-16 | 2012-02-21 | Oracle America, Inc. | Signing program data payload sequence in program loading |
US7165246B2 (en) * | 2003-01-16 | 2007-01-16 | Sun Microsystems, Inc. | Optimized representation of data type information in program verification |
US20040143739A1 (en) * | 2003-01-16 | 2004-07-22 | Sun Mircosystems, Inc., A Delaware Corporation | Run time code integrity checks |
US7281237B2 (en) * | 2003-01-16 | 2007-10-09 | Sun Microsystems, Inc. | Run-time verification of annotated software code |
US7272830B2 (en) * | 2003-01-16 | 2007-09-18 | Sun Microsystems, Inc. | Ordering program data for loading on a device |
US7222331B2 (en) * | 2003-01-16 | 2007-05-22 | Sun Microsystems, Inc. | Linking of virtual methods |
US7484095B2 (en) * | 2003-01-16 | 2009-01-27 | Sun Microsystems, Inc. | System for communicating program data between a first device and a second device |
US20040199787A1 (en) * | 2003-04-02 | 2004-10-07 | Sun Microsystems, Inc., A Delaware Corporation | Card device resource access control |
EP1627303A4 (en) * | 2003-04-18 | 2009-01-14 | Ounce Labs Inc | METHOD AND SYSTEM FOR DETECTING VULNERABILITIES IN A SOURCE CODE |
US7380242B2 (en) * | 2003-05-14 | 2008-05-27 | Mainsoft Israel Ltd. | Compiler and software product for compiling intermediate language bytecodes into Java bytecodes |
US7685570B2 (en) * | 2003-06-09 | 2010-03-23 | Microsoft Corporation | Error/exception helper |
US7496896B2 (en) * | 2003-07-17 | 2009-02-24 | Computer Associates Think, Inc. | Accessing return values and exceptions |
US7789748B2 (en) | 2003-09-04 | 2010-09-07 | Igt | Gaming device having player-selectable music |
US7105736B2 (en) | 2003-09-09 | 2006-09-12 | Igt | Gaming device having a system for dynamically aligning background music with play session events |
US7383539B2 (en) * | 2003-09-18 | 2008-06-03 | International Business Machines Corporation | Managing breakpoints in a multi-threaded environment |
US7669193B1 (en) * | 2003-09-25 | 2010-02-23 | Lantronix, Inc. | Program transformation using flow-sensitive type constraint analysis |
US7260746B2 (en) * | 2003-10-21 | 2007-08-21 | Massachusetts Institute Of Technology | Specification based detection and repair of errors in data structures |
US10437964B2 (en) * | 2003-10-24 | 2019-10-08 | Microsoft Technology Licensing, Llc | Programming interface for licensing |
US7263690B1 (en) * | 2003-11-14 | 2007-08-28 | Sun Microsystems, Inc. | Mechanism for safe byte code in a tracing framework |
US7290174B1 (en) * | 2003-12-03 | 2007-10-30 | Altera Corporation | Methods and apparatus for generating test instruction sequences |
US7228266B1 (en) * | 2003-12-05 | 2007-06-05 | Unisys Corporation | Instruction processor emulator having separate operand and op-code interfaces |
US7574695B2 (en) * | 2003-12-23 | 2009-08-11 | Ntt Docomo, Inc. | Performing checks on the resource usage of computer programs |
US7287243B2 (en) * | 2004-01-06 | 2007-10-23 | Hewlett-Packard Development Company, L.P. | Code verification system and method |
US7165727B2 (en) * | 2004-02-24 | 2007-01-23 | Sun Microsystems, Inc. | Method and apparatus for installing an application onto a smart card |
US7191288B2 (en) * | 2004-02-24 | 2007-03-13 | Sun Microsystems, Inc. | Method and apparatus for providing an application on a smart card |
US7374099B2 (en) * | 2004-02-24 | 2008-05-20 | Sun Microsystems, Inc. | Method and apparatus for processing an application identifier from a smart card |
US7140549B2 (en) * | 2004-02-24 | 2006-11-28 | Sun Microsystems, Inc. | Method and apparatus for selecting a desired application on a smart card |
US7770147B1 (en) * | 2004-03-08 | 2010-08-03 | Adaptec, Inc. | Automatic generators for verilog programming |
US20050216829A1 (en) * | 2004-03-25 | 2005-09-29 | Boris Kalinichenko | Wireless content validation |
US7720877B1 (en) * | 2004-04-14 | 2010-05-18 | Oracle America, Inc. | Class structure based enhancer for data objects |
US7571428B2 (en) * | 2004-05-14 | 2009-08-04 | Microsoft Corporation | Reliability contracts |
US7539975B2 (en) * | 2004-06-30 | 2009-05-26 | International Business Machines Corporation | Method, system and product for determining standard Java objects |
US7493596B2 (en) * | 2004-06-30 | 2009-02-17 | International Business Machines Corporation | Method, system and program product for determining java software code plagiarism and infringement |
US7647581B2 (en) * | 2004-06-30 | 2010-01-12 | International Business Machines Corporation | Evaluating java objects across different virtual machine vendors |
US8255413B2 (en) | 2004-08-19 | 2012-08-28 | Carhamm Ltd., Llc | Method and apparatus for responding to request for information-personalization |
US8078602B2 (en) | 2004-12-17 | 2011-12-13 | Claria Innovations, Llc | Search engine for a computer network |
TWI305323B (en) * | 2004-08-23 | 2009-01-11 | Faraday Tech Corp | Method for verification branch prediction mechanisms and readable recording medium for storing program thereof |
US7348982B2 (en) | 2004-09-30 | 2008-03-25 | Microsoft Corporation | Method, system, and computer-readable medium for creating and laying out a graphic within an application program |
US8134575B2 (en) | 2004-09-30 | 2012-03-13 | Microsoft Corporation | Maintaining graphical presentations based on user customizations |
US8510657B2 (en) | 2004-09-30 | 2013-08-13 | Microsoft Corporation | Editing the text of an arbitrary graphic via a hierarchical list |
US8043155B2 (en) | 2004-10-18 | 2011-10-25 | Igt | Gaming device having a plurality of wildcard symbol patterns |
US7650640B1 (en) * | 2004-10-18 | 2010-01-19 | Symantec Corporation | Method and system for detecting IA32 targeted buffer overflow attacks |
US7627857B2 (en) * | 2004-11-15 | 2009-12-01 | International Business Machines Corporation | System and method for visualizing exception generation |
US7693863B2 (en) | 2004-12-20 | 2010-04-06 | Claria Corporation | Method and device for publishing cross-network user behavioral data |
US7232073B1 (en) | 2004-12-21 | 2007-06-19 | Sun Microsystems, Inc. | Smart card with multiple applications |
US20060155974A1 (en) * | 2005-01-07 | 2006-07-13 | Moyer William C | Data processing system having flexible instruction capability and selection mechanism |
US7921425B2 (en) * | 2005-03-14 | 2011-04-05 | Cisco Technology, Inc. | Techniques for allocating computing resources to applications in an embedded system |
US7750924B2 (en) * | 2005-03-15 | 2010-07-06 | Microsoft Corporation | Method and computer-readable medium for generating graphics having a finite number of dynamically sized and positioned shapes |
US7743325B2 (en) * | 2005-03-15 | 2010-06-22 | Microsoft Corporation | Method and computer-readable medium for fitting text to shapes within a graphic |
US8073866B2 (en) | 2005-03-17 | 2011-12-06 | Claria Innovations, Llc | Method for providing content to an internet user based on the user's demonstrated content preferences |
EP2194476B1 (en) | 2005-03-22 | 2014-12-03 | Hewlett-Packard Development Company, L.P. | Method and apparatus for creating a record of a software-verification attestation |
US7574700B2 (en) * | 2005-03-31 | 2009-08-11 | Sun Microsystems, Inc. | Supporting dynamically-typed languages in typed assembly languages |
US7747944B2 (en) * | 2005-06-30 | 2010-06-29 | Microsoft Corporation | Semantically applying style transformation to objects in a graphic |
US7614043B2 (en) * | 2005-08-26 | 2009-11-03 | Microsoft Corporation | Automated product defects analysis and reporting |
US8966284B2 (en) * | 2005-09-14 | 2015-02-24 | Sandisk Technologies Inc. | Hardware driver integrity check of memory card controller firmware |
JP4732874B2 (ja) * | 2005-11-28 | 2011-07-27 | 株式会社エヌ・ティ・ティ・ドコモ | ソフトウェア動作モデル化装置、ソフトウェア動作監視装置、ソフトウェア動作モデル化方法及びソフトウェア動作監視方法 |
WO2007068706A1 (fr) * | 2005-12-13 | 2007-06-21 | Gemplus | Procede pour securiser l'execution d'un code logiciel en langage intermediaire dans un appareil portatif |
US8291377B2 (en) * | 2006-01-25 | 2012-10-16 | Microsoft Corporation | External configuration of processing content for script |
US7802089B2 (en) * | 2006-01-25 | 2010-09-21 | Microsoft Corporation | Analyzing interpretable code for harm potential |
US8438486B2 (en) | 2006-02-09 | 2013-05-07 | Microsoft Corporation | Automatically converting text to business graphics |
US8250559B2 (en) * | 2006-04-12 | 2012-08-21 | Oracle America, Inc. | Supporting per-program classpaths with class sharing in a multi-tasking virtual machine |
US8171482B1 (en) * | 2006-05-09 | 2012-05-01 | Vmware, Inc. | Application environment specifications for provisioning application specific runtime environments using subsets of resources required for execution |
EP1881404A1 (fr) * | 2006-07-20 | 2008-01-23 | Gemplus | Procédé de protection dynamique des données lors de l'exécution d'un code logiciel en langage intermédiaire dans un appareil numérique |
US7624131B2 (en) * | 2007-01-18 | 2009-11-24 | Microsoft Corporation | Type restriction and mapping for partial materialization |
US8577937B1 (en) | 2007-05-09 | 2013-11-05 | Vmware, Inc. | Repository including exclusion list |
JP4661854B2 (ja) * | 2007-11-09 | 2011-03-30 | 株式会社デンソー | 検査システム及びプログラム |
US7974741B2 (en) * | 2008-04-10 | 2011-07-05 | Dresser, Inc. | Managing information related to industrial equipment |
US8594814B2 (en) | 2008-06-20 | 2013-11-26 | Invensys Systems, Inc. | Systems and methods for immersive interaction with actual and/or simulated facilities for process, environmental and industrial control |
US8591308B2 (en) | 2008-09-10 | 2013-11-26 | Igt | Gaming system and method providing indication of notable symbols including audible indication |
US8875115B2 (en) * | 2008-11-29 | 2014-10-28 | International Business Machines Corporation | Type merging technique to reduce class loading during Java verification |
US7661092B1 (en) * | 2008-12-30 | 2010-02-09 | International Business Machines Corporation | Intelligent reuse of local variables during bytecode compilation |
US8127060B2 (en) | 2009-05-29 | 2012-02-28 | Invensys Systems, Inc | Methods and apparatus for control configuration with control objects that are fieldbus protocol-aware |
US8463964B2 (en) | 2009-05-29 | 2013-06-11 | Invensys Systems, Inc. | Methods and apparatus for control configuration with enhanced change-tracking |
US8458676B2 (en) | 2009-06-30 | 2013-06-04 | International Business Machines Corporation | Executing platform-independent code on multi-core heterogeneous processors |
EP2348465A1 (en) | 2009-12-22 | 2011-07-27 | Philip Morris Products S.A. | Method and apparatus for storage of data for manufactured items |
US8799325B2 (en) | 2010-03-12 | 2014-08-05 | Microsoft Corporation | Reordering nodes in a hierarchical structure |
US8499299B1 (en) | 2010-06-29 | 2013-07-30 | Ca, Inc. | Ensuring deterministic thread context switching in virtual machine applications |
US8769518B1 (en) * | 2010-06-29 | 2014-07-01 | Ca, Inc. | Ensuring determinism during programmatic replay in a virtual machine |
US8732670B1 (en) | 2010-06-29 | 2014-05-20 | Ca, Inc. | Ensuring determinism during programmatic replay in a virtual machine |
US9218566B2 (en) | 2010-08-20 | 2015-12-22 | International Business Machines Corporation | Detecting disallowed combinations of data within a processing element |
US8543980B2 (en) | 2010-08-23 | 2013-09-24 | Micro Focus (Us), Inc. | State driven testing |
US8543981B2 (en) * | 2010-08-23 | 2013-09-24 | Micro Focus (Us), Inc. | State driven test editor |
JP5845788B2 (ja) * | 2011-09-30 | 2016-01-20 | 富士通株式会社 | 実行制御プログラム、実行制御装置および実行制御方法 |
US8600915B2 (en) | 2011-12-19 | 2013-12-03 | Go Daddy Operating Company, LLC | Systems for monitoring computer resources |
US8719196B2 (en) | 2011-12-19 | 2014-05-06 | Go Daddy Operating Company, LLC | Methods for monitoring computer resources using a first and second matrix, and a feature relationship tree |
EP2802983B1 (en) | 2012-01-10 | 2016-12-14 | Intel Corporation | Isa bridging with callback |
US8460090B1 (en) | 2012-01-20 | 2013-06-11 | Igt | Gaming system, gaming device, and method providing an estimated emotional state of a player based on the occurrence of one or more designated events |
US9361115B2 (en) | 2012-06-15 | 2016-06-07 | International Business Machines Corporation | Saving/restoring selected registers in transactional processing |
US9336046B2 (en) | 2012-06-15 | 2016-05-10 | International Business Machines Corporation | Transaction abort processing |
US9317460B2 (en) | 2012-06-15 | 2016-04-19 | International Business Machines Corporation | Program event recording within a transactional environment |
US9772854B2 (en) * | 2012-06-15 | 2017-09-26 | International Business Machines Corporation | Selectively controlling instruction execution in transactional processing |
US9348642B2 (en) | 2012-06-15 | 2016-05-24 | International Business Machines Corporation | Transaction begin/end instructions |
US8688661B2 (en) | 2012-06-15 | 2014-04-01 | International Business Machines Corporation | Transactional processing |
US9442737B2 (en) | 2012-06-15 | 2016-09-13 | International Business Machines Corporation | Restricting processing within a processor to facilitate transaction completion |
US8682877B2 (en) | 2012-06-15 | 2014-03-25 | International Business Machines Corporation | Constrained transaction execution |
US9384004B2 (en) | 2012-06-15 | 2016-07-05 | International Business Machines Corporation | Randomized testing within transactional execution |
US9740549B2 (en) | 2012-06-15 | 2017-08-22 | International Business Machines Corporation | Facilitating transaction completion subsequent to repeated aborts of the transaction |
US20130339680A1 (en) | 2012-06-15 | 2013-12-19 | International Business Machines Corporation | Nontransactional store instruction |
US9448796B2 (en) | 2012-06-15 | 2016-09-20 | International Business Machines Corporation | Restricted instructions in transactional execution |
US8880959B2 (en) | 2012-06-15 | 2014-11-04 | International Business Machines Corporation | Transaction diagnostic block |
US10437602B2 (en) | 2012-06-15 | 2019-10-08 | International Business Machines Corporation | Program interruption filtering in transactional execution |
US9436477B2 (en) | 2012-06-15 | 2016-09-06 | International Business Machines Corporation | Transaction abort instruction |
US8966324B2 (en) | 2012-06-15 | 2015-02-24 | International Business Machines Corporation | Transactional execution branch indications |
US9367323B2 (en) | 2012-06-15 | 2016-06-14 | International Business Machines Corporation | Processor assist facility |
US9245407B2 (en) | 2012-07-06 | 2016-01-26 | Igt | Gaming system and method that determines awards based on quantities of symbols included in one or more strings of related symbols displayed along one or more paylines |
US8740689B2 (en) | 2012-07-06 | 2014-06-03 | Igt | Gaming system and method configured to operate a game associated with a reflector symbol |
JP5976930B2 (ja) * | 2012-08-08 | 2016-08-24 | インテル コーポレイション | バーチャルファンクションを無効にするコールのためのサポートを含むisaブリッジング |
EP2782006B1 (en) * | 2013-03-19 | 2018-06-13 | Nxp B.V. | Process and system for verifying computer program on a smart card |
US8745594B1 (en) | 2013-05-10 | 2014-06-03 | Technobasics Software Inc. | Program flow specification language and system |
FR3006471A1 (fr) * | 2013-05-29 | 2014-12-05 | Morpho | Systeme et procede d'execution d'applications d'une carte a puce |
US9192857B2 (en) | 2013-07-23 | 2015-11-24 | Igt | Beat synchronization in a game |
WO2015067993A1 (en) * | 2013-11-08 | 2015-05-14 | Freescale Semiconductor, Inc. | Processing system with stack management and method for stack management |
JP6409638B2 (ja) * | 2015-03-20 | 2018-10-24 | 富士通株式会社 | コンパイラ、コンパイル装置、および、コンパイル方法 |
US10055208B2 (en) * | 2015-08-09 | 2018-08-21 | Oracle International Corporation | Extending a virtual machine instruction set architecture |
US9947170B2 (en) | 2015-09-28 | 2018-04-17 | Igt | Time synchronization of gaming machines |
US10001978B2 (en) * | 2015-11-11 | 2018-06-19 | Oracle International Corporation | Type inference optimization |
KR101894894B1 (ko) * | 2017-06-16 | 2018-09-05 | 서울대학교산학협력단 | 바이트코드 처리 장치 및 동작 방법 |
US10579501B2 (en) * | 2018-04-04 | 2020-03-03 | International Business Machines Corporation | Testing and reproduction of concurrency issues |
US10795679B2 (en) * | 2018-06-07 | 2020-10-06 | Red Hat, Inc. | Memory access instructions that include permission values for additional protection |
US11042429B2 (en) * | 2019-01-07 | 2021-06-22 | International Business Machines Corporation | Selective stack trace generation during java exception handling |
CN112181784B (zh) * | 2020-10-21 | 2024-03-26 | 中国工商银行股份有限公司 | 基于字节码注入的代码故障分析方法及系统 |
CN112988157B (zh) * | 2020-12-21 | 2024-05-07 | 杭州趣链科技有限公司 | 字节码验证方法、装置及存储介质 |
US11726849B2 (en) | 2021-03-19 | 2023-08-15 | Oracle International Corporation | Executing a parametric method within a specialized context |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3878513A (en) * | 1972-02-08 | 1975-04-15 | Burroughs Corp | Data processing method and apparatus using occupancy indications to reserve storage space for a stack |
US4524416A (en) * | 1980-04-15 | 1985-06-18 | Honeywell Information Systems Inc. | Stack mechanism with the ability to dynamically alter the size of a stack in a data processing system |
US4521851A (en) * | 1982-10-13 | 1985-06-04 | Honeywell Information Systems Inc. | Central processor |
US5179734A (en) * | 1984-03-02 | 1993-01-12 | Texas Instruments Incorporated | Threaded interpretive data processor |
US4622013A (en) | 1984-05-21 | 1986-11-11 | Interactive Research Corporation | Interactive software training system |
US4742215A (en) | 1986-05-07 | 1988-05-03 | Personal Computer Card Corporation | IC card system |
US5165465A (en) | 1988-05-03 | 1992-11-24 | Electronic Environmental Controls Inc. | Room control system |
US5187799A (en) | 1988-05-17 | 1993-02-16 | Calif. Institute Of Technology | Arithmetic-stack processor which precalculates external stack address before needed by CPU for building high level language executing computers |
CA1337132C (en) | 1988-07-15 | 1995-09-26 | Robert Filepp | Reception system for an interactive computer network and method of operation |
US5220522A (en) | 1989-05-09 | 1993-06-15 | Ansan Industries, Ltd. | Peripheral data acquisition, monitor, and control device for a personal computer |
AU645757B2 (en) * | 1989-08-17 | 1994-01-27 | Fujitsu Limited | A system to pass through resource information |
US5058052A (en) * | 1989-10-16 | 1991-10-15 | Ge Fanuc Automation North America, Inc. | Method for checking the syntax of an instruction list program to determine if the program is expressible as a relay ladder diagram by a programmable logic controller |
US5283864A (en) | 1990-10-30 | 1994-02-01 | Wang Laboratories, Inc. | Computer apparatus and method for graphical flip book |
US5307499A (en) | 1990-11-30 | 1994-04-26 | Singapore Computer Systems Limited | Interpretive object-oriented facility which can access pre-compiled classes |
US5450575A (en) * | 1991-03-07 | 1995-09-12 | Digital Equipment Corporation | Use of stack depth to identify machine code mistakes |
US5499329A (en) * | 1992-04-30 | 1996-03-12 | Ricoh Company, Ltd. | Method and system to handle context of interpretation in a document processing language |
US5925125A (en) * | 1993-06-24 | 1999-07-20 | International Business Machines Corporation | Apparatus and method for pre-verifying a computer instruction set to prevent the initiation of the execution of undefined instructions |
US5590329A (en) * | 1994-02-04 | 1996-12-31 | Lucent Technologies Inc. | Method and apparatus for detecting memory access errors |
US5812436A (en) * | 1994-10-20 | 1998-09-22 | Tandem Computers Incorporated | Method and apparatus for testing and analyzing the conformance of a proposed set of requirements for a proposed network management application |
US5748964A (en) * | 1994-12-20 | 1998-05-05 | Sun Microsystems, Inc. | Bytecode program interpreter apparatus and method with pre-verification of data type restrictions |
US5668999A (en) * | 1994-12-20 | 1997-09-16 | Sun Microsystems, Inc. | System and method for pre-verification of stack usage in bytecode program loops |
US5978574A (en) * | 1997-11-05 | 1999-11-02 | Hewlett-Packard Company | Formal verification of queue flow-control through model-checking |
-
1994
- 1994-12-20 US US08/360,202 patent/US5748964A/en not_active Expired - Lifetime
-
1995
- 1995-12-19 EP EP95120052A patent/EP0718764B1/en not_active Expired - Lifetime
- 1995-12-19 DE DE69523029T patent/DE69523029T2/de not_active Expired - Lifetime
- 1995-12-19 EP EP04010613A patent/EP1533696A3/en not_active Withdrawn
- 1995-12-19 EP EP01104659A patent/EP1118940B1/en not_active Expired - Lifetime
- 1995-12-19 DE DE69533005T patent/DE69533005T2/de not_active Expired - Lifetime
- 1995-12-20 JP JP34916595A patent/JP3868527B2/ja not_active Expired - Lifetime
- 1995-12-20 US US08/575,291 patent/US5740441A/en not_active Expired - Lifetime
-
1998
- 1998-03-24 US US09/046,719 patent/US5999731A/en not_active Expired - Fee Related
-
1999
- 1999-12-06 US US09/454,821 patent/US6247171B1/en not_active Expired - Lifetime
-
2000
- 2000-11-09 US US09/711,053 patent/US6477702B1/en not_active Expired - Lifetime
-
2002
- 2002-11-05 US US10/288,323 patent/US7080363B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
DE69523029D1 (de) | 2001-11-08 |
US6247171B1 (en) | 2001-06-12 |
US5748964A (en) | 1998-05-05 |
EP1118940B1 (en) | 2004-05-06 |
US6477702B1 (en) | 2002-11-05 |
DE69533005T2 (de) | 2005-05-04 |
US20030135844A1 (en) | 2003-07-17 |
EP1533696A3 (en) | 2006-10-25 |
DE69523029T2 (de) | 2002-06-20 |
US7080363B2 (en) | 2006-07-18 |
EP1533696A2 (en) | 2005-05-25 |
JPH08234994A (ja) | 1996-09-13 |
US5740441A (en) | 1998-04-14 |
DE69533005D1 (de) | 2004-06-09 |
EP0718764B1 (en) | 2001-10-04 |
US5999731A (en) | 1999-12-07 |
EP0718764A2 (en) | 1996-06-26 |
EP1118940A3 (en) | 2001-09-26 |
EP0718764A3 (en) | 1997-01-15 |
EP1118940A2 (en) | 2001-07-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3868527B2 (ja) | バイトコードプログラムの保全性をベリファイするための方法及び装置 | |
JP3805417B2 (ja) | アプリケーションプログラムの保全性をベリファイする方法及び装置 | |
US5668999A (en) | System and method for pre-verification of stack usage in bytecode program loops | |
US7784044B2 (en) | Patching of in-use functions on a running computer system | |
US9405777B2 (en) | Registry emulation | |
US6745385B1 (en) | Fixing incompatible applications by providing stubs for APIs | |
US6704923B1 (en) | System and method for pre-verification of stack usage in bytecode program loops | |
US6334213B1 (en) | Merging of separate executable computer programs to form a single executable computer program | |
US6922827B2 (en) | Iterative software development environment with prioritized build rules | |
CN109614165B (zh) | 一种com组件的多版本并行运行方法和装置 | |
US7191436B1 (en) | Computer system utility facilitating dynamically providing program modifications for identified programs | |
WO1995001598A1 (en) | System for object oriented dynamic linking based upon a catalog of registered function set or class identifiers | |
US8856752B2 (en) | Monitoring asset state to enable partial build | |
JPH08179940A (ja) | コンピュータ・アプリケーション・プログラムをデバッグする方法およびコンピュータ・システム | |
US7814471B2 (en) | Method and apparatus for providing DLL compatibility | |
US6110227A (en) | Systems and methods for pre-processing variable initializers | |
US20040226009A1 (en) | System and method for software application task abstraction | |
EP1376342A2 (en) | Single pass intermediate language verification algorithm | |
Cortesi | Pyinstaller manual | |
US9448782B1 (en) | Reducing a size of an application package |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20051025 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060125 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060221 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20060519 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20060525 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060821 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060912 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20061011 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091020 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101020 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111020 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121020 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131020 Year of fee payment: 7 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |