JP2002529812A - 実行時にコンパイルされたコンピュータコードの機能を改変するためのシステム - Google Patents
実行時にコンパイルされたコンピュータコードの機能を改変するためのシステムInfo
- Publication number
- JP2002529812A JP2002529812A JP2000580089A JP2000580089A JP2002529812A JP 2002529812 A JP2002529812 A JP 2002529812A JP 2000580089 A JP2000580089 A JP 2000580089A JP 2000580089 A JP2000580089 A JP 2000580089A JP 2002529812 A JP2002529812 A JP 2002529812A
- Authority
- JP
- Japan
- Prior art keywords
- program
- symbol
- file
- computer
- original
- 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
Links
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/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Abstract
Description
詳細には、本発明をコンピュータシステムで実施するプロセスに関するソースコ
ード命令を表にした、37 CFR Section 1.96に従ったマイク
ロフィッシュ付属書類を含む。このマイクロフィッシュAppendixは、6
3フレームまたはページ分のソースコードAppendixを含む1シートのマ
イクロフィッシュから成る。本著作権所有者は、米国特許商標庁に出願される明
細書の複製に異議を唱えない。その他に関しては、全ての著作権が留保される。
コンパイルされたコンピュータプログラムの実行時機能の改変を可能にするシス
テムに関する。
可能である。翻訳コードを実行することによるもの、またはコンパイルコードを
実行することによるものが、2つの主要で、且つ基本的に異なる方法である。
動作することをプロセッサに要求する。すなわち、コンピュータプログラム表現
が、テキストベースの形式であるか、またはコードが「トークン化」されている
ようなテキストベースの形式からかけ離れていないので、人間のプログラマーに
よって書かれるコードとプロセッサによって実行されるコードは非常に類似して
いる。コンパイルコードとは異なり、翻訳コードは、長い「構築」時間を必要と
しないという利点を有する。本質的に、プログラマーは、翻訳コードを書き、且
つそのコードをテストする目的で、コードをすぐに実行することが可能である。
この点で、翻訳コードは、ラピッドプロトタイピング(rapid proto
typing)に有用である。翻訳コードは、一般に、速度が重要な問題ではな
い些細な用途によく適する。これは、翻訳コードの大きな欠点が、コンパイルコ
ードと比較して、よく知られているとおり遅いからである。
ンパイルコードの生成および維持は、翻訳コードよりもはるかに困難である。ま
た、コンパイルプログラムアプローチで作成されたプログラムは、開発および改
変がより複雑である。通常、変更がテストできる前、または受渡し可能な実行可
能なもの(deliverable executable)が作成される前に
、コンパイル、リンク、およびロードされなければならないプログラムモジュー
ルが多く必要とされる。時に「プロジェクト」と呼ばれる、大型のコンパイルさ
れたコンピュータプログラム内には、数百の異なるモジュールまたはファイルが
存在する。これらのプロジェクトの構築プロセスは、それ自体が複雑であり、記
号、プロセス、リソース、およびプログラム開発の他の局面の正確な調整を必要
とする。コンピュータプログラムの完全な構築は、プログラムのサイズによって
は、何時間も要する可能性がある。さらに、コンパイルコードの開発は、モジュ
ール、ユーティリティー、ツール、および他の開発者支援ソフトウェアの正確な
アーカイビング、ブックキーピング(bookeeping)、ならびにトラッ
キングを必要とする。コンピュータプログラムが古くなるにつれて、たとえ実行
可能なバージョンのプログラムがまだ使用中であっても、特定のバージョンのプ
ログラムを再構築することが困難または不可能になり得る。これは、プログラム
を構築するために用いられるオペレーティングシステム、開発環境、ツール、ユ
ーティリティー、または他のソフトウェア(またはハードウェア)が変更され得
るからである。
いなければならないので、コンパイルプログラムプロジェクトの元々のプログラ
マーでないプログラマーが、「予備知識を得て(come up to spe
ed)」、別のプログラマーによって書かれたソフトウェアに改変することは困
難である。コンパイル、リンク、およびロードされた実行可能コードは、いずれ
の実際的な意味においても、人間のプログラマーには読むことができず、プログ
ラマーに人間が読むことができる「ソース」コードバージョンのプログラムの学
習を強要するだけでなく、そのプログラムに関する構築プロセスの詳細な実用的
な知識を有することも強要する。よって、コンパイルコードの維持および改変に
は問題がある。
行動を変更することが困難であることである。翻訳コードアプローチでは、全く
新しい翻訳コード命令の集合が、ユーザコンピュータにロードされなければなら
ない。コンパイルコードは、通常、後述するアプローチが完全に新しいバージョ
ンのコンパイル実行可能物のローディングを回避するために開発された、翻訳コ
ードよりもはるかに大きい。翻訳コードは比較的に小さく、よって、新たなバー
ジョンのロードを容易にするが、非常に大きなプログラムの高速な実行を必要と
するアプリケーションプログラムの大部分には適さない。翻訳コードの例として
は、BASIC、Lisp、ならびにPerlおよびJava(登録商標)等の
スクリプト言語がある。コンパイルコードアプローチで用いられる言語の例とし
ては、Fortran、「C」、アセンブリ言語、その他がある。しかしながら
、これらのカテゴリーは、適切な「インタープリタ」または「コンパイラ」がそ
のコードを実行することが意図されるターゲットマシンのために書かれることを
仮定すると、いずれのコンピュータ言語も、コンパイルコードまたは翻訳コード
アプローチとしてインプリメントされ得るので、幾分あいまいに定義される。
、これはワードプロセッシングプログラムでなされ、人間が読むことができるテ
キストとなる。このプログラムは、ユーザコンピュータ12にロードされる。転
送またはローディングは、フロッピー(登録商標)ディスク、コンパクトディス
ク読み出し専用メモリ(CDROM)、ネットワークからのダウンロード、また
は他の手段によってなされ得る。ロードプログラム14は、通常、プログラマー
によって作成されるオリジナルテキストの完全なコピーである。ロードプログラ
ム14は、インタープリタ16によって翻訳され、ユーザコンピュータ内で所望
の実行時機能を作成するために、プログラムコード、またはスクリプトによって
特定される機能を実行する。よって、翻訳コードアプローチでは、単一のプログ
ラム定義のみが存在する。プログラム10のプログラム定義は、プログラムの人
間が読むことができる定義、およびユーザコンピュータ内の実行イメージとして
役立つ。
あり、それによって、機械が読むことができる実行可能オブジェクトが、人間が
読むことができるソースコードモジュールから生成される。アイテム34〜38
は、ユーザコンピュータ32上のコンパイルソフトウェアプログラムの実行に関
連するアイテムを示す。
、人間が読むことができるバージョンのプログラムである。通常、コンパイルコ
ード開発環境にあるプログラマーは、ソースコードの個別のファイルを処理し、
例えば、図1Bのソースコード20は、プログラムプロジェクト内で用いられる
多くのモジュールのうちの単一のモジュールを表わす。1つのモジュールは、数
行から数百以上の行までのコードを有することが可能である。ソースコード20
は、コンパイラ22によってコンパイルされ、オブジェクトファイル24となる
。各モジュールは、プログラムプロジェクト内の他のいずれのモジュールからも
独立してコンパイルすることが可能である。これによって、プログラムの断片が
、モジュールごとに、プログラムプロジェクト内の多くのモジュールの全てのコ
ンパイルを必要とせずに、改変することが可能である。しかしながら、モジュー
ル内の1行を変更することでさえも、後述のとおり、モジュール全体の再コンパ
イル、およびプロジェクト全体の再構築を必要とすることに留意されたい。
内の他のオブジェクトファイルにリンクすることが可能である。他のオブジェク
トファイルは、そのプログラマーまたは別のプログラマーが書いた他のコンパイ
ルソースコードモジュールからのものであり得る。リンク可能なオブジェクトモ
ジュールのための他のソースは、共通して必要とされる機能を提供するために、
予め存在するライブラリオブジェクト26を含む。プログラプロジェクトのため
のオブジェクトファイルの全てが、単一の実行可能オブジェクト30を作成する
ために、リンカー28を介してリンクされる。実行可能オブジェクト30を作成
することにより、プログラムの構築が完結する。(後述するダイナミックリンキ
ング(dynamic linking)は別にして)一般に、構築のためには
、モジュール、ライブラリ、および他のオブジェクトファイルソースの全てから
のオブジェクトファイルの全てを手近に有する必要があることに留意されたい。
これは、異なるオブジェクトが、異なるプログラマーの行動の結果として、異な
る時点に変更され得るので、大型のプログラムでは問題となる。後にコンパイル
プログラムの機能を、プログラムの再構築によって、変更することが所望される
場合、例えば、相互に互換性のあるオブジェクトファイルの集合を有する必要が
ある。本質的に、これは、オブジェクトファイル中の全ての「記号」リファレン
スが一致しなければならないことを意味する。記号は、プロセス、ルーチン、サ
ブルーチン、関数、およびデータ構造等のソースコード内の異なるオブジェクト
または項目を参照する、単なるテキストラベルにすぎない。この構築プロセスが
非常に複雑なために、プログラマーの「開発者環境」は、モジュール、オブジェ
クトファィル、記号リファレンスの調整、および他の関連するタスクの実施を支
援する、ソフトウェア開発「ツール」製造者によって提供される。
クト30である。実行可能オブジェクト30は、実行のために、ターゲット、ま
たはユーザコンピュータ32に次に転送される、受渡し可能な生成物を表わす。
通常、実行可能オブジェクト30は、実行可能イメージ34を作成するために、
実行可能オブジェクトをシステムランダムアクセスメモリ(RAM)に配置する
、ローダ32によってロードされる。翻訳コードの場合と同様に、実行可能オブ
ジェクトが、任意のコンピュータ可読媒体で転送されるか、インターネット等の
通信リンク上を転送されるか、または他の手段によって、ユーザコンピュータ内
に格納されることが可能である。実行可能イメージ34は、ユーザコンピュータ
内のプロセッサによってアクセスされ、コンパイル命令を実行することにより、
元々のソースコード命令に従って機能を提供する。
らびに元々のソースコード命令の変換を必要とすることに留意されたい。これは
、翻訳コードの実行とは対照的である。コンパイルコードの調整および処理の複
雑さは、今日のコンピュータの用途の多くで所望される最大速度および効率を達
成するために必要である。
困難であるという点で、翻訳およびコンパイルプログラムアプローチの両方に存
在する。すなわち、ユーザがプログラムを実行しているときに、元々のプログラ
ムの開発者、製造者、または他の提供者が、ユーザに提供されるプログラムの機
能を改変することが困難または不可能である。このことを十分に示すために、翻
訳コードおよびコンパイルコードアプローチの両方について、さらに詳細に示す
。
va(登録商標)タイプのコードの一部を示す。この一例として、1997年に
、O’Reilly & Associates, Incによって出版された
、David Flanaganによる「Java(登録商標) Script, The
Definitive Guid」等の参考文献に記載のJava(登録商標)
Script言語がある。図1Aは、図1Aのロードプログラム10内等のユー
ザコンピュータシステム内に常駐しているように見えるJava(登録商標)S
criptを示す。Java(登録商標)Scriptは特殊構文で書かれてい
るが、標準的な英数字の英語文字を用いており、人間が読むことができる。よっ
て、当業者は、ユーザコンピュータ上に常駐する3行のスクリプトをすぐに見る
ことが可能であり、且つそれらの行がコンピュータに、各数字の間の間隔で、1
〜10までの数字を印刷するように指示していると判断することが可能である。
ために、全く新しいソースコードモジュール、またはドキュメントが、獲得され
、且つ図1Cに示す行を含むソースコードモジュールの書き換えられなければな
らない。通常、これは、ソースコードモジュールが非常に小さなサイズであれば
問題ではない。例えば、Java(登録商標)タイプの言語は、World W
ide Webページ内に埋めこまれて、あるいはそれに関連してロードされて
用いられるインターネットでは非常に一般的である。Java(登録商標)「ア
プレット」が、非常に小さくなる傾向にあるので、新たなバージョンのアプレッ
トが、ユーザが情報のページにアクセス(すなわち、ロード)するたびに提供さ
れる。このようにして、ソースコードへの変更が、ユーザが実行しているバージ
ョン内で、常に可能である。
較して)実行が非常に遅いという大きな欠点を有する。また、人間が読むことが
できる形式が空間効率がよくない(not space−efficient)
ために、大型のプログラムは翻訳コードで書かれない。
を示す。実行可能オブジェクトは単に、16進数として図1Dに表わす、一連の
数字である。通常、これらの数字は、専用のビューイングプログラムが用いられ
ない限り、読むことができる数字として見ることすらできない。これらの数字は
、ユーザコンピュータシステム内の中央処理装置(CPU)が、間接的な翻訳ア
プローチではなく、直接的に実行する、機械レベルの命令を表わす。
ピュータは、1行のスクリプトを読み込み、その行の構文解析を行い、一連の機
械命令にその行を変換して、命令を実行する。いくつかの場合において、この変
換は、翻訳コードが代わりにコンパイルされた場合に、結果として生じる数字と
、結果として類似した数字となる。しかしながら、多くの場合において、翻訳コ
ードは、単一の行の翻訳コードを実行することだけを考慮した場合でも、高速ま
たは簡潔ではない。当然、翻訳された行の読み込み、構文解析、変換、および実
行は、プログラマーによって意図された機能を実際に実施するたった数個の機械
命令の最終的実行を達成するために、多くの余分な「オーバーヘッド」工程を実
行することをプロセッサに要求する。他方、コンパイルプログラムアプローチの
実行可能なオブジェクトは、すでに機械が読むことができる形式であり、プログ
ラマーが所望する機能を実現するための命令のみを含む。よって、コンピュータ
は、各機械命令を、そのプロセッサに直接ロードし、翻訳コードアプローチの実
行時オーバーヘッドを経ることなく、命令を実行することが可能である。コンパ
イルコードの使用は、プロセッサの速度、ならびにコンピュータの制限されたメ
モリおよびディスクスペースを十分に利用するために、絶対的に必要である。
内の隣接する位置を占める。これによって、実行可能物に命令またはデータを加
える改変を実施することが困難になる。また、ユーザコンピュータ内に常駐する
実行可能オブジェクトの機能を適切に変更するために、新たな、または改変され
た実行可能オブジェクトが、作成されて、エンドユーザに提供されなければなら
ない。これは、インターネット等の通信リンク上でのダウンロードによって行う
ことが可能であるが、今日の実行可能オブジェクトのサイズが大きいために、数
時間のダウンロード時間を要し、コンパイル実行可能オブジェクトの実行時機能
を変更することは非実際的であり、望ましくない。
する2つの基本的アプローチを開発してきた。これらは、(1)既存の実行可能
オブジェクトに「パッチを当てる」こと、または(2)ダイナミックにリンクさ
れるライブラリ(DLL)を用いることである。
。
ッチアプライコード54によって変更され得る。このアプローチにおいて、16
ビットワードを表す、値000Aのような命令または値は、パッチアプライコー
ド54内の命令を実行することによって、0005のような異なる値に変更され
得る。パッチアプライコード54は、パッチデータ56から新たな値0005を
入手し、実行可能オブジェクト52内の適切な位置にデータを挿入する。この例
において、図1Dに示すコードの一部分は、パッチをあてた結果として、実行可
能オブジェクト52内に示すコードを有し得る。
合、パッチアプライコード54およびパッチデータ56(集合的には、「パッチ
」)は、数千バイトのオーダーであり得る。パッチは、典型的には、前の実行可
能オブジェクト(すなわち、図1Dの実行可能オブジェクト)内のデータを用い
、変化を作り出し、前の実行可能オブジェクトの代わりとして、新たな実行可能
オブジェクト(図1Eの実行可能オブジェクト52)をセーブすることによって
、新たな実行可能オブジェクトを構成する。当然、発生し得るパッチングのタイ
プには、古い実行可能オブジェクトの一部分を消去することと、古い実行可能オ
ブジェクトに新たな部分を加えることと、古い実行可能オブジェクトの存在する
部分を変更することとが含まれる。
小さいので、大きなコンパイルされた実行可能オブジェクトの新たなバージョン
全体のダウンロードより、パッチングがより効率的である。しかし、パッチング
は、プログラムの機能性に、1度の変化を提供するのみである。また、機能性に
おける変化は、プログラムが実行される前に起こる。この点に関して、パッチン
グアプローチは、コンピュータコードの機能性の実行時変更を提供しない。また
、パッチをダウンロードするプロセス、および、パッチをあてて新たな実行可能
オブジェクトを作成するプロセスは、時間が掛かり、パッチを進める認証を与え
ること、パッチがあてられた実行可能オブジェクトがどのディレクトリに保存さ
れ得るのかをを指定すること等によって、しばしばパッチングプロセスに参加す
る必要があるユーザに対してトランスペアレントでない。1つのプログラムに対
して複数のパッチが存在し、ユーザによって適切な順序でパッチがあてられない
場合、パッチは問題の原因となり得る。また、パッチがあてられたプログラムが
実行を開始する前にパッチが入手され、実行される(しばしば、時間が掛かるプ
ロセスである)必要があるので、ユーザのプログラムの実行において、パッチは
厄介な遅延の原因となり得る。
をある程度可能にする。しかし、このアプローチは、制限され、以下で説明する
所望の柔軟性を欠いている。
DLL62内のルーチン、関数、および他のアイテムにリンクする。DLLにリ
ンクするプロセスは、概念において、上で簡略的に説明した、プログラムの構築
の間に図1Bのリンカー28によって行われるプロセスに類似する。DLLへの
ダイナミックリンクを理解するために、プログラム構築の間のリンクがまず説明
される。
して処理される。モジュールの情報は、プログラム構築の間に1つの実行可能プ
ログラムを作成するために、結合される必要がある。モジュールの結合における
主なタスクは、他のモジュールにおいて規定され得る、プロセス、ルーチン、サ
ブルーチン、関数、オブジェクト、データ構造、および他のリソースのようなア
イテム(集合的に「アイテム」と呼ぶ)へのシンボリックリファレンスを決定す
ることである。シンボリックリファレンス、またはシンボルは、ソースコードを
書く間にプログラマが用いる、英数字の人間可読名に過ぎない。これらのシンボ
ルは、後でアドレスにマッピングされて、マシン可読コードを発生する。シンボ
ルをアドレスにマッピングするために、シンボルは、対応するアイテムの定義に
関連付けられる必要がある。
ール内に存在しない。この場合、所与のモジュールは、アイテムがモジュールに
対して外部にあると「宣言」する。コンパイラは、外部で定義されるアイテムへ
のリファレンスを無視し得、そのことにより、コンパイルにおいて他のモジュー
ルを含む必要なしに、所与のモジュールがコンパイルされ得る(かつ、内部エラ
ーについてチェックされ得る)。後に、コンパイラが検出したエラーに関して、
モジュールが固定された場合、所与のモジュールは、実際にアイテム定義を有す
るモジュールに「リンク」される。リンカーは、シンボルが用いられる場所、シ
ンボルが定義される場所、シンボルがマッピングする関連アドレス等のような、
シンボル名についての詳細な情報を提供し得る。大きなコンピュータプログラム
は、何千、何万、あるいはそれより多いシンボリックリファレンスを用い得る。
各プログラマが、典型的には、独自のシンボル名を作り出すので、シンボル名の
記憶および理解が、他のプログラマがプログラムを変更するために十分な程度プ
ログラムを理解しようとする場合、通常越えなければならない主なハードルであ
る。上述したように、シンボルは、1つのモジュールで定義され、他のモジュー
ルにシンボルがモジュールの外部にあると宣言させることによって、他のモジュ
ール、または他の多数のモジュールによって用いられ得る。シンボリックリファ
レンスを処理する、いくつかの他のタイプのメカニズムがある。これらのメカニ
ズムは、特定のコンピュータ言語によって変わる。しかし、コンピュータ言語の
各々は、コンパイルされた言語であると仮定すると、最終的には、リンカーのよ
うなプロセスを用いることによって、複数のソースコードモジュール(または他
のソースコードエンティティ)の中から、シンボル定義およびシンボルの使用を
決定する必要がある。シンボル決定が非常に大きく、プログラムプロジェクトの
全体に渡っているので、コンパイルされたコンピュータプログラムに対する大き
な変化がソースコードモジュールの変更、追加、または消去によって起こり、続
くプログラム全体の再構築が起こって新たなバージョンが作成される必要がある
。上述したように、プログラム全体の構築には、かなりの時間が掛かり、様々な
モジュール、ツール、ユーティリティ、および追加情報の正確なアーカイビング
、ブックキーピング、およびトラッキングを必要とする。
時の間に起こることを可能にする。DLLの基本的な方法は、ある特定のシンボ
ルが、実行において決定される、「エクスポート」(exported)または
「インポート」(imported)されたシンボルであると宣言することであ
る。シンボルを決定するコード(すなわち、各シンボリックリファレンスをシン
ボル定義に関連付ける)は、プログラム構築の間、それ自体がプログラムにリン
クされ、実行イメージ60の一部となる「DLLリンク」コードである。実行時
、DLLリンクコードは、実行されて、DLLに含まれるアイテムへのアクセス
を実行するプログラムに提供する。
くの関数、ルーチン、データ構造、または他のアイテムを含む。DLLの使用は
、実行可能イメージの実行の前にDLLの関数を変化させることによって、実行
の直前、または実行時に実行可能イメージの機能性を変更する方法を提供する。
例えば、DLLは、MicrosoftのDirectX libraryのよ
うなグラフィックスライブラリを含み得る。グラフィックスルーチンが変化する
場合、ユーザは、新たなDLLを入手する(例えば、CD ROM、インターネ
ットからダウンロード等)ことによって自身のDLLをアップデートし、次いで
アップデートされたDLLによって提供される、新たな機能性を利用する同じ実
行可能イメージを実行することができる。
LL内のいずれか1つのアイテムが実行可能イメージ内の命令によって参照され
る必要がある場合はいつも、DLL全体がロードされることである。DLL内の
アイテムをグループとして処理する必要性は、アップデートされるDLL内のア
イテムの割合が小さい場合、非効率的である。すなわち、ユーザは、変化したコ
ードを少量しか含まない、完全に新たなDLLを入手しなければならない。
ケーションプログラムにおける特定の準備を必要とすることである。図1Bを参
照すると、この準備は、プログラマがソースコード20のようなソースコードを
書くときに、最初に起こる。典型的には、プログラマは、コードの様々な部分で
DLLアイテムリファレンスを宣言する必要がある。また、特定のサポートファ
イルが、後で実際にリンクされるDLLアイテムへのリファレンスを決定するた
め、リンカー28によってリンクされる必要がある。オペレーティングシステム
ごとに異なるDLLを正確にインプリメントするためにさらなる準備をとる必要
がある。DLL使用の詳細の多くは、プログラマーによって作り出され、この点
において、後のプログラマが詳細を学ぶ必要がある。概して、DLLアプローチ
は、依然、小さい、選択的な機能の変化についてうまく作用しない「ライブラリ
」に基づくアプローチである。DLLと共に用いるアプリケーションプログラム
の準備の説明については、MicrosoftのWindows(登録商標)
95、Sun Micro Systems、およびSun OSのようなオペレーティング
システムを説明する参考文献を参照されたい。
が所望されることが明らかである。このようなシステムは、ユーザがDLLのよ
うな大きいファイルをアップデートする必要なく、実行の直前、または実行の間
のトランスペアレントで、かつ効率的な機能性の変更を可能にするべきである。
このようなシステムは、プログラマまたは他の開発者による複雑な準備またはオ
ーバーヘッドを必要とすることなく、一般的なアプリケーションプログラムが変
更されることも可能にするべきである。理想的には、システムは、アプリケーシ
ョンのプログラム変換に参加していない人が、アプリケーションプログラムの機
能性を素早く、かつ正確に変更することを可能にし得る。システムは、実行イメ
ージの機能性を変更する命令の効率的な実行を提供し、加えられた、または変化
した機能性に適応する大量のシステムRAMを必要としない。システムは、解釈
されたコードの簡略性および柔軟性を提供し、コンパイルされたコードによって
提供される実行の小型化および速度を維持する。
ボリックリファレンスをリダイレクト(redirection)に適するよう
にさせるシステムを提供する。リダイレクト可能なシンボルが提供されると、プ
ログラムの機能性は、後で、例えば、スタートアップ時、または実行時に容易に
変化され得る。
存在したコンピュータプログラムが変換され、シンボルがリダイレクトされ得る
段階である。また、この第1段階は、後の段階で用いられる補助ファイルを発生
する。第2段階は、変換されたコンピュータプログラムがユーザのコンピュータ
にロードされ、その上で実行される段階である。第3段階は、元のコンピュータ
プログラム機能性が改変される段階である。改変は、高いレベルで起こり、元の
プログラムのプログラミングに関わっていない人によって容易に行われ得る。改
変は、プログラマでない人が、コンピュータプログラムの機能性を変化させ得る
程度まで簡略化される。この第3段階は、第1段階において発生された補助ファ
イルを用いる。第4段階は、改変された機能性がエンドユーザのコンピュータに
ロードされ、変更されたプログラムと共に実行される段階である。
lkitを構成する1組のツール、ユーティリティールーチン、および工程が提
供されて、Microsoft Developer's Environme
ntにおいて本発明が実施される。
るために適切なシンボルを識別する。場合によっては、プログラムの全てのシン
ボルが、所望に応じて、リダイレクトが可能である。コンピュータプログラム命
令、データ、または他のアイテムを参照するシンボル名は、全て、リダイレクト
に対して準備され得る。第1段階のデフォルトの方法は、元のプログラムと同じ
様式で動作する元のプログラムの実行可能オブジェクトバージョンを提供する。
シンボルは、テーブルを通じてマッピングされ、所望の加えられたレベルのリダ
イレクトを提供し、そのことにより、リダイレクト能力を提供する。
イメージがユーザのコンピュータにおいて実行される。第2の段階の実行可能イ
メージの動作は、元の(変換されていない)ソースコードによって定義されるプ
ログラムの機能性と同じである。実際には、変換された実行可能オブジェクトは
、僅かに大きく、元のバージョンより僅かに遅く実行され得るが、この影響は、
通常、無視できる。
レクトされることを可能にする。従って、例えば、データイメージが、前のイメ
ージの代わりになり得、新たなサブルーチンまたは関数が、プログラムの実行に
挿入され得、元のサブルーチン内の命令が編集され得たりする。第3段階は、ユ
ーザのコンピュータにダウンロードされ得るファイルまたファイルのセットを生
成して、段階2の実行可能オブジェクトと共にメモリに常駐させる。これらのフ
ァイルは、「アドオン」モジュールと呼ばれる。
トアップ時か、または実行の間に、実行可能イメージに組み込まれる。本発明の
局面の1つは、シンボルのリダイレクトが変更され、従って機能性が変更される
様式を制御するように、言語の記入を提供する。本発明の他の局面は、上述の特
定の段階の各々の細部と関係し、シンボルのリダイレクトを容易にするテーブル
の使用、シンボルの自動識別、ならびにプログラムおよびアドオンモジュール構
築のために必要なコンパイルステップを達成する補助ファイルおよび中間ファイ
ルの発生が含まれる。
ブジェクトにコンピュータプログラムを変換する方法、コンピュータで実行する
方法、プロセッサ兼格納デバイスを有するコンピュータシステム、元の定義への
シンボリックリファレンスを有する元のコンピュータプログラムをさらに含むコ
ンピュータシステム、シンボリックリファレンスについてコンピュータプログラ
ムを走査するプロセスを実行する工程と、1つ以上のシンボリックリファレンス
について代わりのリファレンスを定義する工程と、1つ以上のシンボリックリフ
ァレンスと対応する代わりのリファレンスとの間にリンクを作成する工程と、コ
ンピュータプログラムにおいて代わりのリファレンスと元の定義との間にリンク
を作成する工程とを包含する方法。
発明における使用に適切な基本的なハードウェア(例えば、コンピュータ、サブ
システムおよびネットワーク等)について説明する。第2のセクションでは、本
発明の概要を提供する。第3のセクションでは、ランタイム改変(modifi
cation)能力用の初期プログラムを作成するためのツール、ユーティリテ
ィルーチンおよび他のプログラムの特定のセットについて説明する。第4のセク
ションでは、ランタイムにおいて改変された機能を提供するアドオンモジュール
を生成するプロセスについて説明する。第5のセクションにおいて、スクリプト
言語等を用いて、スタートアップまたはランタイム時のアイテムへのリファレン
ス(reference)を部分変更する方法について説明する。第6のセクシ
ョンにおいて、本発明の他の詳細および機能について説明する。
す。
ステム200を示す。キャビネット206は、標準的なコンピュータ構成要素(
例えば、ディスクドライブ、CDROMドライブ、表示アダプタ、ネットワーク
カード、ランダムアクセスメモリ(RAM)、中央処理装置(CPU)および他
の構成要素等)(図示せず)、サブシステムならびにデバイスを収容する。ユー
ザ入力デバイス(例えば、ボタン210を有するマウス208およびキーボード
212等)が図示されている。他のユーザ入力デバイス(例えば、トラックボー
ル、タッチスクリーン、デジタイジングタブレット(digitizing t
ablet)等)も使用可能である。このコンピュータシステムは一般的には、
本発明における使用に適した1つの種類のコンピュータシステム(例えば、デス
クトップコンピュータ)を例示したものに過ぎない。コンピュータは、多くの異
なるハードウェア構成要素で構成可能であり、様々なサイズおよび様式(例えば
、ラップトップ、パームトップ、ペントップ、メインフレーム等)で作成可能で
ある。本明細書に記載の処理を行うのに適切な任意のプラットフォームが、本発
明における使用に適切である。
るサブシステムを示す。
インターフェースをとる。このようなサブシステムは典型的には、コンピュータ
システム(例えば、図2Aのキャビネット206)に収容される。サブシステム
は、I/Oコントローラ222、システムメモリ(または「RAM」)224、
CPU226、表示アダプタ230、シリアルポート240、固定ディスク24
2、ネットワークインターフェースアダプタ244を含む。バス228を用いる
と、サブシステム間で各サブシステムがデータのやり取りを行うことが可能とな
り、また、最も重要なことに、各サブシステムがCPUとデータのやり取りを行
うことが可能となる。外部デバイスは、バス228上のサブシステムとインター
フェースをとることにより、バス228を介してCPUまたは他のサブシステム
と通信を行うことができる。したがって、モニタ246は表示アダプタ230に
接続し、相対(relative)ポインティングデバイス(例えば、マウス)
はシリアルポート240を通じて接続する。キーボード250等のいくつかのデ
バイスは、例えば割込みコントローラおよび関連付けられたレジスタを介して通
信を行うため、主データバスを用いずに直接的手段によってCPUと通信するこ
とができる。
ブシステムコンフィギュレーションが可能である。図2Bは、1つの適切なコン
フィギュレーションを例示したものに過ぎない。図2Bに示すもの以外のサブシ
ステム、構成要素またはデバイスの追加が可能である。図2Bに示すサブシステ
ムを全て使用しなくても、適切なコンピュータシステムが達成可能である。例え
ば、スタンドアロンコンピュータはネットワークに接続する必要がないため、ネ
ットワークインターフェース244は不要となる。他のサブシステム(例えば、
CDROMドライブ、グラフィックアクセラレータ等)が、本発明のシステムの
性能に影響を与えることなくコンフィギュレーションに組み込み可能である。
ている複数のローカルネットワークを含む。本明細書中、特定のネットワークプ
ロトコル、物理層、トポロジーおよび他のネットワークプロパティを提示するが
、本発明は、コンピュータシステム間でデータのやり取りを行う任意のスキーム
での使用に適切である。また、本発明は、ネットワークに接続されていないスタ
ンドアロンコンピュータにおいても実施可能である。
ク(例えば、イーサネット(登録商標)、非同期伝送モード(Asynchro
nous Transfer Mode)、IEEE規格1553のバス、モデ
ム接続、ユニバーサルシリアルバス等)によって為され得る。通信リンクは、有
線である必要はなく、赤外線、電波伝送等であり得る。サーバ1は、インターネ
ットに接続される。インターネットは、サーバルータ262の集合として象徴的
に図示されている。情報の配信または通信用にインターネットを用いることは、
本発明の実施にとって必ずしも必要ではなく、これは、単に以下の好適な実施形
態を説明するためだけに使用されるという点に留意されたい。また、サーバコン
ピュータの使用ならびにサーバ機器およびクライアント機器の指定は、本発明の
実施にとってそれほど重要ではない。ユーザ1のコンピュータは、インターネッ
トに直接接続可能である。サーバ1のインターネットへの接続は典型的には、比
較的高帯域の伝送媒体(例えば、ラインT1またはラインT3等)で為される。
いた他のコンピュータが264に示されている。264におけるコンピュータは
、サーバ2を介してインターネットに接続される。ユーザ3およびサーバ3はさ
らに第3の設備を示す。
全体における基本的工程を示すフローチャート100を示す。
ログラム変換段階であり、この段階では、既存のプログラム(例えば、アプリケ
ーションプログラム等)を変換して初期実行可能オブジェクトに組み込む。第2
の段階は初期実行段階であり、この段階では、初期実行可能オブジェクトをエン
ドユーザのコンピュータに転送し、そのオブジェクトをエンドユーザのコンピュ
ータで実行する。この段階では、プログラムは既に変換されているものの、プロ
グラムには改変された機能は未だ供給されていない点に留意されたい。すなわち
、この段階では、プログラムは未だオリジナルのソースコードによって規定され
たオリジナルの目的通りに実行する。第3の段階はアドオン開発段階であり、こ
の段階において、ソースコード中のアイテムを改変し、プログラムの初期構造か
らの情報を用いて新規モジュールを構築する。第4の段階はアドオン実行段階で
あり、この段階において、新規モジュールを、エンドユーザ機器に転送し、初期
実行可能オブジェクトに「フック」し、そして実行する。第4の段階において、
オリジナルの実行可能オブジェクトが新規モジュール中の機能にアクセスする様
式を制御することにより、スタートアップおよびランタイムの両方のダイナミッ
クな改変が達成される。
ルのアプリケーションプログラムを作成および実行する第1の段階を構成する。
プログラマが標準的な方法でプログラム(例えば、アプリケーションプログラム
等)を作成するサブ工程302が行われており、これによりシンボルリファレン
スのリダイレクトを提供できるように変換可能なプログラムが存在すると仮定す
る。好適な実施形態は既存のプログラムを変換するように設計されるが、プログ
ラムは、本発明のリダイレクトメカニズムのプログラムへの提供と同時に作成可
能である点に留意されたい。サブ工程304において、サブ工程302において
作成されたソースコードを本発明のソフトウェアルーチンによって処理し、ラン
タイムにおいて1つ以上のシンボルリファレンスのリダイレクトを提供する。図
3A中にサブ工程304として示すプロセスにおいて、補助ファイルを生成し、
これにより、その後のアドオン開発段階においてプログラムのランタイム動作を
改変するための新規モジュールの作成、コンパイルおよびリンク接続を支援する
。
結果生成されたプログラムをロードし、実行する。サブ工程306は本発明の初
期実行段階を示し、プログラムが自身のシンボルリファレンスを効率的にリダイ
レクトする手段を備える場合、初期プログラムを実行する。サブ工程306にお
いてロードされ、実行されるプログラムの動作は、サブ工程302において開発
されたソースコード仕様から作成された従来のプログラムの動作と同一である。
以下により詳細に説明するように、ランタイムにおいて本発明の様式でシンボル
リファレンスをリダイレクトすると、実行プログラムのサイズが少し増加し、実
行プログラムの実行時間も少し増加し得る。しかし、これらの増加は、ほとんど
の場合に無視できるほどのごくわずかなものである。また、これらの増加は、ラ
ンタイムの機能を完全に改変することができるコンパイルプログラムを有する利
点とのトレードオフである。
308、309および310を含む。
オリジナルのプログラムコードまたはデータの一部を改変する。以下に示すよう
に、本発明の利点は、サブ工程302を行うプログラマと異なるプログラマが、
サブ工程308を容易に行うことができる点である。オリジナルのプログラムを
改変するプログラマまたは他の人物は、従来のアプローチの場合に必要とされる
ようなオリジナルのプログラムについての設計、構造およびインプリメンテーシ
ョンについての深い知識を持っていなくてもよい。本発明の主要な利点は、デー
タ構造(例えば、画像、音声および映像等)の変更が非常に簡単である点である
。これらのアドオン開発段階のサブ工程は非常に簡単であるため、プログラムミ
ングの知識は不要であり、設計者または他の人物がこれらのサブ工程を達成する
ことができる。好適な実施形態ではプログラマによるオリジナルコードの改変を
想定しているが、アドオンコードをスクラッチから新規に開発することも可能で
ある。しかし、オリジナルのコードの作業部分から開始する方がより効率の良い
アプローチである場合が多い。サブ工程308において、既存のコードまたはデ
ータ構造を改変し、新規コードまたはデータ構造を導入し、既存のコードまたは
データ構造をディセーブルすること等ができる。
程310では、サブ工程304において生成された補助ファイルを用いて改変を
コンパイルする。サブ工程309はオプションのサブ工程であり、サブ工程30
9において、プログラマもしくは別の人物またはプロセスが、シンボルリファレ
ンスをリダイレクトする様式を規定する。通常は、アイテムの置換を簡単にする
ために、サブ工程309は、コンパイル中に呼び出されるルーチンによって自動
的に行われる。しかし、シンボルリダイレクトの発生様式への制御をより良好に
するために、プログラマは、スクリプト言語を生成および改変することによって
命令を手入力で提供し得る。この点について、以下のセクション5においてより
詳細に説明する。
ログラムのコンパイルバージョンを作成する場合に、使用されるモジュール全て
における全規定、リファレンスおよび他の構造を必要とする従来技術のほとんど
のアプローチと異なる。本発明のサブ工程310は、リンク接続に必要な(通常
は非常に多くの)シンボルリファレンスのいずれかを解明するよう機能する補助
ファイルを用いることにより、コード、データ等のごく一部をコンパイルするこ
とを可能にする。
では、ランタイムプログラムへの改変は、実行可能な命令、データ、リソース等
を含む改変された「新規モジュール」の形態であり、このランタイムプログラム
への改変は初期プログラムとして同じコンピュータにロードされていると仮定す
る。ローディングを同じコンピュータに行うと、実行速度が高速化することが確
実になる。しかし、プログラムの一部、データ、プロセスまたは他のアイテムを
ネットワーク中の異なる機器に配置および実行することができる。例えば、初期
実行可能オブジェクトがユーザ2の機器に常駐する新規モジュールにアクセスす
る間に、その初期実行可能オブジェクトはユーザ1のコンピュータ(図2C)上
で動作可能である。
グラムのシンボルリファレンスを改変して、新規モジュールによって提供される
新規アイテムを「指示(point)」させる。シンボルリファレンスのリダイ
レクトは、プログラムコードを実行する前のスタートアップ時に1回だけ行うか
、または、スクリプト命令を同時実行するメカニズム等のメカニズムを用いてプ
ログラムコードを実行するときにダイナミックに何回も行うことができ、これに
ついて以下のセクション5において説明する。
す。本発明の局面は、コンピュータプログラムの開発の間および実行の間のどち
らにでも発生する点に留意されたい。すなわち、サブ工程302、304、30
8、309および310は一般的には、コンピュータプログラムの開発と関連す
る。サブ工程306および312は一般的には、例えば市販のプログラムの購入
者またはライセンスを受けたコンピュータプログラムの「エンドユーザ」による
コンピュータプログラムの実行または末端使用と関連する。
点を提供する。コンピュータプログラムの開発者にとって、本発明は、オリジナ
ルのプログラマが、本発明を取り入れるために自身のプログラミングツール、環
境、方法論等を変更する必要なく、コンピュータプログラムを従来通りに開発す
ることを可能にする。実際、任意のコンパイルされたコンピュータプログラムは
本発明の利点の影響を受け易い。本発明は、既存のプログラムを改良してランタ
イムの改変が可能となった場合、コンピュータプログラムの既存のソースコード
が利用可能な状態(on−hand)であることさえも必要としない。本発明の
プロセスのいくつかの関数は、オブジェクトコードモジュールおよびコンパイラ
により生成されたファイル(例えば、シンボルテーブル)において行われるため
、オリジナルのソースコードを利用可能な状態にする必要はない。したがって、
例えば、ソースコードが利用不可能である場合、広範囲のリバースエンジニアリ
ングを行わずにデータ構造をプログラムにフックすることができる。
に適応可能である。サブ工程304は、オリジナルのプログラマ以外の人物によ
っても行うことができ、オリジナルのプログラムの詳細な知識が無くても行うこ
とができる。実際、サブ工程302、304および308〜310は、互いに影
響を受けることなく、かつ他のサブ工程のいずれかを行うために必要な詳細な知
識を実質的に必要とすることなく行うことができる。
何らかの特殊な工程を行うことを必要としない点である。サブ工程306では、
サブ工程304において生成された提供物(provision)に関係なく、
任意のプログラムと同様にプログラムをロードし、実行する。サブ工程312に
おいて、シンボルリファレンスのリダイレクトは全て、実行プログラムの一部ま
たは実行プログラムに従属するプログラムであるコードによって自動的に実行さ
れ、オペレーティングシステムによって開始され得、または、これは、エンドユ
ーザの介入を有するかあるいは有さない他の手段によって行われ得る。
サブ工程302(すなわち、プログラム作成動作)においてプログラマが書き得
る具体例を大幅に簡略化した例である。
的には、人間が読むことのできる形式のプログラムコードまたはデータを含む別
個のファイルに過ぎない。ファイルを別個にすると、プログラムの一部をワード
プロセッサにロードする点およびプログラムの一部を操作する点に関して、プロ
グラムの動作が容易になる。また、各モジュールは、関連の関数を実行するコー
ドの一部を論理的に含む。各モジュールは典型的には、そのモジュール内に内蔵
される関数、処理、データ等の種類を示す名称を有する。
む。このコードはCコンピュータ言語で書かれており、非常に単純な形式ではあ
るが、このアプリケーションにおいて以下に説明するような使用可能なオブジェ
クトモジュールを実際にコンパイルおよび生成する。
「シンボル」を用いることにより、コード構造およびデータ構造をリファレンス
する。シンボルは、プログラマが作業を行う際に論理的かつ容易に記憶可能な環
境を提供するよう選択される、英数字の名称に過ぎない。
るリファレンスを含む:「funct_B、」「string_ptr、」「f
unct_A」および「printf」。各リファレンス対象シンボルは、プロ
グラムを構成するモジュールの1つにおいて「規定」されなければならない。例
えば、シンボル「funct_A」は、シンボル「funct_A」をリファレ
ンスする同じモジュール(すなわち、Exampleモジュール)において規定
される。
ち、モジュールExample2)において規定される。このExampleに
おいて、シンボル「funct_A」および「funct_B」は、この場合は
何らかのアクションを全く行わない関数またはサブルーチンである。「func
tion_A」および「funct_B」に対するリファレンスを、モジュール
Exampleの5行目および6行目にそれぞれ示す。
。
されず、その代わり、このシンボルは、Cコンピュータ言語のインプリメンテー
ション全てを備える標準的ライブラリにおいて規定される関数である。通常は、
シンボルをリファレンスするモジュールの外部に規定を有するシンボルは、モジ
ュールの開始部分において「外部」シンボルとして宣言される。これは、モジュ
ールExampleの最初の2行にそれぞれ示すシンボル「func_B」およ
び「string_ptr」にも当てはまる。シンボル「printf」は、C
コンピュータ言語に対して暗黙であり、C「ライブラリ」によって指定されてい
るため、外部シンボルとして宣言されない。
ルされて、対応するオブジェクトファイルが生成される。例えば、モジュールE
xampleは、通常、「Example.c」または「Example.cc
p」の名前を有し、これらは、「Example.obj.」の名前を有するオ
ブジェクトモジュールにコンパイルされる。これらのモジュールは、「.lib
」拡張子を有するライブラリファイルと共に、リンカーを介してリンクされて、
ファイル名に「.exe」拡張子を有する実行可能オブジェクトまたは実行可能
イメージとしばしば呼ばれる単一の「実行可能な」ファイルを生成する。
「メモリマップ」の図を示す。図3Bは、従来の技術を用いて達成される、結果
として得られる実行可能オブジェクトの典型例であることに留意されたい。実行
可能オブジェクトおよびランタイムイメージを扱う本発明の局面の概観を提供す
るために、従来技術のメモリマップと並べて、本発明を用いて得られるメモリマ
ップを図3Cに示す。本発明を用いて得られるメモリマップは、後で説明する。
モジュールならびにさらなるスタートアップセクションに対応する5つの独立し
た領域を有する、実行可能オブジェクトを示す。
322、Exampleモジュールに対応するセクション324、Exampl
e2モジュールに対応するセクション326、Dataモジュールに対応するセ
クション328、およびライブラリルーチンに対応するセクション330を含む
。スタートアップセクション322については、ランタイムイメージ実行を参照
しつつ、後でより詳細に説明する。Exampleモジュールに対応するセクシ
ョン324は、W0、W1、W2等で示すワードの例(通常、それぞれ16ビッ
ト、32ビット、または64ビット)を含む。概して、コンピュータプログラム
内には、数千、数万、あるいは数百万以上のワードが含まれる。コンピュータプ
ログラムはまた、コンピュータプログラムのサイズに応じて、数十または数百の
モジュールを含み得る。
ドは、シンボル参照を実行するコンピュータマシン命令に対応する。そのような
ワードの例は、データ構造、命令の呼び出し(invocation)、サブル
ーチンへのジャンプまたはサブルーチンの呼び出し、トラップまたは例外、ある
いは任意の他の参照、フロー制御、または命令またはデータアイテムの使用に対
して、可変な名前または参照を使用することであり得る。
示し得る。シンボル「funct_A」についての規定はWN1と同じモジュー
ル内に存在するので、WN1〜WN5による参照は、Exampleモジュール
に対応する同じセクション324内の別のロケーションへの矢印によって示され
る。同様に、ワードWN2は、シンボル「funct_B」に対応する規定に対
する参照に対応する。「funct_B」についての規定はモジュールExam
ple2内に存在するので、図3Bは、WN2〜WN6までの参照を示す。ここ
で、WN6は、モジュールExample2に対応するセクション326内に存
在する。
名「printf」を有するライブラリ関数のアクセスまたは参照を示す。WN
4は、Dataモジュールに対応する、セクション128内のWN7において開
始される、規定された「string_ptr」への参照を実行する。
ケーションを識別する他の手段を用いる。アイテムへの参照を達成する任意の手
段が、本発明と共に使用するのに適している。
ジ340を示す。
ト120と同じセクションを含む。ランタイム時において、実行可能オブジェク
ト320はメモリ内にロードされ、固定されたアドレスが、実行プログラムによ
って使用され得る命令、データ、ならびに他のオブジェクトまたはアイテムに割
り当てられる。従来技術のデバイスの処理は、ダイナミックリンクライブラリ(
dynamically linked library)(DLL)342と
呼ばれることに留意されたい。スタートアップ時に、スタートアップセクション
344におけるスタートアップコードが、実際のプログラムにおける命令の実行
に先立って呼び出される。セクション344におけるスタートアップコードは、
DLL342をロードし、DLL342内のアイテムへの参照を解消することに
よって「ダイナミックにリンクする」ことを確立し得る。
、ロードされた情報のランタイムイメージ340との関連づけに対応する。ラン
タイムイメージ340内において、マシンワードWN8は、ロードされたDLL
のセクション348内のWN9において開始されるオブジェクトを参照する命令
である。例えば、WN8は、DLL342によって提供された関数への参照であ
り得る。それは参照されたアイテムが存在するDLL342のローディングより
も前に知られていないので、WN9への参照は、DLL342のローディングが
完了するまで確立され得ない。従来技術におけるDLLの使用は、オリジナルプ
ログラムのプログラマーが、参照されている関数が、ランタイム時にロードされ
るDLL内に存在することを明確に宣言(declare)することを要求する
。さらに、関数は、通常、所与のDLL内に存在する多くの関数のうちの1つで
ある。DLLに関する関数の集合体全体が、ランタイム時にロードされる。プロ
グラムのコード内の、DLL内のアイテムへの参照を解消することは、「暗黙の
」リンクを用いることにより、スタートアップ時またはランタイムの間に実行さ
れ得る。
を以下に提示して、本発明の実行可能オブジェクトおよびランタイムイメージ構
成がどのように異なるかを示す。
ト360は、表Iのソースコードによって説明したのと同じモジュールおよび関
数を実行する。参照の各々が実行可能オブジェクト360のメモリマップの下部
に示した表362を介することを除いては、従来技術の例における図3Bの実行
可能オブジェクト320においてと同様に、同じワードまたはアイテムの間の同
じ参照が、図3Cの実行可能オブジェクト360内に存在することに留意された
い。例えば、WN1は、従来技術の図3BにおいてWN5を直接参照するが、こ
こでは、表362内のエントリVF1を参照する。表362内のエントリVF1
は、次はWN5を参照する。この、実行可能オブジェクト360内の、シンボル
の「間接的な」または「一般化された」参照は、プログラム変換段階(Prog
ram Conversion Phase)内のプログラムを構築するために
使用される本発明のツールおよびユーティリティによって自動的に形成される。
プログラム変換段階および他の段階については、好適な実施形態の詳細な説明の
セクションにおいて後で説明する。
の対応が、本発明と従来技術との差を示すのと同様に、同じセクションを用いた
点で図3Eは図3Dに対応する。しかし、参照は表362を介しているので、シ
ンボル参照(symbolic reference)を所望のように恣意的に
変更して、ランタイム時に、コンパイルされたコードの関数を変更することが可
能である。
ptrへの参照に対応する)WN4からの参照は、本来はVF3からWN7にわ
たるものであったが、図3Eにおいては、VF3を介してWN9へ参照するよう
に示す。同様に、WN3からVF4を介したWN8への参照は、代わりの参照W
N7に修正されている。WN9で開始するオブジェクトは、ランタイム時におい
て追加され、表362を介したシンボル参照にリンクされたプログラムコード、
データ等であり得ることに留意されたい。図3Eの新たなモジュール364は、
最初のプログラムコードにおいて新たなモジュール364が参照されている必要
がない点で、図3CのDLL342とは異なる様態で振る舞う。言い換えると、
新たなモジュール364は、表Iに示すソースコード内に規定または宣言されて
いない「new_funct」等のシンボルを有し得る。
るように規定されたstring_ptr等の、修正、置換、または変更された
バージョンのオリジナルオブジェクトであり得る。この様態で、新たなオブジェ
クトが、オリジナルプログラム内のオリジナルオブジェクトと同じ名前で、置換
され得る。「ヌル(null)」関数を既存の関数と置換することにより、その
関数は効果的に除去され得る。例えば、ビットマップイメージにおける全てのデ
ータバイトを除去することにより、そのイメージは、効果的にオリジナルプログ
ラムから消去され得る。異なるイメージを置換し、オリジナルプログラム内の名
前と同じシンボル名を用いることにより、そのオリジナルイメージは、効果的に
置換される。新たなシンボルを、新たなモジュールからロードされた、新たに規
定されたオブジェクトについてのテーブルエントリとして提供することにより、
コンパイルされたプログラムのランタイムイメージにアイテムが追加され得る。
るのに非常に適している。DLLとは異なり、新たなモジュール364は、オリ
ジナルプログラムモジュールならびに後で説明する適切な補助ファイルが利用可
能である場合の環境についての詳細な知識無しで、コンパイルされ、リンクされ
得る。したがって、本発明のシステムで、コンパイルされたプログラムの関数を
変更することは、特にプログラマー、デザイナー、またはオリジナルプログラム
の詳細の全てに精通しているわけではない他の人にとって、かなり簡単である。
プログラムを修正するために、ランタイムイメージが既にローディングされてい
るかもしれないDLLを処理することに関する知識および準備は必要でない。こ
の様態で生成された新たなモジュールは、類似のDLLアプローチよりも大幅に
小さくなり得る。
を可能にする。つまり、本発明の一実施形態は、いつシンボル参照がリダイレク
トされる(redirect)かを特定する、解釈された制御言語を提供する。
そこで、例えば、ランタイムイメージ380の実行中における任意の時点におい
て、WN1からVF5を介してWN5への参照を、代わりにWN8を参照するよ
うに切り換え得る。そのような参照スイッチングは、(1)特定された時間間隔
の後、(2)特定の命令が実行される時、(3)割り込み(interrupt
)が受け取られる時、または(4)所定のユーザ入力信号が検出される時等の、
異なる基準に基づいて実行され得る。他の基準も可能である。コンピュータプロ
グラムまたは検出された信号の任意の条件または状態が、基準となり得る。
ソース等)にリダイレクトする、または「フック」しておくことが可能であるの
で、オリジナルプログラムは、その内部でさらなるプログラムの展開(deve
lopment)が起こり得る、単なるフレームワークとみなし得る。何処でど
のようにサブルーチンまたはデータ構造が使用されるか等、プログラムの広い上
位の設計(top−level design)のみが明らかになればよい。例
えば、コンピュータゲームプログラムにおいて、背景シーン内に広告イメージを
表示するデータ構造は、新たなイメージを含む新たなモジュールの1回のダウン
ロードによって更新され得る。新たな「アドオン」モジュールを構成するために
は、プログラムにおいて元々使用されたデータ構造のシンボル名を知ることが要
求されるだけである。既存のランタイムプログラム内に新たなイメージ(つまり
、アドオンモジュール)をフックするためにシステムによって提示されたオーバ
ーヘッドは無視できるので、「アドオン」モジュールサイズは、新たなイメージ
と実質的に同じサイズである。
ルサブルーチンまたは関数でフックされて、オリジナルのサブルーチンまたは関
数と置換され得る。この様態で、従来はパッチによって達成されたバグ訂正(b
ug fix)が、いっそう簡単に設計され、自動的且つ迅速に組み込まれる。
つまり、新たなサブルーチンを実行するために、ユーザの介入が必要でなく、且
つ、スタートアップ時に認知可能な遅延がない。ベースプログラムが同じであっ
ても、異なるユーザがそれぞれのマシン上で異なる関数を有するプログラムを実
行できるように、カスタマイズされたプログラムが可能である。例えば、音楽シ
ーケンシングプログラム(music sequencing program
)において、垂直タイムライン関数を有する新たなモジュールをダウンロードす
ることを選択したユーザについてのみ、水平タイムラインを表示するサブルーチ
ンを、垂直の様態にタイムラインを合わせる新たなモジュールと置換することが
できる。第三者のアドオン(add−on)は簡単な事項となり、ソフトウェア
の正規製造者とは異なる会社が関数を修正して、改良された、または単に異なる
だけの、ソフトウェア製品を提供することができる。
発明を説明するが、リダイレクトされるシンボルの数は自由に選択される。ある
プログラムについて、本発明の利点の多くが、シンボルのサブセットのみをリダ
イレクトすることにより達成され得る。しかし、プログラムを変換して全シンボ
ルのリダイレクトを提供することの利点は、任意の予測されないシンボルを、後
からリダイレクトすることができる点にある。
って開発された「DynaPlayTM」と呼ばれるシステムである。DynaP
layシステムは、後で説明する「dynaobj」、「dynamap」、お
よび「dynagen」等の実行可能ルーチンを含む、Software De
veloper’s Toolkit(SDK)を提供する。これらのルーチン
についてのソースコードは、これらのルーチンの動作ならびにそれらの正確な入
力要件および出力フォーマットについての完全な詳細について顧慮されるべき添
付されたソースコードAppendix内に含まれる。本明細書中に説明するス
テップを自動化するバッチ制御ファイルも、Appendix内に含まれる。詳
細には、「dynamize.bat」ファイルが「dynabat.bat」
を呼び出して、本発明のProgram Conversion Phase内
のステップを自動的に実行する。「dynamod.bat」が「dynaba
t2.bat」を呼び出して、本発明のAdd−On Development
Phase内のステップを実行する。
換して、プログラム内のシンボル参照をリダイレクトすることを提供するプロセ
ス(すなわち、図3Aのサブステップ304を実行すること)を、プログラムを
「ダイナマイズする(dynamizing)」と呼ぶ。サブステップ304を
実行した後、プログラムは、ランタイム時にそのシンボル参照を容易にリダイレ
クトし得るという点で、「ダイナマイズ」されていると言える。
成された新たなモジュールを、「ダイナモジュール」と呼ぶ。ダイナモジュール
は、図3Aのステップ308および310を実行した結果である。
seを示す。
的な変換を示す。Microsoft Corporationから市販されて
いるMicrosoft Developer’s Environment
version 4.7で開発されたHangman32.cppはC++言語
プログラムである。当然、本発明は、任意のコンピュータ言語、開発者環境(d
eveloper’s environment)、または動作システムに適用
可能である。この変換プロセスは、プログラムを「ダイナマイズする」と呼ばれ
る。Hangman32.cppプログラムをダイナマイズした後、ダイナマイ
ズされた実行可能オブジェクトは、「Hangman32.exe」として製造
される。ダイナマイズされた実行可能オブジェクト(executable)は
、ランタイム時にシンボルへのフッキングを提供することが存在する点を除いて
、ダイナマイズされていない実行可能オブジェクトとほぼ同じである。つまり、
プロセス、サブルーチン、関数、データ構造、およびリソース等のアイテムへの
シンボル参照を、ランタイム時にリダイレクトすることができる。ダイナマイズ
プロセスはまた、「Hangman32.vfs」および「Dynaplay.
lib」というファイルを生成する。これらのファイルはそれぞれ、ダイナマイ
ズされたプログラムを実行するため、ならびに、新たなアドオンモジュールまた
は「ダイナモジュール」を構築するために使用される。
示し、プロセスを楕円の中に示す。ステップ402におけるファイルHangm
an32.cppは、コンパイラ404によって処理されるソースコードファイ
ルである。コンパイラ404は、標準コンパイラであり得る。好適な実施形態に
おいて、コンパイラは、シンボル名を出力(.obj)ファイル内に挿入するこ
とに向けられている。これらのシンボル名は、以下に説明するように、後で置換
される。コンパイルプロセス(compilation process)の結
果は、ステップ406における「Hangman32.obj」というオブジェ
クトファイルである。本実施例は1つのモジュールおよびそれから得られる1つ
のオブジェクトファイルを用いるが、任意の数のモジュール、オブジェクトファ
イル、ライブラリ等が使用され得る。オブジェクトファイルは、任意の標準リン
カであり得るリンカ410に提出される。リンカは、全てのシンボルおよびそれ
らのシンボルを規定しかつ用いるモジュールのリストが、ステップ416におけ
るHangman32.mapファイル等のファイル内に生成されるように、.
mapファイルを生成するように向けられる必要がある。
。Dynamap.exeは、.mapファイル中のエントリを処理することに
より、422において、各シンボルが「エクスポート」された.defファイル
を作成する。Hangman32.cpp中の典型的なダイナマイズされる(d
ynamized)関数は、「OnGameNew()」関数である。この関数
は、ユーザが新しいゲームを選択するときに呼び出される。このように、関数の
後の改変を可能にすることは、例えば、新しいパラメータを初期化するために有
用である。Hangman32.mapファイル中のOnGameNew()の
エントリは、表IIに示す通りである。
Iに示されるように同じシンボルがEXPORTSセクションに現れる。表IV
は、.defファイル中のエントリのより大きな(それでも部分であるが)リス
トを示す。完全なリストは、数百個のエントリを含む。
プログラムプロジェクト中のいかなるモジュールに対してもこれらのシンボルが
外的に定義されているとシンボルへのリファレンスを扱うプロセスが仮定するこ
とを可能にすることによって、リダイレクトを受けるシンボルのさらなる構築を
セットアップしている。シンボルは、その強制された「エクスポート」指定とと
もに、構築物に用いられている他の標準的なファイルに伝播する。例えば、.d
efファイルは、標準的なライブラリマネージャであるライブラリマネージャ4
24に供給される。ライブラリマネージャは、アドオンダイナモジュールが作成
されるアドオン開発(Add−On Development)フェーズ(後述
)で後に用いられる補助的ファイルである、DynaPlay.libファイル
を生成するように指示される。ライブラリマネージャはまた、プログラムプロジ
ェクトのオブジェクトモジュールの第2のリンキングに用いられるDynapl
ay.expファイルを、428において生成する。
るプログラムを作成するために用いられる。これが最初の本当のリンクである。
なぜなら、リンカ410による第1のリンキングは、.mapファイルを生成す
るためのみに用いられたからである。第2のリンキングの前に、Dynaobj
.exe408は、プログラムの.objファイル(この場合Hangman3
2.obj)をDynaobj.exeへの入力として、実行される。これによ
り、.dbj拡張子を有する「ダイナマイズ」されたオブジェクトファイルが得
られる。
とは異なる改変シンボルを有する。すなわち、各オリジナルのシンボル定義の前
に「dyna_」が付されることにより、例えば「OnGameNew()」の
定義は、Hangman32.dbj内において「dyna_OnGameNe
w()」となる。.dbjファイルは、ランタイム時においてdynalib.
dllライブラリからルーチンを呼び出すためのコードを挿入する、Dynal
ib.objとリンクされる。これらのルーチンは、プログラム実行以前および
プログラム実行中の両方において、シンボルのリファレンシングのリダイレクト
を決定する。dynalib.dll内のルーチンは、セクション5において後
述される。
て作成される構造であるDynatab.objにリンクされる。Dynata
b.objは、間接的シンボルリファレンスを扱うためのテーブル構造を提供す
る。Dynatab.objは、リファレンスのシンボルとの関連付けに関する
バイナリ情報を含んでいる。これは.defファイルから作成される。このフォ
ーマットの詳細な説明に関しては、Dynaobj.exeプログラムのソース
コードAppendixを参照されたい。Dynatab.objは、最初の(
オリジナルの)シンボルと、新しいリネームされた「プロキシ」シンボルリファ
レンスとの間の関連付けを定義する、テーブル構造である。例えば図3Cおよび
3Eにおいてこれはテーブル362であり、ここでVF1は、マシン命令WN5
(オリジナルのシンボルのアドレス値)へのジャンプ命令のアドレス(すなわち
テーブルエントリまたは新しいシンボルのアドレス値)である。テーブルの正確
なフォーマットについては、Appendix中のDynaobj.exeのソ
ースコードを参照されたい。また、図3Cおよび3E中のメモリマップの下部に
テーブルを示しているが、テーブルは、システムRAM内のどこに位置していて
もよい。テーブルは、仮想メモリ、外部格納装置、ネットワークサーバ等上に位
置していてもよい。また、1つ以上のテーブルが存在してもよい。
に保持しながらシンボルリファレンスを改変することにより、同じシンボルイン
ダイレクション効果を達成することが可能である。すなわち、接頭辞「dyna
_」が、シンボル定義に対する各リファレンスに対して付加され得る。次に、テ
ーブルは、置換されたシンボルリファレンスを、オリジナルの名前を有する定義
と対応付ける。
。例えば、テーブルに代えて、コードのうち変更されるべきシンボルリファレン
スを有する部分へのポインタのリストを用い得る。こうすれば、2つのアドレス
フェッチの必要がなくなる。例えば、図3Cにおいて、WN1におけるマシン命
令がVF1にあるアドレスのフェッチを起こした後、ターゲット命令WN5のフ
ェッチが行われるという本アプローチは、WN5が実行され得る前に余分なアド
レスフェッチを起こしている。もし代わりに、WN1が直接WN5を指すことに
よりWN5を直接得ることができれば、プログラムの実行はより速くなる。その
場合テーブル362がWN1へのポインタを有することにより、WN1からWN
5へのリファレンスがリダイレクトされる必要がある場合にはWN1の値を改変
することにより実現可能である(これは、WN1が直接アドレスターゲット分岐
を含んでいることを前提としている)。しかしこのアプローチにおける欠点は、
WN5を元々アクセスするプログラム中の各位置に対して、ポインタが存在して
いなければならないことである。本アプローチでは、単一のテーブルエントリを
、任意のシンボルに対する以前のリファレンスの全てをリダイレクトするように
変更することのみを必要とする。
ay.exp428中のオリジナルのシンボル名を用いて解決する。図4のリン
カ418によりおこなわれるリンク動作の結果は、Hangman32.exe
という実行可能物426である。この実行可能物は、図3Cのテーブル362な
どのデータ構造を介してシンボルリファレンスがリダイレクトされるようになっ
たという意味において、図3Cの構造と同様な構造を有している。
るHangman32.exe上で実行されることにより、Hangman32
.vfsが作成される。.vfsファイルは、「仮想ファイルシステム(vir
tual file system)」の一部である。このファイルは、ランタ
イムにおいてシンボルリファレンスを満たすためにどのモジュール、関数、プロ
セス、データ構造などが用いられるかを指定するために、用いられる。システム
のこれらの特徴を以下により詳細に説明する。
、「送達可能な」ファイルが作成される。好適な実施形態においては、送達可能
なファイルは、解凍されて実行可能オブジェクトhangman32.exe;
仮想ファイルシステムファイル、hangman32.vfs;およびダイナミ
ックリンクされたライブラリdynalib.dllとなる、圧縮ファイルであ
る。ユーザのマシン内におけるこれらのファイルの所在を、図6Aにおいてファ
イル556、558および560としてそれぞれ示している。好適な実施形態に
おいて、送達可能なファイルは拡張子「.dyp」を有する。ユーザは、.dy
pファイルを解凍し、「dynainstall.exe」プログラム(解凍フ
ァイルとして提供される)を実行し、インストールされたプログラムを実行する
ことにより、ファイルをインストールしなければならない。ユーザは、プログラ
ムのダイナマイズされたバージョンを、標準的な方法でロードして実行すること
かできる(すなわち、実行可能物に対応付けられたアイコンをクリックして、W
indows(登録商標)95において実行可能物の名前を指定することにより
)。
るプロセスを示している。この図は図3Aのステップ306をより詳細にしたも
のである。この場合ユーザは、アドオンモジュール(後述)なしで、オリジナル
のアプリケーションプログラムのダイナマイズされたバージョンを実行している
。したがって、シンボルリファレンスにはリダイレクトが提供されているが、全
てのシンボルは、アプリケーションの元々のプログラマが考えた通りの本来意図
されたアイテムへ、対応している。すなわち、プログラムのランタイム機能はま
だ改変されていない。
、ローダ554によってユーザのマシンのシステムRAMにロードされる。実行
イメージ556は、オリジナルのシンボルリファレンスとオリジナルのアイテム
定義との間に対応付けがなされる領域としての、ダイナマップ領域562を含む
。実行イメージ556の開始時において、dynalib.dll558内のル
ーチンが呼び出されて、Hangman32.vfs560内のプロシージャお
よびデータにアクセスする。.vfsファイル内のこれらのルーチンおよびデー
タは、実行イメージ556内のリファレンスを、ダイナテーブル562の値を変
更することによって、どのようにリダイレクトするかを指定する。ただし、これ
はアドオンモジュールを有さないプログラムのダイナマイズされたオリジナルの
バージョンであるため、ダイナテーブルに変更は加えられない。.vfsファイ
ルが処理された後、実行イメージ556は、オリジナルのソースコードで指定さ
れた通りの機能を、ユーザのマシンにおいて提供する。シンボルリファレンスリ
ンクの一例として、実行イメージ556がポインタW1を介してシンボルをリフ
ァレンスしている例を示している。W1は、実行イメージ556内のある1つの
アイテム定義を指している。
にダイナマイズされると、図3Aのステップ306に示すようにプログラムはロ
ードされて実行され得る。プログラムは、元々設計された通りに振る舞う。すな
わち、ダイナマイズされたプログラムは、プログラムがダイナマイズされなかっ
たかのように同じ機能を実行する。しかし、シンボルリファレンスがリダイレク
トされているので、各リファレンスの実行は、プログラムの元々のダイナマイズ
されていないバージョンにおけるより遅くなり得る。リファレンスが遅くならな
い場合は、リダイレクトされたアクセスの実行が実行時間を増加させないような
プロセッサにおける場合である。これは、パイプライン化プロセッサ、最適化さ
れたキャッシングを有するプロセッサなどの場合にそうであり得る。また、シン
ボルアクセスがそもそも間接的な手段による場合(例えばオリジナルのソースコ
ードにおけるサブルーチンへのポインタを介してサブルーチンを呼び出すなど)
、シンボルリファレンスをダイナマイズすることは、シンボルアクセスのオーバ
ヘッドを増大させない。
提供するダイナテーブルを保持するために余分な格納領域が必要である点におい
て、非ダイナマイズバージョンとは異なる。テーブルのサイズは、ダイナマイズ
されるシンボルの数に依存する。例えば、全てのシンボルがダイナマイズされる
ことを防ぐための「#dyna−on」および「#dyna−off」のような
コンパイラ指示が、プログラマに提供され得る。後述の補助ファイルもまた、プ
ログラムのランタイム改変を達成するためのオーバヘッドを増大させる。しかし
、サイズおよびスピードの影響は通常無視し得るものである。容易に改変可能な
実行可能物を有することの利点は、典型的には、あったとしてもわずかな実行可
能物のサイズの増加、ファイル数の増加、および実行時間の増加(大部分のアプ
リケーションにおいてユーザにはまったく感知され得ない)を、はるかにしのぐ
ものである。
している。アドオン開発フェーズは、改変された実行可能オブジェクト情報を、
ランタイム時においてオリジナルのプログラムにリンクするためのDLL形式で
、生成する。アドオン開発フェーズはまた、ランタイム時またはその直前におい
て、シンボルリンクがどのようにリダイレクトされるかを決定する、補助ファイ
ルを生成する。基本的に、ランタイム機能の改変は、オリジナルのプログラム内
で定義されたアイテム(すなわち、実行可能コード、データ構造など)に異なる
定義を代入することによって得られる。
のソースコードモジュールを改変することにより、改変されたソースコードモジ
ュール502を生成する。プログラマはオリジナルのソースコードモジュールか
ら開始する必要はないが、全てのシンボルリファレンスおよびプログラム構造が
既に存在しているため、実際はそうした方がオリジナルのプログラムの改変が容
易になる。改変は、関数、プロセス、データ構造などの新しいアイテムを含み得
る。改変はまた、既存のアイテムの削除も含み得るが、削除する場合は、関数を
「スタブアウト(stub out)」するのが最もよい。すなわちある構造か
ら、その構造またはリソースの「ダミー」シンボル定義をそのまま残しながら、
全てのデータを除去することにより、その構造またはリソースへのリファレンス
の全てを削除する必要がないようにする。シンボル定義を残しておくことで、削
除されたアイテムに後でデータを容易に足し戻すことが可能である。
パイルされる。コンパイルは、プログラムの改変された部分以上に対して行われ
得ることに留意されたい。なぜなら、プログラムの改変された部分を含むモジュ
ールは、ソースコードのうち他の改変されていない部分を含み得るからである。
ライブラリ定義512とリンクする。ライブラリ定義512は、図4のファイル
430と同じファイルである。このファイルは、改変されたモジュールのリンキ
ングが、シンボルリファレンスエラーなしでなされ得るように、オリジナルのア
プリケーションプログラム中のシンボルのためのシンボル定義の全てを提供する
。リンクの結果は、ランタイム時においてオリジナルのプログラムにフックされ
るべき新しいアイテムを含むDLLである、dynaplay.dllとなる。
るが、本発明の.dllは、従来技術における.dll形式および用途とは大き
く異なっている。本明細書に記載したように、本発明におけるプログラムの機能
の変更は、ランタイムプログラムに存在するテーブル内のシンボルリファレンス
を介して行われる。旧来のDLLは、DLL機能にアクセスするためにAPIル
ーチンの使用を必要とするが、これは、旧来のDLLアプローチにおいて、サイ
ズおよび動作オーバーヘッドを導入するものである。DLLライブラリとともに
APIインターフェースを運ばなければならず、これは、機能を変更するための
少量の新しいコードまたはデータを導入するための媒体としては、非効率的なも
のとなってしまう。APIインターフェースを用いることはまた、DLLルーチ
ンとやりとりするためにはインターフェースルーチンが実行されなければならな
いため、プログラムの実行を遅めてしまう。APIルーチンを使用することをア
プリケーションプログラムに要求することはまた、本発明のアプローチによって
提供される機能変更のタイプよりも、機能変更のタイプを減少させることになる
。
含む、dynaplay.map514を生成する。Dynaplay.map
は、図4のdynamap.exe420によってhangman32.def
ファイルが生成されたのと同様にして.defファイル518を生成する、dy
namap.exeへの入力である。ダイナモジュールからの.defファイル
の一例を、下記の表Vに示す。
xe520への入力として用いられる。.vfsファイルは、ランタイム時また
はランタイム以前にどのようにシンボルリファレンスをリダイレクトするかに関
する情報を含んでいる。.vfsファイルの機能はより詳細に後述される。
シンにロードされた後、ダイナマイズされたプログラムの機能の改変は、ダイナ
マップテーブルにおけるシンボルリファレンスリンクを変更することにより、制
御される。
変を示す。上記したように、図6Aは、アドオンダイナモジュールがない状態で
初期動作を行うときの、ダイナマイズされたプログラムを示す。図6Bは、ダイ
ナマイズされたプログラムであって、リンクのリダイレクトによって、リンクに
関連づけられたシンボルがダイナモジュール、すなわち、Hangman32.
vfsファイル内のアイテムを参照する、ダイナマイズされたプログラムを示す
。
たプログラムをすでに有しているユーザによって、受け取られる。たとえば、ユ
ーザは、2つのキャラクタ間の戦いをシミュレートするコンピュータゲームを獲
得し得る。その場合、ゲームの送達可能ファイル(たとえば、図6Aの送達可能
ファイル564)が、インターネットサイトまたはCD−ROMディスクなどか
らダウンロードすることにより得られる、ゲームのダイナマイズされたバージョ
ンが得られ得る。ユーザは、上記セクション3に記載したように、ゲームをイン
ストールし、ロードし、実行する。ゲームは、キャラクタおよびシーンの背景の
ためのアートワーク、キャラクタの戦いの動きを動画化するプロセス、ユーザか
らの入力を受け取ってキャラクタを制御するプロセス、ならびにスコアをとるプ
ロセスなどを含む、すべての機能を備えたスタンドアローン型プログラムである
。数ヶ月後、オリジナルゲームの製造者(または別の製造者)がオリジナルゲー
ムに特徴を追加することを決定する。たとえば、新しい戦闘キャラクタが追加さ
れ、背景シーンの掲示板の広告が変更される。製造者は、送達可能ファイル58
2という形態でアドオンダイナモジュールを提供することにより、これを行う。
4およびhangman32.vfs586を置換する。通常、新しいダイナモ
ジュールをインプリメントするためには、.vfsファイルのみを置換する必要
がある。しかし、dynalib.dllをアップグレードするために、これも
置換され得る。従って、機能を追加するためのダウンロードサイズは、通常、ち
ょうど、変更されるアイテムのサイズである。これは、プログラム全体が数10
メガバイトであるのに比べて、数10キロバイトのオーダーであり得る。次回、
実行可能オブジェクト552によって表されるゲームがローダ554によってロ
ードされて実行イメージ556として実行されるとき、アイテムリファレンスは
、新しい戦闘キャラクタをインプリメントするプロセスが呼び出され、かつ、新
しい広告画像をインプリメントするデータ構造およびプロセスがアクセスされる
ように、リダイレクトされる。シンボルリファレンスリンクの実際の変更は、ダ
イナモジュールを実行することに関して図6Aに示したものと同一である。しか
し、今回は、新しいアイテムが参照されるように、リンクが実際に置換される。
従って、図6Bは、この時点でhangman32.vfsファイル586内の
アイテムを指し示しているダイナテーブル内のW1を介したリファレンスを示す
。このことは、W1を介してマッピングされたすべてのリファレンスがこの時点
で、hangman32.vfs内のダイナモジュール内に設けられたアイテム
にアクセスすることを意味する。
らのオブジェクトが生成されるかを示す。
20とSCHEMEスクリプト608とを、.exeまたは.dllファイル6
02および.defファイル604から生成する。これらのファイルはすべて、
SCHEMEスクリプトを除いて、上記に詳細に説明されている。アイテム定義
は、.vfsファイルの一部となる、実行可能なバイナリの命令、データ、また
は他の情報である。これらは、ランタイム時に、リファレンスがリダイレクトさ
れる先の定義である。dynagen.exeプロセスの入力および出力の詳細
に関しては、ソースコードAppendixのdynagenリストを参照され
たい。
うために、アプリケーションプログラムのランタイム時に、解釈され得るソース
コードファイルである。すなわち、SCHEMEスクリプトは、図6B内のダイ
ナテーブル562などのダイナテーブル内のポインタをスワップまたはリダイレ
クトする様式を制御する。好適な実施形態は、言語を規定するパブリックドメイ
ンSCHEMEスクリプトインタープリタを用いる。任意の適切なスクリプト言
語、または他の制御メカニズムが用いられ得る。いずれの言語も用いることがで
きるため、シンボルリファレンスのスワッピングまたはリダイレクトを制御する
特定のメカニズムには選択の余地がある。たとえば、この言語は、スワッピング
を行うためにマシンコードを用いる場合のように、人間にとって読取り可能な言
語である必要さえない。しかし、人間にとって読取り可能な、フレキシブルなス
クリプト言語を、メカニズムとして提供することは、以下に述べるように有利で
ある。
グラム以外のソースから提供され得る。たとえば、SCHEMEスクリプト61
0は、人間のプログラマによって手動で作成され得るし、すでに存在するファイ
ルであり得るし、第三者などによって自動的にまたは手動で作成され得る。SC
HEMEスクリプトは、スクリプトインタープリタに提供され、スクリプトイン
タープリタは、スクリプトの、「中間言語」バージョンを生成するように命令さ
れる。典型的には、このような中間言語は、スクリプトの、人間にとって読取り
可能な形態と等価であるが、よりコンパクトであり、コンピュータプロセスが読
取りかつ実行するにより容易である。中間言語は、バイナリ命令同様、人間にと
って容易に読取り可能ではない。
26として、インタープリタ622のインスタンスと共に含まれる。ランタイム
時には、実行可能イメージが起動されると、dynaplay.dllルーチン
「DllMain()」を呼び出すことにより、SCHEME中間言語ファイル
が解釈されて、リファレンスのリダイレクトが処理される。
の一例である。
「enable−dynamod」の関数呼び出しを表す。リンクされるダイナ
モジュールのファイル位置は、「selfandheat.dll」として65
2で特定される。ダイナモジュールにアクセスする実行可能物は、「net_f
ighter.exe」として654で特定される。それに続く数字対のそれぞ
れは、新しいアドレス位置によって置換される、ダイナモジュール内のインデッ
クスを指定する。これらは、実行可能物用(net_fighter.exe)
の.defファイルおよびダイナモジュール(selfhandheat.dl
l)用の.defファイルに対応する。
テーブルIVを、実行可能物からの(部分)テーブルとして用いることにより、
図8のSCHEMEスクリプトファイル内の対(84.#x1000)は、イン
デックス84を有する実行可能物内のシンボルDrawGameが.dll内の
16進数1000のアドレスにマッピングされることを特定する。テーブルVは
、同一の名前であるDrawGameによる新しい手続きのアドレスがこうして
アクセスされることを示す。
られるため、リファレンスの多様な組み合わせのスワッピングをすることが可能
である。たとえば、図8のスクリプトは、特定のファイルが存在する場合に、あ
るいは1日のうちのある時刻に、あるいは1ヶ月のうちのある日より後に、ある
いはインターネットからの条件がチェックされた時などに、リファレンスのスワ
ッピングが起こるように、改変され得る。このようにして、ユーザが追加料金を
支払っているか否か、期限がすぎているか否か、関係するプレーヤの数、などに
依存して、プログラムの特徴がオンまたはオフされ得る。このことにより、プロ
グラムは、ユーザの興味に適合する、スポンサの順番が回ってきたときに変更さ
れる、などというようにカスタマイズされた、広告などの情報のためのフレキシ
ブルな媒体となる。本発明は、ダウンロードされ得、かつ、既存のダイナマイズ
されたコンピュータプログラムに組み込まれ得る非常に小さいダイナモジュール
を介して、このフレキシビリティをすべて提供する。さらに本発明は、いずれの
既存のプログラムもが、専門的作業をほとんど必要とすることなくダイナマイズ
されることを可能にする。
ルチスレッド環境において、スクリプト命令は、オリジナルのコンピュータプロ
グラムおよびダイナモジュールによって提供される命令の実行と「同時に」実行
され得る。このことにより、フレキシビリティが増加し、たとえば、ユーザの入
力、リアルタイムクロック、このプログラムまたは他のプログラムを実行した結
果起こる状況などに基づいてリファレンスが変更されるようになる。
べてが人間にとって読取り不可能であるということである。アイテム定義620
は、SCHEMEインタープリタ622同様、バイナリ形式である。SCHEM
E中間言語ファイルもまた、読取り不可能である。なぜなら、人間にとって読取
り可能なスクリプトからコンピュータ読取り可能な中間言語を引き出すように予
備処理されているからである。従って、.vfsファイルは、製造者にセキュリ
ティを提供して、ユーザのプログラムの「ハッキング」を防止し、かつ、他の製
造者が、たとえばライセンスなどで許可されない限り、オリジナルの製造者の製
品と共に用いられるアドオンモジュールを製造することを防止する。
ルに対するリファレンスが.vfsファイル内のリファレンスに限定されている
ことである。このことは、たとえば、SCHEME命令のエラーが、ユーザ機器
上のファイルまたは他の情報またはデバイスを害することを防止する。
とが明らかであるはずである。たとえば、.vfsファイルフォーマットは広範
囲に変更され得る。.vfsファイルは、ユーザが通常はその存在を知らない隠
しファイルであり得る。インタープリタは.vfsファイル内に存在する必要は
なく、dynaplay.dllライブラリ、異なるライブラリ、プログラムま
たは他のエンティティの一部であり得る。概して、本発明によって述べた処理は
、任意の数のプロセス、プログラム、またはルーチンによっても実行され得、本
明細書に述べたように、任意の適切なプラットフォーム上の機能を実行すること
により達成され得る。従って、本明細書における実施形態は、本発明の説明のみ
のために提供され、本発明の範囲は添付の請求の範囲によってのみ限定される。
ある。
略図である。
る。
図である。
する図である。
けるサブシステムを示す図である。
アプローチの基本的な工程を示すフローチャートである。
zed)プログラムを実行するプロセスを示す図である。
ule)を実行するプロセスを示す図である。
クトがどのように発生されるかを示す図である。
Claims (13)
- 【請求項1】 コンピュータプログラムを、ランタイム時にリダイレクトさ
れ得るシンボルリファレンスを有する実行可能オブジェクトに変換する方法であ
って、プロセッサ兼格納デバイスを含み、オリジナルの名前を有するオリジナル
の定義に対するシンボルリファレンスを有するコンピュータプログラムをさらに
含むコンピュータシステム上で実行される、方法であって、 1以上の該オリジナルの名前を識別する工程と、 該コンピュータプログラム内で用いられる1以上の該オリジナルの名前を新し
い名前に再ネーミングする工程と、 該オリジナルの名前に対するシンボルリファレンスが該新しい名前に対するリ
ファレンスを呼び出すように、該オリジナルの名前と該新しい名前との関連づけ
を作成する工程と、 を含む、方法。 - 【請求項2】 前記関連づけに関する情報をテーブルフォーマットで格納す
る工程をさらに含む、請求項1に記載の方法。 - 【請求項3】 シンボルリファレンスに、前記テーブル内のエントリを参照
させる工程と、 該オリジナルの定義へのポインタを該エントリに関連づける工程と、 をさらに含む、請求項2に記載の方法。 - 【請求項4】 前記コンピュータプログラムをコンパイルするためにコンパ
イラが用いられ、 該コンパイラによって生成された情報を用いて、該コンピュータプログラム内
のオリジナルの名前を識別する前記工程を実行する工程をさらに含む、請求項1
に記載の方法。 - 【請求項5】 前記シンボルリファレンスが、データ構造に対するものであ
る、請求項1に記載の方法。 - 【請求項6】 前記シンボルリファレンスが、プログラム命令に対するもの
である、請求項1に記載の方法。 - 【請求項7】 前記シンボルリファレンスが、リソースに対するものである
、請求項1に記載の方法。 - 【請求項8】 前記シンボルリファレンスが、オブジェクトに対するもので
ある、請求項1に記載の方法。 - 【請求項9】 前記コンピュータプログラムをコンパイルするために、Mi
crosoft Developer’s Environmentが用いられ
、該Microsoft Developer’s Environmentが
、該コンピュータプログラム内のシンボルリファレンスに関する情報を生成する
ユーティリティを含み、 1以上のファイルからの情報を用いて、前記オリジナルの名前に関する情報を
含む1以上の補助ファイルを生成する工程と、 該補助ファイルを用いて、該コンピュータプログラムと共に実行されるアドオ
ンモジュールをコンパイルする工程と、 をさらに含む、請求項1に記載の方法。 - 【請求項10】 Microsoft Developer’s Envi
ronmentが、.mapファイルを生成するリンカを用いることにより、前
記コンピュータプログラムをコンパイルし、 1以上のファイルからの情報を用いて補助ファイルを生成する前記工程が、該
.mapファイルを用いて、該補助ファイルの少なくとも一部として含まれる.
defファイルを引き出すサブ工程を含む、請求項1に記載の方法。 - 【請求項11】 コンピュータプログラム内で用いられる1以上のシンボル
リファレンスに対する代替リファレンスを有する機能を、該コンピュータプログ
ラム内でランタイム時に改変する方法であって、プロセッサ兼格納デバイスを含
むコンピュータシステム上で実行される方法であって、 該コンピュータプログラムを該コンピュータシステムにロードする工程と、 アイテム定義を含むモジュールを該コンピュータシステムにロードする工程と
、 該代替リファレンスを該アイテム定義に関連づけるプロセスを実行する工程と
、 を含む、方法。 - 【請求項12】 スクリプト言語命令を実行することによって、前記代替リ
ファレンスを前記アイテム定義に関連づける工程をさらに含む、請求項11に記
載の方法。 - 【請求項13】 前記コンピュータプログラムの実行中に、同時にスクリプ
ト言語命令を実行することによって、前記代替リファレンスを前記アイテム定義
に関連づけ、それにより、前記関連づけを制御する工程をさらに含む、請求項1
1に記載の方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/183,797 | 1998-10-30 | ||
US09/183,797 US6298481B1 (en) | 1998-10-30 | 1998-10-30 | System for modifying the functionality of compiled computer code at run-time |
PCT/US1999/025742 WO2000026780A1 (en) | 1998-10-30 | 1999-10-29 | System for modifying the functionality of compiled computer code at run-time |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2002529812A true JP2002529812A (ja) | 2002-09-10 |
Family
ID=22674329
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000580089A Pending JP2002529812A (ja) | 1998-10-30 | 1999-10-29 | 実行時にコンパイルされたコンピュータコードの機能を改変するためのシステム |
Country Status (4)
Country | Link |
---|---|
US (2) | US6298481B1 (ja) |
JP (1) | JP2002529812A (ja) |
AU (1) | AU1519100A (ja) |
WO (1) | WO2000026780A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012010344A (ja) * | 2011-07-13 | 2012-01-12 | Fujifilm Corp | 画像処理装置、方法およびプログラム |
Families Citing this family (93)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5553864A (en) | 1992-05-22 | 1996-09-10 | Sitrick; David H. | User image integration into audiovisual presentation system and methodology |
US5987257A (en) * | 1995-10-27 | 1999-11-16 | Microsoft Corporation | Metafile optimization |
US6298481B1 (en) * | 1998-10-30 | 2001-10-02 | Segasoft, Inc. | System for modifying the functionality of compiled computer code at run-time |
US20020073398A1 (en) * | 1998-12-14 | 2002-06-13 | Jeffrey L. Tinker | Method and system for modifying executable code to add additional functionality |
US6536039B2 (en) * | 1998-12-24 | 2003-03-18 | Avaya Technology Corp. | Software for seamless interconnectivity between active program modules on integrated arrangement of CD drive, data server, and PC hard disk drive |
US6513153B1 (en) * | 1999-03-03 | 2003-01-28 | Cisco Technology, Inc. | Automatically integrating and executing application software modules |
US6442752B1 (en) * | 1999-08-26 | 2002-08-27 | Unisys Corporation | Method, apparatus, and computer program product for replacing a dynamic link library (dll) of a first computing environment with a dll of a second computing environment that can be invoked from the first computing environment in a transparent manner |
JP3655152B2 (ja) * | 1999-11-29 | 2005-06-02 | 富士通株式会社 | ソフトウェア編集装置及び記憶媒体 |
US7216332B2 (en) * | 2000-02-14 | 2007-05-08 | Arm Limited | Software object library selection |
US7043715B1 (en) * | 2000-06-06 | 2006-05-09 | Emc Corporation | Method and apparatus for customizing software |
US6829760B1 (en) * | 2000-08-22 | 2004-12-07 | International Business Machines Corporation | Runtime symbol table for computer programs |
US8479189B2 (en) | 2000-11-17 | 2013-07-02 | Hewlett-Packard Development Company, L.P. | Pattern detection preprocessor in an electronic device update generation system |
US7409685B2 (en) | 2002-04-12 | 2008-08-05 | Hewlett-Packard Development Company, L.P. | Initialization and update of software and/or firmware in electronic devices |
US7827488B2 (en) | 2000-11-27 | 2010-11-02 | Sitrick David H | Image tracking and substitution system and methodology for audio-visual presentations |
US6748585B2 (en) * | 2000-11-29 | 2004-06-08 | Microsoft Corporation | Computer programming language pronouns |
US7290243B1 (en) * | 2001-02-28 | 2007-10-30 | Apple Inc. | Method and apparatus for application building using build styles |
EP1243998B1 (en) * | 2001-03-21 | 2017-04-19 | Excalibur IP, LLC | A technique for license management and online software license enforcement |
US6918110B2 (en) * | 2001-04-11 | 2005-07-12 | Hewlett-Packard Development Company, L.P. | Dynamic instrumentation of an executable program by means of causing a breakpoint at the entry point of a function and providing instrumentation code |
US6907610B2 (en) * | 2001-06-15 | 2005-06-14 | Microsoft Corporation | System and method for building a target operating system from a source operating system |
US20090106353A1 (en) * | 2001-09-19 | 2009-04-23 | Belovich Steven G | Method and system for providing an event auditing client server software arrangement |
EP1442368A4 (en) * | 2001-09-19 | 2006-05-10 | Steven G Belovich | METHOD AND SYSTEM FOR PROVIDING A VIRUS IMMUNE BASED ON RULES |
US20030120938A1 (en) * | 2001-11-27 | 2003-06-26 | Miki Mullor | Method of securing software against reverse engineering |
US20030120707A1 (en) * | 2001-12-21 | 2003-06-26 | Sander Bogdan | Systems and methods for exporting functionality of a modularized system |
US8769517B2 (en) | 2002-03-15 | 2014-07-01 | International Business Machines Corporation | Generating a common symbol table for symbols of independent applications |
US20030177419A1 (en) * | 2002-03-15 | 2003-09-18 | International Business Machines Corporation | Facilitating the debugging of applications by employing user defined or redefined symbols |
US7043721B2 (en) * | 2002-03-18 | 2006-05-09 | International Business Machines Corporation | Initial object capacity determination |
US7555750B1 (en) * | 2002-08-22 | 2009-06-30 | Hewlett-Packard Development Company, L.P. | Update package generator employing partial predictive mapping techniques for generating update packages for mobile handsets |
US7171650B2 (en) | 2002-08-23 | 2007-01-30 | Sbc Properties, L.P. | System and method for integrating resources in a network |
US7076774B2 (en) * | 2002-09-10 | 2006-07-11 | Microsoft Corporation | Infrastructure for generating a downloadable, secure runtime binary image for a secondary processor |
US7104889B2 (en) * | 2002-09-13 | 2006-09-12 | Igt | Method of using a rule based script to describe gaming machine payout |
US7062755B2 (en) * | 2002-10-16 | 2006-06-13 | Hewlett-Packard Development Company, L.P. | Recovering from compilation errors in a dynamic compilation environment |
US20040123308A1 (en) * | 2002-12-20 | 2004-06-24 | Siemens Information And Communication Networks, Inc. | Hybird of implicit and explicit linkage of windows dynamic link labraries |
US20050075155A1 (en) * | 2003-01-30 | 2005-04-07 | David Sitrick | Video architecture and methodology for family of related games |
CA2418670A1 (en) * | 2003-02-11 | 2004-08-11 | Ibm Canada Limited - Ibm Canada Limitee | Method and system for generating executable code for formatiing and printing complex data structures |
US7568188B2 (en) * | 2003-03-07 | 2009-07-28 | Microsoft Corporation | Method for testing a software shim |
US8555273B1 (en) | 2003-09-17 | 2013-10-08 | Palm. Inc. | Network for updating electronic devices |
GB2407656B (en) * | 2003-10-28 | 2008-12-17 | Symbian Ltd | Mapping of dynamic link libraries in computing devices |
US7475394B2 (en) * | 2003-12-05 | 2009-01-06 | Arm Limited | System and method of analyzing interpreted programs |
US7823070B2 (en) * | 2003-12-19 | 2010-10-26 | Fuji Xerox Co., Ltd. | Methods and systems for extending existing user interfaces |
US20050160414A1 (en) * | 2004-01-21 | 2005-07-21 | Nokia Corporation | System and method for dynamically adding features to software applications |
US20050222968A1 (en) * | 2004-04-06 | 2005-10-06 | International Business Machines Corporation | System, method and program product for identifying differences between sets of program container files |
US7904895B1 (en) | 2004-04-21 | 2011-03-08 | Hewlett-Packard Develpment Company, L.P. | Firmware update in electronic devices employing update agent in a flash memory card |
US20050261918A1 (en) * | 2004-05-18 | 2005-11-24 | International Business Machines Corporation | Business protocol policy injection |
US8799003B2 (en) | 2004-05-18 | 2014-08-05 | International Business Machines Corporation | Dynamic binding of principal services in a cross-enterprise business process management system |
US8526940B1 (en) | 2004-08-17 | 2013-09-03 | Palm, Inc. | Centralized rules repository for smart phone customer care |
US7523450B2 (en) * | 2004-11-15 | 2009-04-21 | International Business Machines Corporation | Apparatus, system, and method for identifying fixed memory address errors in source code at build time |
US7627859B2 (en) * | 2005-04-04 | 2009-12-01 | Hewlett-Packard Development Company, L.P. | Method for configuring non-script language library files to be run as scripts |
US7735075B2 (en) * | 2005-12-01 | 2010-06-08 | Samsung Electronics Co., Ltd. | System and method for a pseudo dynamic link library (DLL) linker for a monolithic image in a wireless device |
US7716658B2 (en) * | 2005-12-09 | 2010-05-11 | Oracle America, Inc. | Method and apparatus for optimizing patching of objects containing references |
TW200739421A (en) * | 2006-04-07 | 2007-10-16 | Sunplus Technology Co Ltd | Method of dynamically linking function database software devices and sharing static linked source codes with main application program |
US7901288B2 (en) * | 2006-04-20 | 2011-03-08 | International Business Machines Corporation | Embedded advertising enhancements in interactive computer game environments |
US8209676B2 (en) | 2006-06-08 | 2012-06-26 | Hewlett-Packard Development Company, L.P. | Device management in a network |
US20080005528A1 (en) * | 2006-06-30 | 2008-01-03 | Morris Robert P | Methods, Systems, and Computer Program Products for Using a Structured Data Storage System to Provide Access to Addressable Entities in Virtual Address Space |
US20080005529A1 (en) * | 2006-06-30 | 2008-01-03 | Morris Robert P | Methods, Systems, and Computer Program Products for Providing Access to Addressable Entities Using a Non-Sequential Virtual Address Space |
US20080127220A1 (en) * | 2006-06-30 | 2008-05-29 | Robert Paul Morris | Methods, systems, and computer program products for creating an input-value-specific loadable instance of an application |
US20080005728A1 (en) * | 2006-06-30 | 2008-01-03 | Robert Paul Morris | Methods, systems, and computer program products for enabling cross language access to an addressable entity in an execution environment |
US20080005752A1 (en) * | 2006-06-30 | 2008-01-03 | Robert Paul Morris | Methods, systems, and computer program products for generating application processes by linking applications |
US20080005727A1 (en) * | 2006-06-30 | 2008-01-03 | Robert Paul Morris | Methods, systems, and computer program products for enabling cross language access to an addressable entity |
US20080005719A1 (en) * | 2006-06-30 | 2008-01-03 | Morris Robert P | Methods, systems, and computer program products for providing a program execution environment |
WO2008014454A2 (en) | 2006-07-27 | 2008-01-31 | Hewlett-Packard Development Company, L.P. | User experience and dependency management in a mobile device |
US7734890B2 (en) * | 2006-10-06 | 2010-06-08 | Okralabs Llc | Method and system for using a distributable virtual address space |
US8418122B2 (en) * | 2006-10-13 | 2013-04-09 | Oracle America, Inc. | Incorporating functionality from an object file into an existing binary file |
US20080127174A1 (en) * | 2006-10-25 | 2008-05-29 | Igt | Systems and methods for transmitting and installing software on a gaming machine in a gaming network |
US8046742B1 (en) * | 2007-02-02 | 2011-10-25 | Sandia Corporation | Self-assembling software generator |
US20080320459A1 (en) * | 2007-06-22 | 2008-12-25 | Morris Robert P | Method And Systems For Providing Concurrency Control For Addressable Entities |
US20080320282A1 (en) * | 2007-06-22 | 2008-12-25 | Morris Robert P | Method And Systems For Providing Transaction Support For Executable Program Components |
US9102962B2 (en) * | 2007-10-16 | 2015-08-11 | Shiu Nan Chen | Production method for solid cultured active mushroom mycelium and fruit-body metabolites (AMFM) products thereof |
US8448159B2 (en) * | 2007-11-02 | 2013-05-21 | Tti Inventions C Llc | Method and system for policy enabled programming |
US8352670B2 (en) * | 2008-01-22 | 2013-01-08 | Globalfoundries Inc. | Execute-only memory and mechanism enabling execution from execute-only memory for minivisor |
US20090193392A1 (en) * | 2008-01-29 | 2009-07-30 | Michael David Downen | Dynamic intermediate language modification and replacement |
US20090213083A1 (en) * | 2008-02-26 | 2009-08-27 | Apple Inc. | Simulation of multi-point gestures with a single pointing device |
US8191036B2 (en) * | 2008-05-19 | 2012-05-29 | Apple Inc. | Mechanism to support orphaned and partially configured objects |
US20100088690A1 (en) * | 2008-10-03 | 2010-04-08 | Microsoft Corporation | Replacing the identity of an activex control |
US20100088689A1 (en) * | 2008-10-03 | 2010-04-08 | Microsoft Corporation | Branding binary modules using resource patching |
US8239538B2 (en) | 2008-11-21 | 2012-08-07 | Samsung Electronics Co., Ltd. | Execution allocation cost assessment for computing systems and environments including elastic computing systems and environments |
US9052958B2 (en) * | 2008-11-21 | 2015-06-09 | Samsung Electronics Co., Ltd. | Extending the capability of computing devices by using dynamically scalable external resources |
US8438558B1 (en) | 2009-03-27 | 2013-05-07 | Google Inc. | System and method of updating programs and data |
US8560465B2 (en) | 2009-07-02 | 2013-10-15 | Samsung Electronics Co., Ltd | Execution allocation cost assessment for computing systems and environments including elastic computing systems and environments |
US8954929B2 (en) * | 2010-03-29 | 2015-02-10 | Microsoft Corporation | Automatically redirecting method calls for unit testing |
CN101916194B (zh) * | 2010-06-01 | 2013-06-12 | 浙江大学 | 一种无线传感网节点程序的部署方法 |
US8554797B2 (en) * | 2010-12-17 | 2013-10-08 | Sap Ag | System and method for modular business applications |
US8762972B2 (en) * | 2011-02-08 | 2014-06-24 | Nokia Corporation | Methods and apparatuses for facilitating execution of applications requiring runtime compilation |
US9778912B2 (en) | 2011-05-27 | 2017-10-03 | Cassy Holdings Llc | Stochastic processing of an information stream by a processing architecture generated by operation of non-deterministic data used to select data processing modules |
US9141356B2 (en) | 2011-12-14 | 2015-09-22 | Microsoft Technology Licensing, Llc | Process for generating dynamic type |
US8776031B1 (en) * | 2012-08-09 | 2014-07-08 | Noble Systems Corporation | Manipulating resources embedded in a dynamic-link library |
US10453534B2 (en) * | 2013-08-07 | 2019-10-22 | Qualcomm Technologies International, Ltd. | Patching of programmable memory |
US9569115B2 (en) | 2014-03-31 | 2017-02-14 | International Business Machines Corporation | Transparent code patching |
US9256546B2 (en) * | 2014-03-31 | 2016-02-09 | International Business Machines Corporation | Transparent code patching including updating of address translation structures |
EP3065051A1 (en) * | 2015-03-05 | 2016-09-07 | Ingo Josopait | Flow control for language-embedded programming in general-purpose computing on graphics processing units |
US10083025B2 (en) | 2015-11-20 | 2018-09-25 | Google Llc | Dynamic update of an application in compilation and deployment with warm-swapping |
WO2017087801A1 (en) * | 2015-11-20 | 2017-05-26 | Google Inc. | Dynamic update of an application in compilation and deployment |
US20180341475A1 (en) * | 2017-05-24 | 2018-11-29 | Dell Products L.P. | Just In Time Deployment with Package Managers |
CN116243971B (zh) * | 2023-05-10 | 2023-07-28 | 北京麟卓信息科技有限公司 | 一种基于静态依赖自举的内核无关的模块构建方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS55118147A (en) * | 1979-03-05 | 1980-09-10 | Hitachi Ltd | Program addition/correction system |
JPH03189819A (ja) * | 1989-12-20 | 1991-08-19 | Pfu Ltd | プログラムの呼び出し処理装置 |
JPH08123679A (ja) * | 1994-10-25 | 1996-05-17 | Toshiba Meter Techno Kk | Rom装置およびコンパイラ |
JPH08195952A (ja) * | 1995-01-19 | 1996-07-30 | Sony Corp | データ受信処理装置およびデータ受信処理方法並びに放送方法 |
JPH10157250A (ja) * | 1996-11-27 | 1998-06-16 | Toshiba Corp | 画像形成装置と画像形成装置の機能拡張方法 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4742467A (en) * | 1984-05-04 | 1988-05-03 | Analysts International Corporation | Automated programming system for machine creation of applications program source code from non-procedural terminal input |
US5247651A (en) * | 1990-04-17 | 1993-09-21 | At&T Bell Laboratories | Interactive computer program specification and simulation system |
US5237680A (en) * | 1990-09-27 | 1993-08-17 | Sun Microsystems, Inc. | Method for incremental rename propagation between hierarchical file name spaces |
US5491818A (en) * | 1993-08-13 | 1996-02-13 | Peoplesoft, Inc. | System for migrating application data definition catalog changes to the system level data definition catalog in a database |
US5553286A (en) * | 1994-03-17 | 1996-09-03 | International Business Machines Corporation | System and method for preparing a computer program for execution |
US5991541A (en) * | 1996-08-12 | 1999-11-23 | Adc Telecommunications, Inc. | Dynamically modifiable call processing methods and apparatus |
US5881292A (en) * | 1996-09-26 | 1999-03-09 | Microsoft Corporation | Dynamic versioning system for multiple users of multi-module software system |
US6115550A (en) * | 1997-06-11 | 2000-09-05 | Digital Equipment Corporation | Loader conditionally replacing a code sequence with a functionally-alike code sequence in an executable program intended for execution in different run-time environments |
US5953534A (en) * | 1997-12-23 | 1999-09-14 | University Of Washington | Environment manipulation for executing modified executable and dynamically-loaded library files |
US6351843B1 (en) * | 1998-08-31 | 2002-02-26 | International Business Machines Corporation | Dynamically inserting a function into an application executable at runtime |
US6298481B1 (en) * | 1998-10-30 | 2001-10-02 | Segasoft, Inc. | System for modifying the functionality of compiled computer code at run-time |
-
1998
- 1998-10-30 US US09/183,797 patent/US6298481B1/en not_active Expired - Lifetime
-
1999
- 1999-10-29 AU AU15191/00A patent/AU1519100A/en not_active Abandoned
- 1999-10-29 WO PCT/US1999/025742 patent/WO2000026780A1/en active Application Filing
- 1999-10-29 JP JP2000580089A patent/JP2002529812A/ja active Pending
-
2001
- 2001-04-20 US US09/839,978 patent/US6898788B2/en not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS55118147A (en) * | 1979-03-05 | 1980-09-10 | Hitachi Ltd | Program addition/correction system |
JPH03189819A (ja) * | 1989-12-20 | 1991-08-19 | Pfu Ltd | プログラムの呼び出し処理装置 |
JPH08123679A (ja) * | 1994-10-25 | 1996-05-17 | Toshiba Meter Techno Kk | Rom装置およびコンパイラ |
JPH08195952A (ja) * | 1995-01-19 | 1996-07-30 | Sony Corp | データ受信処理装置およびデータ受信処理方法並びに放送方法 |
JPH10157250A (ja) * | 1996-11-27 | 1998-06-16 | Toshiba Corp | 画像形成装置と画像形成装置の機能拡張方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012010344A (ja) * | 2011-07-13 | 2012-01-12 | Fujifilm Corp | 画像処理装置、方法およびプログラム |
Also Published As
Publication number | Publication date |
---|---|
AU1519100A (en) | 2000-05-22 |
US6898788B2 (en) | 2005-05-24 |
US6298481B1 (en) | 2001-10-02 |
US20020100028A1 (en) | 2002-07-25 |
WO2000026780A1 (en) | 2000-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2002529812A (ja) | 実行時にコンパイルされたコンピュータコードの機能を改変するためのシステム | |
US8402460B2 (en) | Installing and updating interpreted programming language applications using a designated virtual machine | |
JP3349417B2 (ja) | ホスト機械コードのアプリケーションをインストールするシステム | |
US5615400A (en) | System for object oriented dynamic linking based upon a catalog of registered function set or class identifiers | |
JP4215373B2 (ja) | Java環境の管理可能性及び有用性を改善するシステム、方法及び記録媒体 | |
EP0752647B1 (en) | Method and apparatus for internal versioning of objects using a map file | |
US6912711B1 (en) | Method of applying an update to a contained collection of program and data files based upon versions | |
US6920631B2 (en) | Software installation and validation using custom actions | |
US6854123B1 (en) | Method, system, and program for mapping standard application program interfaces (APIs) to user interface APIs | |
US20020066085A1 (en) | Enabling software designed for one operating system to operate on another operating system | |
US7131111B2 (en) | Development of manifest for java embedded server bundle | |
US6941520B1 (en) | Method, system, and program for using a user interface program to generate a user interface for an application program | |
JP2000507373A (ja) | インタラクティブソフトウェア開発システム | |
US20040268301A1 (en) | Adding new compiler methods to an integrated development environment | |
JP2003508844A (ja) | オブジェクト指向コンピュータプログラムの変換および実行 | |
US6507948B1 (en) | Method, system, and program for generating batch files | |
US7694289B2 (en) | Method for embedding object codes in source codes | |
US6574747B2 (en) | Extensible execute in place (XIP) architecture and related methods | |
JP3606561B2 (ja) | 第1ビット・アーキテクチャの命令を第2ビット・アーキテクチャの命令に変換する方法、システム、プログラムおよびデータ構造 | |
US7743020B2 (en) | Automatic instance data mapping generation | |
US6578194B1 (en) | System and method using extended relocation types and operations in relocating operations | |
JP2001521217A (ja) | トラッグおよびドロップのインターフエイスを用いて制御をアブリケーションに結び付けるシステム | |
Lyu et al. | A procedure-based dynamic software update | |
Revision | LF Fortran Express User’s Guide | |
Si | The PiSharp IDE for Raspberry PI |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20061024 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100122 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20100422 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20100430 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20100929 |