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
Application number
JP2000580089A
Other languages
English (en)
Inventor
タカシ コサカ,
マイケル プレート,
Original Assignee
セガソフト, インコーポレイテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by セガソフト, インコーポレイテッド filed Critical セガソフト, インコーポレイテッド
Publication of JP2002529812A publication Critical patent/JP2002529812A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Abstract

(57)【要約】 プログラムのシンボルリファレンスの1以上がリダイレクトに適するように変更されるように、コンピュータプログラムが変換され得るシステム。リダイレクト可能なシンボルが備えられると、プログラムの機能は後に、たとえば、起動時またはランタイム時に、容易に変更される。第1のフェーズ(304)は、シンボルがリダイレクトされ得るように、存在するコンピュータプログラムを変換する。この第1のフェーズ(304)はさらに、後のフェーズにおいて用いられる補助ファイルを生成する。第2のフェーズ(306)において、変換されたコンピュータプログラムがユーザのコンピュータにロードされて実行される。第3のフェーズ(308、309、310)において、コンピュータプログラムのオリジナルの機能が改変される。第4のフェーズ(312)において、改変された機能がエンドユーザのコンピュータにロードされ、変換されたプログラムと共に実行される。

Description

【発明の詳細な説明】
【0001】 (著作権表示) 本明細書中に記載される開示の一部は、著作権保護を条件とする資料を含む。
詳細には、本発明をコンピュータシステムで実施するプロセスに関するソースコ
ード命令を表にした、37 CFR Section 1.96に従ったマイク
ロフィッシュ付属書類を含む。このマイクロフィッシュAppendixは、6
3フレームまたはページ分のソースコードAppendixを含む1シートのマ
イクロフィッシュから成る。本著作権所有者は、米国特許商標庁に出願される明
細書の複製に異議を唱えない。その他に関しては、全ての著作権が留保される。
【0002】 (発明の背景) 本発明は、一般に、コンピュータプログラムの実行に関し、さらに詳細には、
コンパイルされたコンピュータプログラムの実行時機能の改変を可能にするシス
テムに関する。
【0003】 コンピュータプログラムまたはコードは、多くの異なる方法で実行することが
可能である。翻訳コードを実行することによるもの、またはコンパイルコードを
実行することによるものが、2つの主要で、且つ基本的に異なる方法である。
【0004】 翻訳コードは、一般に、人間が読むことができるコードに基づいて、行ごとに
動作することをプロセッサに要求する。すなわち、コンピュータプログラム表現
が、テキストベースの形式であるか、またはコードが「トークン化」されている
ようなテキストベースの形式からかけ離れていないので、人間のプログラマーに
よって書かれるコードとプロセッサによって実行されるコードは非常に類似して
いる。コンパイルコードとは異なり、翻訳コードは、長い「構築」時間を必要と
しないという利点を有する。本質的に、プログラマーは、翻訳コードを書き、且
つそのコードをテストする目的で、コードをすぐに実行することが可能である。
この点で、翻訳コードは、ラピッドプロトタイピング(rapid proto
typing)に有用である。翻訳コードは、一般に、速度が重要な問題ではな
い些細な用途によく適する。これは、翻訳コードの大きな欠点が、コンパイルコ
ードと比較して、よく知られているとおり遅いからである。
【0005】 コンパイルコードは、非常に高速な実行プログラムである。しかしながら、コ
ンパイルコードの生成および維持は、翻訳コードよりもはるかに困難である。ま
た、コンパイルプログラムアプローチで作成されたプログラムは、開発および改
変がより複雑である。通常、変更がテストできる前、または受渡し可能な実行可
能なもの(deliverable executable)が作成される前に
、コンパイル、リンク、およびロードされなければならないプログラムモジュー
ルが多く必要とされる。時に「プロジェクト」と呼ばれる、大型のコンパイルさ
れたコンピュータプログラム内には、数百の異なるモジュールまたはファイルが
存在する。これらのプロジェクトの構築プロセスは、それ自体が複雑であり、記
号、プロセス、リソース、およびプログラム開発の他の局面の正確な調整を必要
とする。コンピュータプログラムの完全な構築は、プログラムのサイズによって
は、何時間も要する可能性がある。さらに、コンパイルコードの開発は、モジュ
ール、ユーティリティー、ツール、および他の開発者支援ソフトウェアの正確な
アーカイビング、ブックキーピング(bookeeping)、ならびにトラッ
キングを必要とする。コンピュータプログラムが古くなるにつれて、たとえ実行
可能なバージョンのプログラムがまだ使用中であっても、特定のバージョンのプ
ログラムを再構築することが困難または不可能になり得る。これは、プログラム
を構築するために用いられるオペレーティングシステム、開発環境、ツール、ユ
ーティリティー、または他のソフトウェア(またはハードウェア)が変更され得
るからである。
【0006】 プログラマーが、コンパイルプログラムおよび開発環境の詳細な知識を有して
いなければならないので、コンパイルプログラムプロジェクトの元々のプログラ
マーでないプログラマーが、「予備知識を得て(come up to spe
ed)」、別のプログラマーによって書かれたソフトウェアに改変することは困
難である。コンパイル、リンク、およびロードされた実行可能コードは、いずれ
の実際的な意味においても、人間のプログラマーには読むことができず、プログ
ラマーに人間が読むことができる「ソース」コードバージョンのプログラムの学
習を強要するだけでなく、そのプログラムに関する構築プロセスの詳細な実用的
な知識を有することも強要する。よって、コンパイルコードの維持および改変に
は問題がある。
【0007】 翻訳およびコンパイルコードの両方の別の特性は、コードの実行時機能または
行動を変更することが困難であることである。翻訳コードアプローチでは、全く
新しい翻訳コード命令の集合が、ユーザコンピュータにロードされなければなら
ない。コンパイルコードは、通常、後述するアプローチが完全に新しいバージョ
ンのコンパイル実行可能物のローディングを回避するために開発された、翻訳コ
ードよりもはるかに大きい。翻訳コードは比較的に小さく、よって、新たなバー
ジョンのロードを容易にするが、非常に大きなプログラムの高速な実行を必要と
するアプリケーションプログラムの大部分には適さない。翻訳コードの例として
は、BASIC、Lisp、ならびにPerlおよびJava(登録商標)等の
スクリプト言語がある。コンパイルコードアプローチで用いられる言語の例とし
ては、Fortran、「C」、アセンブリ言語、その他がある。しかしながら
、これらのカテゴリーは、適切な「インタープリタ」または「コンパイラ」がそ
のコードを実行することが意図されるターゲットマシンのために書かれることを
仮定すると、いずれのコンピュータ言語も、コンパイルコードまたは翻訳コード
アプローチとしてインプリメントされ得るので、幾分あいまいに定義される。
【0008】 図1A〜Fを参照して、従来技術に関して以下に述べる。
【0009】 図1Aは、翻訳コードを実行するためのプロセスを示す簡略図である。
【0010】 図1Aにおいて、プログラム10は、プログラマーによって生成される。通常
、これはワードプロセッシングプログラムでなされ、人間が読むことができるテ
キストとなる。このプログラムは、ユーザコンピュータ12にロードされる。転
送またはローディングは、フロッピー(登録商標)ディスク、コンパクトディス
ク読み出し専用メモリ(CDROM)、ネットワークからのダウンロード、また
は他の手段によってなされ得る。ロードプログラム14は、通常、プログラマー
によって作成されるオリジナルテキストの完全なコピーである。ロードプログラ
ム14は、インタープリタ16によって翻訳され、ユーザコンピュータ内で所望
の実行時機能を作成するために、プログラムコード、またはスクリプトによって
特定される機能を実行する。よって、翻訳コードアプローチでは、単一のプログ
ラム定義のみが存在する。プログラム10のプログラム定義は、プログラムの人
間が読むことができる定義、およびユーザコンピュータ内の実行イメージとして
役立つ。
【0011】 図1Bは、コンパイルコードを実行するためのプロセスを示す簡略図である。
【0012】 図1Bにおいて、アイテム20〜30は、ソフトウェア構築プロセスの一部で
あり、それによって、機械が読むことができる実行可能オブジェクトが、人間が
読むことができるソースコードモジュールから生成される。アイテム34〜38
は、ユーザコンピュータ32上のコンパイルソフトウェアプログラムの実行に関
連するアイテムを示す。
【0013】 図1Bにおいて、ソースコード20がプログラマーによって生成され、これは
、人間が読むことができるバージョンのプログラムである。通常、コンパイルコ
ード開発環境にあるプログラマーは、ソースコードの個別のファイルを処理し、
例えば、図1Bのソースコード20は、プログラムプロジェクト内で用いられる
多くのモジュールのうちの単一のモジュールを表わす。1つのモジュールは、数
行から数百以上の行までのコードを有することが可能である。ソースコード20
は、コンパイラ22によってコンパイルされ、オブジェクトファイル24となる
。各モジュールは、プログラムプロジェクト内の他のいずれのモジュールからも
独立してコンパイルすることが可能である。これによって、プログラムの断片が
、モジュールごとに、プログラムプロジェクト内の多くのモジュールの全てのコ
ンパイルを必要とせずに、改変することが可能である。しかしながら、モジュー
ル内の1行を変更することでさえも、後述のとおり、モジュール全体の再コンパ
イル、およびプロジェクト全体の再構築を必要とすることに留意されたい。
【0014】 一旦コンパイルされると、オブジェクトファイルは、プログラムプロジェクト
内の他のオブジェクトファイルにリンクすることが可能である。他のオブジェク
トファイルは、そのプログラマーまたは別のプログラマーが書いた他のコンパイ
ルソースコードモジュールからのものであり得る。リンク可能なオブジェクトモ
ジュールのための他のソースは、共通して必要とされる機能を提供するために、
予め存在するライブラリオブジェクト26を含む。プログラプロジェクトのため
のオブジェクトファイルの全てが、単一の実行可能オブジェクト30を作成する
ために、リンカー28を介してリンクされる。実行可能オブジェクト30を作成
することにより、プログラムの構築が完結する。(後述するダイナミックリンキ
ング(dynamic linking)は別にして)一般に、構築のためには
、モジュール、ライブラリ、および他のオブジェクトファイルソースの全てから
のオブジェクトファイルの全てを手近に有する必要があることに留意されたい。
これは、異なるオブジェクトが、異なるプログラマーの行動の結果として、異な
る時点に変更され得るので、大型のプログラムでは問題となる。後にコンパイル
プログラムの機能を、プログラムの再構築によって、変更することが所望される
場合、例えば、相互に互換性のあるオブジェクトファイルの集合を有する必要が
ある。本質的に、これは、オブジェクトファイル中の全ての「記号」リファレン
スが一致しなければならないことを意味する。記号は、プロセス、ルーチン、サ
ブルーチン、関数、およびデータ構造等のソースコード内の異なるオブジェクト
または項目を参照する、単なるテキストラベルにすぎない。この構築プロセスが
非常に複雑なために、プログラマーの「開発者環境」は、モジュール、オブジェ
クトファィル、記号リファレンスの調整、および他の関連するタスクの実施を支
援する、ソフトウェア開発「ツール」製造者によって提供される。
【0015】 図1Bに戻って、オブジェクトファイルのリンクの結果が、実行可能オブジェ
クト30である。実行可能オブジェクト30は、実行のために、ターゲット、ま
たはユーザコンピュータ32に次に転送される、受渡し可能な生成物を表わす。
通常、実行可能オブジェクト30は、実行可能イメージ34を作成するために、
実行可能オブジェクトをシステムランダムアクセスメモリ(RAM)に配置する
、ローダ32によってロードされる。翻訳コードの場合と同様に、実行可能オブ
ジェクトが、任意のコンピュータ可読媒体で転送されるか、インターネット等の
通信リンク上を転送されるか、または他の手段によって、ユーザコンピュータ内
に格納されることが可能である。実行可能イメージ34は、ユーザコンピュータ
内のプロセッサによってアクセスされ、コンパイル命令を実行することにより、
元々のソースコード命令に従って機能を提供する。
【0016】 コンパイルコードの実行が、いくつかの工程および多くの異なるファイル、な
らびに元々のソースコード命令の変換を必要とすることに留意されたい。これは
、翻訳コードの実行とは対照的である。コンパイルコードの調整および処理の複
雑さは、今日のコンピュータの用途の多くで所望される最大速度および効率を達
成するために必要である。
【0017】 しかしながら、問題は、これらのプログラムの機能を実行時に改変することが
困難であるという点で、翻訳およびコンパイルプログラムアプローチの両方に存
在する。すなわち、ユーザがプログラムを実行しているときに、元々のプログラ
ムの開発者、製造者、または他の提供者が、ユーザに提供されるプログラムの機
能を改変することが困難または不可能である。このことを十分に示すために、翻
訳コードおよびコンパイルコードアプローチの両方について、さらに詳細に示す
【0018】 図1Cは、翻訳ソースコードのごく一部の一例を示す。図1Cにおいて、Ja
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までの数字を印刷するように指示していると判断することが可能である。
【0019】 例えば、このコードの1〜20までの数字を印刷すること等の機能を改変する
ために、全く新しいソースコードモジュール、またはドキュメントが、獲得され
、且つ図1Cに示す行を含むソースコードモジュールの書き換えられなければな
らない。通常、これは、ソースコードモジュールが非常に小さなサイズであれば
問題ではない。例えば、Java(登録商標)タイプの言語は、World W
ide Webページ内に埋めこまれて、あるいはそれに関連してロードされて
用いられるインターネットでは非常に一般的である。Java(登録商標)「ア
プレット」が、非常に小さくなる傾向にあるので、新たなバージョンのアプレッ
トが、ユーザが情報のページにアクセス(すなわち、ロード)するたびに提供さ
れる。このようにして、ソースコードへの変更が、ユーザが実行しているバージ
ョン内で、常に可能である。
【0020】 しかしながら、上述のとおり、翻訳ソースコードは、(コンパイルコードと比
較して)実行が非常に遅いという大きな欠点を有する。また、人間が読むことが
できる形式が空間効率がよくない(not space−efficient)
ために、大型のプログラムは翻訳コードで書かれない。
【0021】 図1Dは、コンパイル実行可能オブジェクト部分がどのように見えるかの一例
を示す。実行可能オブジェクトは単に、16進数として図1Dに表わす、一連の
数字である。通常、これらの数字は、専用のビューイングプログラムが用いられ
ない限り、読むことができる数字として見ることすらできない。これらの数字は
、ユーザコンピュータシステム内の中央処理装置(CPU)が、間接的な翻訳ア
プローチではなく、直接的に実行する、機械レベルの命令を表わす。
【0022】 例えば、図1Cの翻訳コード命令において、行ごとの翻訳が起こり得る。コン
ピュータは、1行のスクリプトを読み込み、その行の構文解析を行い、一連の機
械命令にその行を変換して、命令を実行する。いくつかの場合において、この変
換は、翻訳コードが代わりにコンパイルされた場合に、結果として生じる数字と
、結果として類似した数字となる。しかしながら、多くの場合において、翻訳コ
ードは、単一の行の翻訳コードを実行することだけを考慮した場合でも、高速ま
たは簡潔ではない。当然、翻訳された行の読み込み、構文解析、変換、および実
行は、プログラマーによって意図された機能を実際に実施するたった数個の機械
命令の最終的実行を達成するために、多くの余分な「オーバーヘッド」工程を実
行することをプロセッサに要求する。他方、コンパイルプログラムアプローチの
実行可能なオブジェクトは、すでに機械が読むことができる形式であり、プログ
ラマーが所望する機能を実現するための命令のみを含む。よって、コンピュータ
は、各機械命令を、そのプロセッサに直接ロードし、翻訳コードアプローチの実
行時オーバーヘッドを経ることなく、命令を実行することが可能である。コンパ
イルコードの使用は、プロセッサの速度、ならびにコンピュータの制限されたメ
モリおよびディスクスペースを十分に利用するために、絶対的に必要である。
【0023】 図1Dの実行可能オブジェクトコード部分から分かるとおり、数字が、メモリ
内の隣接する位置を占める。これによって、実行可能物に命令またはデータを加
える改変を実施することが困難になる。また、ユーザコンピュータ内に常駐する
実行可能オブジェクトの機能を適切に変更するために、新たな、または改変され
た実行可能オブジェクトが、作成されて、エンドユーザに提供されなければなら
ない。これは、インターネット等の通信リンク上でのダウンロードによって行う
ことが可能であるが、今日の実行可能オブジェクトのサイズが大きいために、数
時間のダウンロード時間を要し、コンパイル実行可能オブジェクトの実行時機能
を変更することは非実際的であり、望ましくない。
【0024】 ソフトウェア産業は、実行時にコンパイル実行可能オブジェクトの機能を変更
する2つの基本的アプローチを開発してきた。これらは、(1)既存の実行可能
オブジェクトに「パッチを当てる」こと、または(2)ダイナミックにリンクさ
れるライブラリ(DLL)を用いることである。
【0025】 図1Eに、コンパイルされた実行可能オブジェクトのパッチングの一例を示す
【0026】 図1Eにおいて、実行可能オブジェクト52は、パッチデータ56を用いるパ
ッチアプライコード54によって変更され得る。このアプローチにおいて、16
ビットワードを表す、値000Aのような命令または値は、パッチアプライコー
ド54内の命令を実行することによって、0005のような異なる値に変更され
得る。パッチアプライコード54は、パッチデータ56から新たな値0005を
入手し、実行可能オブジェクト52内の適切な位置にデータを挿入する。この例
において、図1Dに示すコードの一部分は、パッチをあてた結果として、実行可
能オブジェクト52内に示すコードを有し得る。
【0027】 実行可能オブジェクト52のサイズが数十メガバイトのオーダーであり得る場
合、パッチアプライコード54およびパッチデータ56(集合的には、「パッチ
」)は、数千バイトのオーダーであり得る。パッチは、典型的には、前の実行可
能オブジェクト(すなわち、図1Dの実行可能オブジェクト)内のデータを用い
、変化を作り出し、前の実行可能オブジェクトの代わりとして、新たな実行可能
オブジェクト(図1Eの実行可能オブジェクト52)をセーブすることによって
、新たな実行可能オブジェクトを構成する。当然、発生し得るパッチングのタイ
プには、古い実行可能オブジェクトの一部分を消去することと、古い実行可能オ
ブジェクトに新たな部分を加えることと、古い実行可能オブジェクトの存在する
部分を変更することとが含まれる。
【0028】 パッチアプライコードおよびパッチデータは実行可能オブジェクトよりずっと
小さいので、大きなコンパイルされた実行可能オブジェクトの新たなバージョン
全体のダウンロードより、パッチングがより効率的である。しかし、パッチング
は、プログラムの機能性に、1度の変化を提供するのみである。また、機能性に
おける変化は、プログラムが実行される前に起こる。この点に関して、パッチン
グアプローチは、コンピュータコードの機能性の実行時変更を提供しない。また
、パッチをダウンロードするプロセス、および、パッチをあてて新たな実行可能
オブジェクトを作成するプロセスは、時間が掛かり、パッチを進める認証を与え
ること、パッチがあてられた実行可能オブジェクトがどのディレクトリに保存さ
れ得るのかをを指定すること等によって、しばしばパッチングプロセスに参加す
る必要があるユーザに対してトランスペアレントでない。1つのプログラムに対
して複数のパッチが存在し、ユーザによって適切な順序でパッチがあてられない
場合、パッチは問題の原因となり得る。また、パッチがあてられたプログラムが
実行を開始する前にパッチが入手され、実行される(しばしば、時間が掛かるプ
ロセスである)必要があるので、ユーザのプログラムの実行において、パッチは
厄介な遅延の原因となり得る。
【0029】 第2のアプローチは、DLLを用いるアプローチであり、機能性の実行時変更
をある程度可能にする。しかし、このアプローチは、制限され、以下で説明する
所望の柔軟性を欠いている。
【0030】 図1Fに、DLLの使用を示す。
【0031】 図1Fにおいて、実行可能イメージ60は、実行の直前、または実行の間に、
DLL62内のルーチン、関数、および他のアイテムにリンクする。DLLにリ
ンクするプロセスは、概念において、上で簡略的に説明した、プログラムの構築
の間に図1Bのリンカー28によって行われるプロセスに類似する。DLLへの
ダイナミックリンクを理解するために、プログラム構築の間のリンクがまず説明
される。
【0032】 上述したように、モジュールは、プログラム開発の間、別個のエンティティと
して処理される。モジュールの情報は、プログラム構築の間に1つの実行可能プ
ログラムを作成するために、結合される必要がある。モジュールの結合における
主なタスクは、他のモジュールにおいて規定され得る、プロセス、ルーチン、サ
ブルーチン、関数、オブジェクト、データ構造、および他のリソースのようなア
イテム(集合的に「アイテム」と呼ぶ)へのシンボリックリファレンスを決定す
ることである。シンボリックリファレンス、またはシンボルは、ソースコードを
書く間にプログラマが用いる、英数字の人間可読名に過ぎない。これらのシンボ
ルは、後でアドレスにマッピングされて、マシン可読コードを発生する。シンボ
ルをアドレスにマッピングするために、シンボルは、対応するアイテムの定義に
関連付けられる必要がある。
【0033】 いくつかのアイテム定義は、アイテムにアクセスする必要がある所与のモジュ
ール内に存在しない。この場合、所与のモジュールは、アイテムがモジュールに
対して外部にあると「宣言」する。コンパイラは、外部で定義されるアイテムへ
のリファレンスを無視し得、そのことにより、コンパイルにおいて他のモジュー
ルを含む必要なしに、所与のモジュールがコンパイルされ得る(かつ、内部エラ
ーについてチェックされ得る)。後に、コンパイラが検出したエラーに関して、
モジュールが固定された場合、所与のモジュールは、実際にアイテム定義を有す
るモジュールに「リンク」される。リンカーは、シンボルが用いられる場所、シ
ンボルが定義される場所、シンボルがマッピングする関連アドレス等のような、
シンボル名についての詳細な情報を提供し得る。大きなコンピュータプログラム
は、何千、何万、あるいはそれより多いシンボリックリファレンスを用い得る。
各プログラマが、典型的には、独自のシンボル名を作り出すので、シンボル名の
記憶および理解が、他のプログラマがプログラムを変更するために十分な程度プ
ログラムを理解しようとする場合、通常越えなければならない主なハードルであ
る。上述したように、シンボルは、1つのモジュールで定義され、他のモジュー
ルにシンボルがモジュールの外部にあると宣言させることによって、他のモジュ
ール、または他の多数のモジュールによって用いられ得る。シンボリックリファ
レンスを処理する、いくつかの他のタイプのメカニズムがある。これらのメカニ
ズムは、特定のコンピュータ言語によって変わる。しかし、コンピュータ言語の
各々は、コンパイルされた言語であると仮定すると、最終的には、リンカーのよ
うなプロセスを用いることによって、複数のソースコードモジュール(または他
のソースコードエンティティ)の中から、シンボル定義およびシンボルの使用を
決定する必要がある。シンボル決定が非常に大きく、プログラムプロジェクトの
全体に渡っているので、コンパイルされたコンピュータプログラムに対する大き
な変化がソースコードモジュールの変更、追加、または消去によって起こり、続
くプログラム全体の再構築が起こって新たなバージョンが作成される必要がある
。上述したように、プログラム全体の構築には、かなりの時間が掛かり、様々な
モジュール、ツール、ユーティリティ、および追加情報の正確なアーカイビング
、ブックキーピング、およびトラッキングを必要とする。
【0034】 ダイナミックリンクは、リンクがスタートアップ時、またはプログラムの実行
時の間に起こることを可能にする。DLLの基本的な方法は、ある特定のシンボ
ルが、実行において決定される、「エクスポート」(exported)または
「インポート」(imported)されたシンボルであると宣言することであ
る。シンボルを決定するコード(すなわち、各シンボリックリファレンスをシン
ボル定義に関連付ける)は、プログラム構築の間、それ自体がプログラムにリン
クされ、実行イメージ60の一部となる「DLLリンク」コードである。実行時
、DLLリンクコードは、実行されて、DLLに含まれるアイテムへのアクセス
を実行するプログラムに提供する。
【0035】 典型的には、DLL62は、実行イメージ内の命令によって参照され得る、多
くの関数、ルーチン、データ構造、または他のアイテムを含む。DLLの使用は
、実行可能イメージの実行の前にDLLの関数を変化させることによって、実行
の直前、または実行時に実行可能イメージの機能性を変更する方法を提供する。
例えば、DLLは、MicrosoftのDirectX libraryのよ
うなグラフィックスライブラリを含み得る。グラフィックスルーチンが変化する
場合、ユーザは、新たなDLLを入手する(例えば、CD ROM、インターネ
ットからダウンロード等)ことによって自身のDLLをアップデートし、次いで
アップデートされたDLLによって提供される、新たな機能性を利用する同じ実
行可能イメージを実行することができる。
【0036】 このようなDLLの使用には、利点があるが、欠点もある。欠点の1つは、D
LL内のいずれか1つのアイテムが実行可能イメージ内の命令によって参照され
る必要がある場合はいつも、DLL全体がロードされることである。DLL内の
アイテムをグループとして処理する必要性は、アップデートされるDLL内のア
イテムの割合が小さい場合、非効率的である。すなわち、ユーザは、変化したコ
ードを少量しか含まない、完全に新たなDLLを入手しなければならない。
【0037】 DLLの第2の欠点は、DLLを利用し得る実行可能イメージを生じるアプリ
ケーションプログラムにおける特定の準備を必要とすることである。図1Bを参
照すると、この準備は、プログラマがソースコード20のようなソースコードを
書くときに、最初に起こる。典型的には、プログラマは、コードの様々な部分で
DLLアイテムリファレンスを宣言する必要がある。また、特定のサポートファ
イルが、後で実際にリンクされるDLLアイテムへのリファレンスを決定するた
め、リンカー28によってリンクされる必要がある。オペレーティングシステム
ごとに異なるDLLを正確にインプリメントするためにさらなる準備をとる必要
がある。DLL使用の詳細の多くは、プログラマーによって作り出され、この点
において、後のプログラマが詳細を学ぶ必要がある。概して、DLLアプローチ
は、依然、小さい、選択的な機能の変化についてうまく作用しない「ライブラリ
」に基づくアプローチである。DLLと共に用いるアプリケーションプログラム
の準備の説明については、MicrosoftのWindows(登録商標)
95、Sun Micro Systems、およびSun OSのようなオペレーティング
システムを説明する参考文献を参照されたい。
【0038】 従って、従来技術の問題点を解消する実行時機能性の変更を提供するシステム
が所望されることが明らかである。このようなシステムは、ユーザがDLLのよ
うな大きいファイルをアップデートする必要なく、実行の直前、または実行の間
のトランスペアレントで、かつ効率的な機能性の変更を可能にするべきである。
このようなシステムは、プログラマまたは他の開発者による複雑な準備またはオ
ーバーヘッドを必要とすることなく、一般的なアプリケーションプログラムが変
更されることも可能にするべきである。理想的には、システムは、アプリケーシ
ョンのプログラム変換に参加していない人が、アプリケーションプログラムの機
能性を素早く、かつ正確に変更することを可能にし得る。システムは、実行イメ
ージの機能性を変更する命令の効率的な実行を提供し、加えられた、または変化
した機能性に適応する大量のシステムRAMを必要としない。システムは、解釈
されたコードの簡略性および柔軟性を提供し、コンパイルされたコードによって
提供される実行の小型化および速度を維持する。
【0039】 (発明の要旨) 本発明は、コンピュータプログラムが変換されて、1つ以上のプログラムシン
ボリックリファレンスをリダイレクト(redirection)に適するよう
にさせるシステムを提供する。リダイレクト可能なシンボルが提供されると、プ
ログラムの機能性は、後で、例えば、スタートアップ時、または実行時に容易に
変化され得る。
【0040】 本発明の他の局面は、本発明の4段階の記載に含まれる。第1段階は、以前に
存在したコンピュータプログラムが変換され、シンボルがリダイレクトされ得る
段階である。また、この第1段階は、後の段階で用いられる補助ファイルを発生
する。第2段階は、変換されたコンピュータプログラムがユーザのコンピュータ
にロードされ、その上で実行される段階である。第3段階は、元のコンピュータ
プログラム機能性が改変される段階である。改変は、高いレベルで起こり、元の
プログラムのプログラミングに関わっていない人によって容易に行われ得る。改
変は、プログラマでない人が、コンピュータプログラムの機能性を変化させ得る
程度まで簡略化される。この第3段階は、第1段階において発生された補助ファ
イルを用いる。第4段階は、改変された機能性がエンドユーザのコンピュータに
ロードされ、変更されたプログラムと共に実行される段階である。
【0041】 本発明の細部によって、Software Developer’s Too
lkitを構成する1組のツール、ユーティリティールーチン、および工程が提
供されて、Microsoft Developer's Environme
ntにおいて本発明が実施される。
【0042】 第1段階において、シンボルテーブルが用いられて、リダイレクト能力を備え
るために適切なシンボルを識別する。場合によっては、プログラムの全てのシン
ボルが、所望に応じて、リダイレクトが可能である。コンピュータプログラム命
令、データ、または他のアイテムを参照するシンボル名は、全て、リダイレクト
に対して準備され得る。第1段階のデフォルトの方法は、元のプログラムと同じ
様式で動作する元のプログラムの実行可能オブジェクトバージョンを提供する。
シンボルは、テーブルを通じてマッピングされ、所望の加えられたレベルのリダ
イレクトを提供し、そのことにより、リダイレクト能力を提供する。
【0043】 第2段階において、第1段階の変換されたプログラムから入手された実行可能
イメージがユーザのコンピュータにおいて実行される。第2の段階の実行可能イ
メージの動作は、元の(変換されていない)ソースコードによって定義されるプ
ログラムの機能性と同じである。実際には、変換された実行可能オブジェクトは
、僅かに大きく、元のバージョンより僅かに遅く実行され得るが、この影響は、
通常、無視できる。
【0044】 第3段階において、第1段階から入手された情報を用いて、シンボルがリダイ
レクトされることを可能にする。従って、例えば、データイメージが、前のイメ
ージの代わりになり得、新たなサブルーチンまたは関数が、プログラムの実行に
挿入され得、元のサブルーチン内の命令が編集され得たりする。第3段階は、ユ
ーザのコンピュータにダウンロードされ得るファイルまたファイルのセットを生
成して、段階2の実行可能オブジェクトと共にメモリに常駐させる。これらのフ
ァイルは、「アドオン」モジュールと呼ばれる。
【0045】 第4段階において、アドオンモジュールによって提供される機能性は、スター
トアップ時か、または実行の間に、実行可能イメージに組み込まれる。本発明の
局面の1つは、シンボルのリダイレクトが変更され、従って機能性が変更される
様式を制御するように、言語の記入を提供する。本発明の他の局面は、上述の特
定の段階の各々の細部と関係し、シンボルのリダイレクトを容易にするテーブル
の使用、シンボルの自動識別、ならびにプログラムおよびアドオンモジュール構
築のために必要なコンパイルステップを達成する補助ファイルおよび中間ファイ
ルの発生が含まれる。
【0046】 実行時にリダイレクトされ得るシンボリックリファレンスを有する実行可能オ
ブジェクトにコンピュータプログラムを変換する方法、コンピュータで実行する
方法、プロセッサ兼格納デバイスを有するコンピュータシステム、元の定義への
シンボリックリファレンスを有する元のコンピュータプログラムをさらに含むコ
ンピュータシステム、シンボリックリファレンスについてコンピュータプログラ
ムを走査するプロセスを実行する工程と、1つ以上のシンボリックリファレンス
について代わりのリファレンスを定義する工程と、1つ以上のシンボリックリフ
ァレンスと対応する代わりのリファレンスとの間にリンクを作成する工程と、コ
ンピュータプログラムにおいて代わりのリファレンスと元の定義との間にリンク
を作成する工程とを包含する方法。
【0047】 (特定の実施形態の詳細な説明) 本発明を以下のセクションに分けて説明する。第1のセクションにおいて、本
発明における使用に適切な基本的なハードウェア(例えば、コンピュータ、サブ
システムおよびネットワーク等)について説明する。第2のセクションでは、本
発明の概要を提供する。第3のセクションでは、ランタイム改変(modifi
cation)能力用の初期プログラムを作成するためのツール、ユーティリテ
ィルーチンおよび他のプログラムの特定のセットについて説明する。第4のセク
ションでは、ランタイムにおいて改変された機能を提供するアドオンモジュール
を生成するプロセスについて説明する。第5のセクションにおいて、スクリプト
言語等を用いて、スタートアップまたはランタイム時のアイテムへのリファレン
ス(reference)を部分変更する方法について説明する。第6のセクシ
ョンにおいて、本発明の他の詳細および機能について説明する。
【0048】 1.ハードウェアの説明 図2A〜Cは、本発明を実施するのに適切な基本的ハードウェア構成要素を示
す。
【0049】 図2Aは、表示画面204を有するディスプレイ202を含むコンピュータシ
ステム200を示す。キャビネット206は、標準的なコンピュータ構成要素(
例えば、ディスクドライブ、CDROMドライブ、表示アダプタ、ネットワーク
カード、ランダムアクセスメモリ(RAM)、中央処理装置(CPU)および他
の構成要素等)(図示せず)、サブシステムならびにデバイスを収容する。ユー
ザ入力デバイス(例えば、ボタン210を有するマウス208およびキーボード
212等)が図示されている。他のユーザ入力デバイス(例えば、トラックボー
ル、タッチスクリーン、デジタイジングタブレット(digitizing t
ablet)等)も使用可能である。このコンピュータシステムは一般的には、
本発明における使用に適した1つの種類のコンピュータシステム(例えば、デス
クトップコンピュータ)を例示したものに過ぎない。コンピュータは、多くの異
なるハードウェア構成要素で構成可能であり、様々なサイズおよび様式(例えば
、ラップトップ、パームトップ、ペントップ、メインフレーム等)で作成可能で
ある。本明細書に記載の処理を行うのに適切な任意のプラットフォームが、本発
明における使用に適切である。
【0050】 図2Bは、コンピュータ(例えば、コンピュータ200)に通常見受けられ得
るサブシステムを示す。
【0051】 図2Bにおいて、ボックス220内のサブシステムは、内部バス228と直接
インターフェースをとる。このようなサブシステムは典型的には、コンピュータ
システム(例えば、図2Aのキャビネット206)に収容される。サブシステム
は、I/Oコントローラ222、システムメモリ(または「RAM」)224、
CPU226、表示アダプタ230、シリアルポート240、固定ディスク24
2、ネットワークインターフェースアダプタ244を含む。バス228を用いる
と、サブシステム間で各サブシステムがデータのやり取りを行うことが可能とな
り、また、最も重要なことに、各サブシステムがCPUとデータのやり取りを行
うことが可能となる。外部デバイスは、バス228上のサブシステムとインター
フェースをとることにより、バス228を介してCPUまたは他のサブシステム
と通信を行うことができる。したがって、モニタ246は表示アダプタ230に
接続し、相対(relative)ポインティングデバイス(例えば、マウス)
はシリアルポート240を通じて接続する。キーボード250等のいくつかのデ
バイスは、例えば割込みコントローラおよび関連付けられたレジスタを介して通
信を行うため、主データバスを用いずに直接的手段によってCPUと通信するこ
とができる。
【0052】 図2Aに示す外部の物理的コンフィギュレーションの場合と同様に、多くのサ
ブシステムコンフィギュレーションが可能である。図2Bは、1つの適切なコン
フィギュレーションを例示したものに過ぎない。図2Bに示すもの以外のサブシ
ステム、構成要素またはデバイスの追加が可能である。図2Bに示すサブシステ
ムを全て使用しなくても、適切なコンピュータシステムが達成可能である。例え
ば、スタンドアロンコンピュータはネットワークに接続する必要がないため、ネ
ットワークインターフェース244は不要となる。他のサブシステム(例えば、
CDROMドライブ、グラフィックアクセラレータ等)が、本発明のシステムの
性能に影響を与えることなくコンフィギュレーションに組み込み可能である。
【0053】 図2Cは、典型的なネットワークを一般化した図である。
【0054】 図2Cにおいて、ネットワークシステム260は、インターネットに接続され
ている複数のローカルネットワークを含む。本明細書中、特定のネットワークプ
ロトコル、物理層、トポロジーおよび他のネットワークプロパティを提示するが
、本発明は、コンピュータシステム間でデータのやり取りを行う任意のスキーム
での使用に適切である。また、本発明は、ネットワークに接続されていないスタ
ンドアロンコンピュータにおいても実施可能である。
【0055】 ユーザ1のコンピュータは、サーバ1に接続される。この接続は、ネットワー
ク(例えば、イーサネット(登録商標)、非同期伝送モード(Asynchro
nous Transfer Mode)、IEEE規格1553のバス、モデ
ム接続、ユニバーサルシリアルバス等)によって為され得る。通信リンクは、有
線である必要はなく、赤外線、電波伝送等であり得る。サーバ1は、インターネ
ットに接続される。インターネットは、サーバルータ262の集合として象徴的
に図示されている。情報の配信または通信用にインターネットを用いることは、
本発明の実施にとって必ずしも必要ではなく、これは、単に以下の好適な実施形
態を説明するためだけに使用されるという点に留意されたい。また、サーバコン
ピュータの使用ならびにサーバ機器およびクライアント機器の指定は、本発明の
実施にとってそれほど重要ではない。ユーザ1のコンピュータは、インターネッ
トに直接接続可能である。サーバ1のインターネットへの接続は典型的には、比
較的高帯域の伝送媒体(例えば、ラインT1またはラインT3等)で為される。
【0056】 同様に、ユーザ1のコンピュータとは別の場所に、ローカルネットワークを用
いた他のコンピュータが264に示されている。264におけるコンピュータは
、サーバ2を介してインターネットに接続される。ユーザ3およびサーバ3はさ
らに第3の設備を示す。
【0057】 2.本発明の概要 図3Aは、ランタイム時にコンパイルプログラムに機能を付加するアプローチ
全体における基本的工程を示すフローチャート100を示す。
【0058】 このシステムは、4つの段階を有するとみなすことができる。第1の段階はプ
ログラム変換段階であり、この段階では、既存のプログラム(例えば、アプリケ
ーションプログラム等)を変換して初期実行可能オブジェクトに組み込む。第2
の段階は初期実行段階であり、この段階では、初期実行可能オブジェクトをエン
ドユーザのコンピュータに転送し、そのオブジェクトをエンドユーザのコンピュ
ータで実行する。この段階では、プログラムは既に変換されているものの、プロ
グラムには改変された機能は未だ供給されていない点に留意されたい。すなわち
、この段階では、プログラムは未だオリジナルのソースコードによって規定され
たオリジナルの目的通りに実行する。第3の段階はアドオン開発段階であり、こ
の段階において、ソースコード中のアイテムを改変し、プログラムの初期構造か
らの情報を用いて新規モジュールを構築する。第4の段階はアドオン実行段階で
あり、この段階において、新規モジュールを、エンドユーザ機器に転送し、初期
実行可能オブジェクトに「フック」し、そして実行する。第4の段階において、
オリジナルの実行可能オブジェクトが新規モジュール中の機能にアクセスする様
式を制御することにより、スタートアップおよびランタイムの両方のダイナミッ
クな改変が達成される。
【0059】 図3Aにおいて、サブ工程304は、プログラム変換段階において、オリジナ
ルのアプリケーションプログラムを作成および実行する第1の段階を構成する。
プログラマが標準的な方法でプログラム(例えば、アプリケーションプログラム
等)を作成するサブ工程302が行われており、これによりシンボルリファレン
スのリダイレクトを提供できるように変換可能なプログラムが存在すると仮定す
る。好適な実施形態は既存のプログラムを変換するように設計されるが、プログ
ラムは、本発明のリダイレクトメカニズムのプログラムへの提供と同時に作成可
能である点に留意されたい。サブ工程304において、サブ工程302において
作成されたソースコードを本発明のソフトウェアルーチンによって処理し、ラン
タイムにおいて1つ以上のシンボルリファレンスのリダイレクトを提供する。図
3A中にサブ工程304として示すプロセスにおいて、補助ファイルを生成し、
これにより、その後のアドオン開発段階においてプログラムのランタイム動作を
改変するための新規モジュールの作成、コンパイルおよびリンク接続を支援する
【0060】 次いで、サブ工程306を行う。このサブ工程306では、サブ工程304の
結果生成されたプログラムをロードし、実行する。サブ工程306は本発明の初
期実行段階を示し、プログラムが自身のシンボルリファレンスを効率的にリダイ
レクトする手段を備える場合、初期プログラムを実行する。サブ工程306にお
いてロードされ、実行されるプログラムの動作は、サブ工程302において開発
されたソースコード仕様から作成された従来のプログラムの動作と同一である。
以下により詳細に説明するように、ランタイムにおいて本発明の様式でシンボル
リファレンスをリダイレクトすると、実行プログラムのサイズが少し増加し、実
行プログラムの実行時間も少し増加し得る。しかし、これらの増加は、ほとんど
の場合に無視できるほどのごくわずかなものである。また、これらの増加は、ラ
ンタイムの機能を完全に改変することができるコンパイルプログラムを有する利
点とのトレードオフである。
【0061】 図3Aに戻って、本発明の第3の段階すなわちアドオン開発段階は、サブ工程
308、309および310を含む。
【0062】 サブ工程308において、プログラマは、サブ工程302において作成された
オリジナルのプログラムコードまたはデータの一部を改変する。以下に示すよう
に、本発明の利点は、サブ工程302を行うプログラマと異なるプログラマが、
サブ工程308を容易に行うことができる点である。オリジナルのプログラムを
改変するプログラマまたは他の人物は、従来のアプローチの場合に必要とされる
ようなオリジナルのプログラムについての設計、構造およびインプリメンテーシ
ョンについての深い知識を持っていなくてもよい。本発明の主要な利点は、デー
タ構造(例えば、画像、音声および映像等)の変更が非常に簡単である点である
。これらのアドオン開発段階のサブ工程は非常に簡単であるため、プログラムミ
ングの知識は不要であり、設計者または他の人物がこれらのサブ工程を達成する
ことができる。好適な実施形態ではプログラマによるオリジナルコードの改変を
想定しているが、アドオンコードをスクラッチから新規に開発することも可能で
ある。しかし、オリジナルのコードの作業部分から開始する方がより効率の良い
アプローチである場合が多い。サブ工程308において、既存のコードまたはデ
ータ構造を改変し、新規コードまたはデータ構造を導入し、既存のコードまたは
データ構造をディセーブルすること等ができる。
【0063】 サブ工程308に示すような改変を行った後、サブ工程310を行う。サブ工
程310では、サブ工程304において生成された補助ファイルを用いて改変を
コンパイルする。サブ工程309はオプションのサブ工程であり、サブ工程30
9において、プログラマもしくは別の人物またはプロセスが、シンボルリファレ
ンスをリダイレクトする様式を規定する。通常は、アイテムの置換を簡単にする
ために、サブ工程309は、コンパイル中に呼び出されるルーチンによって自動
的に行われる。しかし、シンボルリダイレクトの発生様式への制御をより良好に
するために、プログラマは、スクリプト言語を生成および改変することによって
命令を手入力で提供し得る。この点について、以下のセクション5においてより
詳細に説明する。
【0064】 サブ工程310では、改変をコンパイルするだけでよく、この点において、プ
ログラムのコンパイルバージョンを作成する場合に、使用されるモジュール全て
における全規定、リファレンスおよび他の構造を必要とする従来技術のほとんど
のアプローチと異なる。本発明のサブ工程310は、リンク接続に必要な(通常
は非常に多くの)シンボルリファレンスのいずれかを解明するよう機能する補助
ファイルを用いることにより、コード、データ等のごく一部をコンパイルするこ
とを可能にする。
【0065】 サブ工程312は、プログラムのアドオン実行の第4の段階である。この段階
では、ランタイムプログラムへの改変は、実行可能な命令、データ、リソース等
を含む改変された「新規モジュール」の形態であり、このランタイムプログラム
への改変は初期プログラムとして同じコンピュータにロードされていると仮定す
る。ローディングを同じコンピュータに行うと、実行速度が高速化することが確
実になる。しかし、プログラムの一部、データ、プロセスまたは他のアイテムを
ネットワーク中の異なる機器に配置および実行することができる。例えば、初期
実行可能オブジェクトがユーザ2の機器に常駐する新規モジュールにアクセスす
る間に、その初期実行可能オブジェクトはユーザ1のコンピュータ(図2C)上
で動作可能である。
【0066】 スタートアップ時またはランタイム間のいずれかにおいて、オリジナルのプロ
グラムのシンボルリファレンスを改変して、新規モジュールによって提供される
新規アイテムを「指示(point)」させる。シンボルリファレンスのリダイ
レクトは、プログラムコードを実行する前のスタートアップ時に1回だけ行うか
、または、スクリプト命令を同時実行するメカニズム等のメカニズムを用いてプ
ログラムコードを実行するときにダイナミックに何回も行うことができ、これに
ついて以下のセクション5において説明する。
【0067】 したがって、図3Aは、本発明の方法の広範な基本的工程およびサブ工程を示
す。本発明の局面は、コンピュータプログラムの開発の間および実行の間のどち
らにでも発生する点に留意されたい。すなわち、サブ工程302、304、30
8、309および310は一般的には、コンピュータプログラムの開発と関連す
る。サブ工程306および312は一般的には、例えば市販のプログラムの購入
者またはライセンスを受けたコンピュータプログラムの「エンドユーザ」による
コンピュータプログラムの実行または末端使用と関連する。
【0068】 本発明は、コンピュータプログラムの開発および使用の様々な局面において利
点を提供する。コンピュータプログラムの開発者にとって、本発明は、オリジナ
ルのプログラマが、本発明を取り入れるために自身のプログラミングツール、環
境、方法論等を変更する必要なく、コンピュータプログラムを従来通りに開発す
ることを可能にする。実際、任意のコンパイルされたコンピュータプログラムは
本発明の利点の影響を受け易い。本発明は、既存のプログラムを改良してランタ
イムの改変が可能となった場合、コンピュータプログラムの既存のソースコード
が利用可能な状態(on−hand)であることさえも必要としない。本発明の
プロセスのいくつかの関数は、オブジェクトコードモジュールおよびコンパイラ
により生成されたファイル(例えば、シンボルテーブル)において行われるため
、オリジナルのソースコードを利用可能な状態にする必要はない。したがって、
例えば、ソースコードが利用不可能である場合、広範囲のリバースエンジニアリ
ングを行わずにデータ構造をプログラムにフックすることができる。
【0069】 本発明の技術は、あらゆるコンピュータ言語、開発環境、プログラムの種類等
に適応可能である。サブ工程304は、オリジナルのプログラマ以外の人物によ
っても行うことができ、オリジナルのプログラムの詳細な知識が無くても行うこ
とができる。実際、サブ工程302、304および308〜310は、互いに影
響を受けることなく、かつ他のサブ工程のいずれかを行うために必要な詳細な知
識を実質的に必要とすることなく行うことができる。
【0070】 本発明の利点は、エンドユーザが本発明により提供される利点を達成する際に
何らかの特殊な工程を行うことを必要としない点である。サブ工程306では、
サブ工程304において生成された提供物(provision)に関係なく、
任意のプログラムと同様にプログラムをロードし、実行する。サブ工程312に
おいて、シンボルリファレンスのリダイレクトは全て、実行プログラムの一部ま
たは実行プログラムに従属するプログラムであるコードによって自動的に実行さ
れ、オペレーティングシステムによって開始され得、または、これは、エンドユ
ーザの介入を有するかあるいは有さない他の手段によって行われ得る。
【0071】 表Iは、ソースコードモジュールおよびそのコンテンツの例である。表Iは、
サブ工程302(すなわち、プログラム作成動作)においてプログラマが書き得
る具体例を大幅に簡略化した例である。
【0072】
【表1】 プログラムは典型的には多くのモジュールから構成される。モジュールは実質
的には、人間が読むことのできる形式のプログラムコードまたはデータを含む別
個のファイルに過ぎない。ファイルを別個にすると、プログラムの一部をワード
プロセッサにロードする点およびプログラムの一部を操作する点に関して、プロ
グラムの動作が容易になる。また、各モジュールは、関連の関数を実行するコー
ドの一部を論理的に含む。各モジュールは典型的には、そのモジュール内に内蔵
される関数、処理、データ等の種類を示す名称を有する。
【0073】 表Iにおいて、モジュール「Example」は、11行のソースコードを含
む。このコードはCコンピュータ言語で書かれており、非常に単純な形式ではあ
るが、このアプリケーションにおいて以下に説明するような使用可能なオブジェ
クトモジュールを実際にコンパイルおよび生成する。
【0074】 当業者には明らかなように、このExampleのモジュール中のコードは、
「シンボル」を用いることにより、コード構造およびデータ構造をリファレンス
する。シンボルは、プログラマが作業を行う際に論理的かつ容易に記憶可能な環
境を提供するよう選択される、英数字の名称に過ぎない。
【0075】 例えば、表Iにおいて、モジュールExampleは、以下のシンボルに対す
るリファレンスを含む:「funct_B、」「string_ptr、」「f
unct_A」および「printf」。各リファレンス対象シンボルは、プロ
グラムを構成するモジュールの1つにおいて「規定」されなければならない。例
えば、シンボル「funct_A」は、シンボル「funct_A」をリファレ
ンスする同じモジュール(すなわち、Exampleモジュール)において規定
される。
【0076】 それとは対照的に、シンボル「funct_B」は、別のモジュール(すなわ
ち、モジュールExample2)において規定される。このExampleに
おいて、シンボル「funct_A」および「funct_B」は、この場合は
何らかのアクションを全く行わない関数またはサブルーチンである。「func
tion_A」および「funct_B」に対するリファレンスを、モジュール
Exampleの5行目および6行目にそれぞれ示す。
【0077】 シンボル「string_ptr」は、モジュールデータにおいて規定される
【0078】 シンボル「printf」は、表Iに示すモジュールのいずれにおいても規定
されず、その代わり、このシンボルは、Cコンピュータ言語のインプリメンテー
ション全てを備える標準的ライブラリにおいて規定される関数である。通常は、
シンボルをリファレンスするモジュールの外部に規定を有するシンボルは、モジ
ュールの開始部分において「外部」シンボルとして宣言される。これは、モジュ
ールExampleの最初の2行にそれぞれ示すシンボル「func_B」およ
び「string_ptr」にも当てはまる。シンボル「printf」は、C
コンピュータ言語に対して暗黙であり、C「ライブラリ」によって指定されてい
るため、外部シンボルとして宣言されない。
【0079】 モジュールExample、Data、Example2、の各々がコンパイ
ルされて、対応するオブジェクトファイルが生成される。例えば、モジュールE
xampleは、通常、「Example.c」または「Example.cc
p」の名前を有し、これらは、「Example.obj.」の名前を有するオ
ブジェクトモジュールにコンパイルされる。これらのモジュールは、「.lib
」拡張子を有するライブラリファイルと共に、リンカーを介してリンクされて、
ファイル名に「.exe」拡張子を有する実行可能オブジェクトまたは実行可能
イメージとしばしば呼ばれる単一の「実行可能な」ファイルを生成する。
【0080】 図3Bは、上の表Iに示したソースコードに対応する実行可能オブジェクトの
「メモリマップ」の図を示す。図3Bは、従来の技術を用いて達成される、結果
として得られる実行可能オブジェクトの典型例であることに留意されたい。実行
可能オブジェクトおよびランタイムイメージを扱う本発明の局面の概観を提供す
るために、従来技術のメモリマップと並べて、本発明を用いて得られるメモリマ
ップを図3Cに示す。本発明を用いて得られるメモリマップは、後で説明する。
【0081】 図3Bは、表Iのオリジナルプログラムの4個の異なるコンポーネントまたは
モジュールならびにさらなるスタートアップセクションに対応する5つの独立し
た領域を有する、実行可能オブジェクトを示す。
【0082】 図3Bにおいて、実行可能オブジェクト320は、スタートアップセクション
322、Exampleモジュールに対応するセクション324、Exampl
e2モジュールに対応するセクション326、Dataモジュールに対応するセ
クション328、およびライブラリルーチンに対応するセクション330を含む
。スタートアップセクション322については、ランタイムイメージ実行を参照
しつつ、後でより詳細に説明する。Exampleモジュールに対応するセクシ
ョン324は、W0、W1、W2等で示すワードの例(通常、それぞれ16ビッ
ト、32ビット、または64ビット)を含む。概して、コンピュータプログラム
内には、数千、数万、あるいは数百万以上のワードが含まれる。コンピュータプ
ログラムはまた、コンピュータプログラムのサイズに応じて、数十または数百の
モジュールを含み得る。
【0083】 図3Bはまた、「WN1」、「WN2」等のワードの例を示す。これらのワー
ドは、シンボル参照を実行するコンピュータマシン命令に対応する。そのような
ワードの例は、データ構造、命令の呼び出し(invocation)、サブル
ーチンへのジャンプまたはサブルーチンの呼び出し、トラップまたは例外、ある
いは任意の他の参照、フロー制御、または命令またはデータアイテムの使用に対
して、可変な名前または参照を使用することであり得る。
【0084】 例えば、ワードWN1は、表Iに示すシンボル「funct_A」への参照を
示し得る。シンボル「funct_A」についての規定はWN1と同じモジュー
ル内に存在するので、WN1〜WN5による参照は、Exampleモジュール
に対応する同じセクション324内の別のロケーションへの矢印によって示され
る。同様に、ワードWN2は、シンボル「funct_B」に対応する規定に対
する参照に対応する。「funct_B」についての規定はモジュールExam
ple2内に存在するので、図3Bは、WN2〜WN6までの参照を示す。ここ
で、WN6は、モジュールExample2に対応するセクション326内に存
在する。
【0085】 同様の様態で、WN3は、セクション330内にWN8として示す、シンボル
名「printf」を有するライブラリ関数のアクセスまたは参照を示す。WN
4は、Dataモジュールに対応する、セクション128内のWN7において開
始される、規定された「string_ptr」への参照を実行する。
【0086】 通常、このような参照は、アドレス、あるいは命令またはデータアイテムのロ
ケーションを識別する他の手段を用いる。アイテムへの参照を達成する任意の手
段が、本発明と共に使用するのに適している。
【0087】 図3Dは、図3Bの実行可能オブジェクト320に対応するランタイムイメー
ジ340を示す。
【0088】 図3Cにおいて、ランタイムイメージ140は、図3Bの実行可能オブジェク
ト120と同じセクションを含む。ランタイム時において、実行可能オブジェク
ト320はメモリ内にロードされ、固定されたアドレスが、実行プログラムによ
って使用され得る命令、データ、ならびに他のオブジェクトまたはアイテムに割
り当てられる。従来技術のデバイスの処理は、ダイナミックリンクライブラリ(
dynamically linked library)(DLL)342と
呼ばれることに留意されたい。スタートアップ時に、スタートアップセクション
344におけるスタートアップコードが、実際のプログラムにおける命令の実行
に先立って呼び出される。セクション344におけるスタートアップコードは、
DLL342をロードし、DLL342内のアイテムへの参照を解消することに
よって「ダイナミックにリンクする」ことを確立し得る。
【0089】 例えば、図3Cにおいて、セクション348は、DLL342のローディング
、ロードされた情報のランタイムイメージ340との関連づけに対応する。ラン
タイムイメージ340内において、マシンワードWN8は、ロードされたDLL
のセクション348内のWN9において開始されるオブジェクトを参照する命令
である。例えば、WN8は、DLL342によって提供された関数への参照であ
り得る。それは参照されたアイテムが存在するDLL342のローディングより
も前に知られていないので、WN9への参照は、DLL342のローディングが
完了するまで確立され得ない。従来技術におけるDLLの使用は、オリジナルプ
ログラムのプログラマーが、参照されている関数が、ランタイム時にロードされ
るDLL内に存在することを明確に宣言(declare)することを要求する
。さらに、関数は、通常、所与のDLL内に存在する多くの関数のうちの1つで
ある。DLLに関する関数の集合体全体が、ランタイム時にロードされる。プロ
グラムのコード内の、DLL内のアイテムへの参照を解消することは、「暗黙の
」リンクを用いることにより、スタートアップ時またはランタイムの間に実行さ
れ得る。
【0090】 従来技術の図3Bおよび図3Dについて上で説明したが、図3Cおよび図3E
を以下に提示して、本発明の実行可能オブジェクトおよびランタイムイメージ構
成がどのように異なるかを示す。
【0091】 図3Cは、本発明の実行可能オブジェクト360を示す。実行可能オブジェク
ト360は、表Iのソースコードによって説明したのと同じモジュールおよび関
数を実行する。参照の各々が実行可能オブジェクト360のメモリマップの下部
に示した表362を介することを除いては、従来技術の例における図3Bの実行
可能オブジェクト320においてと同様に、同じワードまたはアイテムの間の同
じ参照が、図3Cの実行可能オブジェクト360内に存在することに留意された
い。例えば、WN1は、従来技術の図3BにおいてWN5を直接参照するが、こ
こでは、表362内のエントリVF1を参照する。表362内のエントリVF1
は、次はWN5を参照する。この、実行可能オブジェクト360内の、シンボル
の「間接的な」または「一般化された」参照は、プログラム変換段階(Prog
ram Conversion Phase)内のプログラムを構築するために
使用される本発明のツールおよびユーティリティによって自動的に形成される。
プログラム変換段階および他の段階については、好適な実施形態の詳細な説明の
セクションにおいて後で説明する。
【0092】 図3Eは、本発明のランタイムイメージ380を示す。図3Bと図3Cとの間
の対応が、本発明と従来技術との差を示すのと同様に、同じセクションを用いた
点で図3Eは図3Dに対応する。しかし、参照は表362を介しているので、シ
ンボル参照(symbolic reference)を所望のように恣意的に
変更して、ランタイム時に、コンパイルされたコードの関数を変更することが可
能である。
【0093】 例えば、(表IのモジュールExampleにおけるシンボルstring_
ptrへの参照に対応する)WN4からの参照は、本来はVF3からWN7にわ
たるものであったが、図3Eにおいては、VF3を介してWN9へ参照するよう
に示す。同様に、WN3からVF4を介したWN8への参照は、代わりの参照W
N7に修正されている。WN9で開始するオブジェクトは、ランタイム時におい
て追加され、表362を介したシンボル参照にリンクされたプログラムコード、
データ等であり得ることに留意されたい。図3Eの新たなモジュール364は、
最初のプログラムコードにおいて新たなモジュール364が参照されている必要
がない点で、図3CのDLL342とは異なる様態で振る舞う。言い換えると、
新たなモジュール364は、表Iに示すソースコード内に規定または宣言されて
いない「new_funct」等のシンボルを有し得る。
【0094】 あるいは、ワードWN9で始まるオブジェクトは、本来WN7において開始す
るように規定されたstring_ptr等の、修正、置換、または変更された
バージョンのオリジナルオブジェクトであり得る。この様態で、新たなオブジェ
クトが、オリジナルプログラム内のオリジナルオブジェクトと同じ名前で、置換
され得る。「ヌル(null)」関数を既存の関数と置換することにより、その
関数は効果的に除去され得る。例えば、ビットマップイメージにおける全てのデ
ータバイトを除去することにより、そのイメージは、効果的にオリジナルプログ
ラムから消去され得る。異なるイメージを置換し、オリジナルプログラム内の名
前と同じシンボル名を用いることにより、そのオリジナルイメージは、効果的に
置換される。新たなシンボルを、新たなモジュールからロードされた、新たに規
定されたオブジェクトについてのテーブルエントリとして提供することにより、
コンパイルされたプログラムのランタイムイメージにアイテムが追加され得る。
【0095】 以下に説明するように、新たなモジュール364は、修正された関数を提供す
るのに非常に適している。DLLとは異なり、新たなモジュール364は、オリ
ジナルプログラムモジュールならびに後で説明する適切な補助ファイルが利用可
能である場合の環境についての詳細な知識無しで、コンパイルされ、リンクされ
得る。したがって、本発明のシステムで、コンパイルされたプログラムの関数を
変更することは、特にプログラマー、デザイナー、またはオリジナルプログラム
の詳細の全てに精通しているわけではない他の人にとって、かなり簡単である。
プログラムを修正するために、ランタイムイメージが既にローディングされてい
るかもしれないDLLを処理することに関する知識および準備は必要でない。こ
の様態で生成された新たなモジュールは、類似のDLLアプローチよりも大幅に
小さくなり得る。
【0096】 本発明の特徴は、ランタイムイメージ380を実行している間に、参照の変更
を可能にする。つまり、本発明の一実施形態は、いつシンボル参照がリダイレク
トされる(redirect)かを特定する、解釈された制御言語を提供する。
そこで、例えば、ランタイムイメージ380の実行中における任意の時点におい
て、WN1からVF5を介してWN5への参照を、代わりにWN8を参照するよ
うに切り換え得る。そのような参照スイッチングは、(1)特定された時間間隔
の後、(2)特定の命令が実行される時、(3)割り込み(interrupt
)が受け取られる時、または(4)所定のユーザ入力信号が検出される時等の、
異なる基準に基づいて実行され得る。他の基準も可能である。コンピュータプロ
グラムまたは検出された信号の任意の条件または状態が、基準となり得る。
【0097】 プログラム内の全てのシンボルは、別のアイテム(例えば、命令、データ、リ
ソース等)にリダイレクトする、または「フック」しておくことが可能であるの
で、オリジナルプログラムは、その内部でさらなるプログラムの展開(deve
lopment)が起こり得る、単なるフレームワークとみなし得る。何処でど
のようにサブルーチンまたはデータ構造が使用されるか等、プログラムの広い上
位の設計(top−level design)のみが明らかになればよい。例
えば、コンピュータゲームプログラムにおいて、背景シーン内に広告イメージを
表示するデータ構造は、新たなイメージを含む新たなモジュールの1回のダウン
ロードによって更新され得る。新たな「アドオン」モジュールを構成するために
は、プログラムにおいて元々使用されたデータ構造のシンボル名を知ることが要
求されるだけである。既存のランタイムプログラム内に新たなイメージ(つまり
、アドオンモジュール)をフックするためにシステムによって提示されたオーバ
ーヘッドは無視できるので、「アドオン」モジュールサイズは、新たなイメージ
と実質的に同じサイズである。
【0098】 既存のプログラムにおける任意のサブルーチンまたは関数は、新たなモジュー
ルサブルーチンまたは関数でフックされて、オリジナルのサブルーチンまたは関
数と置換され得る。この様態で、従来はパッチによって達成されたバグ訂正(b
ug fix)が、いっそう簡単に設計され、自動的且つ迅速に組み込まれる。
つまり、新たなサブルーチンを実行するために、ユーザの介入が必要でなく、且
つ、スタートアップ時に認知可能な遅延がない。ベースプログラムが同じであっ
ても、異なるユーザがそれぞれのマシン上で異なる関数を有するプログラムを実
行できるように、カスタマイズされたプログラムが可能である。例えば、音楽シ
ーケンシングプログラム(music sequencing program
)において、垂直タイムライン関数を有する新たなモジュールをダウンロードす
ることを選択したユーザについてのみ、水平タイムラインを表示するサブルーチ
ンを、垂直の様態にタイムラインを合わせる新たなモジュールと置換することが
できる。第三者のアドオン(add−on)は簡単な事項となり、ソフトウェア
の正規製造者とは異なる会社が関数を修正して、改良された、または単に異なる
だけの、ソフトウェア製品を提供することができる。
【0099】 本明細書中、プログラム内の全てのシンボルをリダイレクトするものとして本
発明を説明するが、リダイレクトされるシンボルの数は自由に選択される。ある
プログラムについて、本発明の利点の多くが、シンボルのサブセットのみをリダ
イレクトすることにより達成され得る。しかし、プログラムを変換して全シンボ
ルのリダイレクトを提供することの利点は、任意の予測されないシンボルを、後
からリダイレクトすることができる点にある。
【0100】 3.オリジナルプログラムの変換 本発明の好適な実施形態は、SegaSoft Corporationによ
って開発された「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内のステップを実行する。
【0101】 SDKによって提供されるDynaPlayツールにおいて、プログラムを変
換して、プログラム内のシンボル参照をリダイレクトすることを提供するプロセ
ス(すなわち、図3Aのサブステップ304を実行すること)を、プログラムを
「ダイナマイズする(dynamizing)」と呼ぶ。サブステップ304を
実行した後、プログラムは、ランタイム時にそのシンボル参照を容易にリダイレ
クトし得るという点で、「ダイナマイズ」されていると言える。
【0102】 Add−On Development Phaseプロセスの一部として形
成された新たなモジュールを、「ダイナモジュール」と呼ぶ。ダイナモジュール
は、図3Aのステップ308および310を実行した結果である。
【0103】 図4は、本発明のシステムのProgram Conversion Pha
seを示す。
【0104】 図4において、「Hangman32.cpp」と呼ばれるプログラムの例示
的な変換を示す。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」というファイルを生成する。これらのファイルはそれぞれ、ダイナマイ
ズされたプログラムを実行するため、ならびに、新たなアドオンモジュールまた
は「ダイナモジュール」を構築するために使用される。
【0105】 図4は、フローチャート400を示す。図4において、ファイルを四角の中に
示し、プロセスを楕円の中に示す。ステップ402におけるファイルHangm
an32.cppは、コンパイラ404によって処理されるソースコードファイ
ルである。コンパイラ404は、標準コンパイラであり得る。好適な実施形態に
おいて、コンパイラは、シンボル名を出力(.obj)ファイル内に挿入するこ
とに向けられている。これらのシンボル名は、以下に説明するように、後で置換
される。コンパイルプロセス(compilation process)の結
果は、ステップ406における「Hangman32.obj」というオブジェ
クトファイルである。本実施例は1つのモジュールおよびそれから得られる1つ
のオブジェクトファイルを用いるが、任意の数のモジュール、オブジェクトファ
イル、ライブラリ等が使用され得る。オブジェクトファイルは、任意の標準リン
カであり得るリンカ410に提出される。リンカは、全てのシンボルおよびそれ
らのシンボルを規定しかつ用いるモジュールのリストが、ステップ416におけ
るHangman32.mapファイル等のファイル内に生成されるように、.
mapファイルを生成するように向けられる必要がある。
【0106】 マップファイルは、Dynamap.exe420への入力として用いられる
。Dynamap.exeは、.mapファイル中のエントリを処理することに
より、422において、各シンボルが「エクスポート」された.defファイル
を作成する。Hangman32.cpp中の典型的なダイナマイズされる(d
ynamized)関数は、「OnGameNew()」関数である。この関数
は、ユーザが新しいゲームを選択するときに呼び出される。このように、関数の
後の改変を可能にすることは、例えば、新しいパラメータを初期化するために有
用である。Hangman32.mapファイル中のOnGameNew()の
エントリは、表IIに示す通りである。
【0107】
【表2】 DYNAMAPコマンドによって生成されるDEFファイルにおいて、表II
Iに示されるように同じシンボルがEXPORTSセクションに現れる。表IV
は、.defファイル中のエントリのより大きな(それでも部分であるが)リス
トを示す。完全なリストは、数百個のエントリを含む。
【0108】
【表3】
【0109】
【表4】
【0110】
【表5】
【0111】
【表6】
【0112】
【表7】 .defファイルは、エクスポートされる各シンボルを指定することにより、
プログラムプロジェクト中のいかなるモジュールに対してもこれらのシンボルが
外的に定義されているとシンボルへのリファレンスを扱うプロセスが仮定するこ
とを可能にすることによって、リダイレクトを受けるシンボルのさらなる構築を
セットアップしている。シンボルは、その強制された「エクスポート」指定とと
もに、構築物に用いられている他の標準的なファイルに伝播する。例えば、.d
efファイルは、標準的なライブラリマネージャであるライブラリマネージャ4
24に供給される。ライブラリマネージャは、アドオンダイナモジュールが作成
されるアドオン開発(Add−On Development)フェーズ(後述
)で後に用いられる補助的ファイルである、DynaPlay.libファイル
を生成するように指示される。ライブラリマネージャはまた、プログラムプロジ
ェクトのオブジェクトモジュールの第2のリンキングに用いられるDynapl
ay.expファイルを、428において生成する。
【0113】 オブジェクトモジュールの第2のリンキングは、置換されたシンボル名を有す
るプログラムを作成するために用いられる。これが最初の本当のリンクである。
なぜなら、リンカ410による第1のリンキングは、.mapファイルを生成す
るためのみに用いられたからである。第2のリンキングの前に、Dynaobj
.exe408は、プログラムの.objファイル(この場合Hangman3
2.obj)をDynaobj.exeへの入力として、実行される。これによ
り、.dbj拡張子を有する「ダイナマイズ」されたオブジェクトファイルが得
られる。
【0114】 各ダイナマイズされたオブジェクトファイルの定義は、オリジナルのシンボル
とは異なる改変シンボルを有する。すなわち、各オリジナルのシンボル定義の前
に「dyna_」が付されることにより、例えば「OnGameNew()」の
定義は、Hangman32.dbj内において「dyna_OnGameNe
w()」となる。.dbjファイルは、ランタイム時においてdynalib.
dllライブラリからルーチンを呼び出すためのコードを挿入する、Dynal
ib.objとリンクされる。これらのルーチンは、プログラム実行以前および
プログラム実行中の両方において、シンボルのリファレンシングのリダイレクト
を決定する。dynalib.dll内のルーチンは、セクション5において後
述される。
【0115】 .dbjファイルはまた、414に示すようにDynaobj.exeによっ
て作成される構造である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つ以上のテーブルが存在してもよい。
【0116】 好適な実施形態においてはシンボル定義が改変されるが、シンボル定義を同一
に保持しながらシンボルリファレンスを改変することにより、同じシンボルイン
ダイレクション効果を達成することが可能である。すなわち、接頭辞「dyna
_」が、シンボル定義に対する各リファレンスに対して付加され得る。次に、テ
ーブルは、置換されたシンボルリファレンスを、オリジナルの名前を有する定義
と対応付ける。
【0117】 間接シンボルリファレンシングを達成するための他のメカニズムが可能である
。例えば、テーブルに代えて、コードのうち変更されるべきシンボルリファレン
スを有する部分へのポインタのリストを用い得る。こうすれば、2つのアドレス
フェッチの必要がなくなる。例えば、図3Cにおいて、WN1におけるマシン命
令がVF1にあるアドレスのフェッチを起こした後、ターゲット命令WN5のフ
ェッチが行われるという本アプローチは、WN5が実行され得る前に余分なアド
レスフェッチを起こしている。もし代わりに、WN1が直接WN5を指すことに
よりWN5を直接得ることができれば、プログラムの実行はより速くなる。その
場合テーブル362がWN1へのポインタを有することにより、WN1からWN
5へのリファレンスがリダイレクトされる必要がある場合にはWN1の値を改変
することにより実現可能である(これは、WN1が直接アドレスターゲット分岐
を含んでいることを前提としている)。しかしこのアプローチにおける欠点は、
WN5を元々アクセスするプログラム中の各位置に対して、ポインタが存在して
いなければならないことである。本アプローチでは、単一のテーブルエントリを
、任意のシンボルに対する以前のリファレンスの全てをリダイレクトするように
変更することのみを必要とする。
【0118】 リンカ418は、全てのオリジナルのシンボルリファレンスを、Dynapl
ay.exp428中のオリジナルのシンボル名を用いて解決する。図4のリン
カ418によりおこなわれるリンク動作の結果は、Hangman32.exe
という実行可能物426である。この実行可能物は、図3Cのテーブル362な
どのデータ構造を介してシンボルリファレンスがリダイレクトされるようになっ
たという意味において、図3Cの構造と同様な構造を有している。
【0119】 最後に、dynagen.exe432が、実行可能なアプリケーションであ
るHangman32.exe上で実行されることにより、Hangman32
.vfsが作成される。.vfsファイルは、「仮想ファイルシステム(vir
tual file system)」の一部である。このファイルは、ランタ
イムにおいてシンボルリファレンスを満たすためにどのモジュール、関数、プロ
セス、データ構造などが用いられるかを指定するために、用いられる。システム
のこれらの特徴を以下により詳細に説明する。
【0120】 図4に示すステップを実行することによりプログラムがダイナマイズされた後
、「送達可能な」ファイルが作成される。好適な実施形態においては、送達可能
なファイルは、解凍されて実行可能オブジェクトhangman32.exe;
仮想ファイルシステムファイル、hangman32.vfs;およびダイナミ
ックリンクされたライブラリdynalib.dllとなる、圧縮ファイルであ
る。ユーザのマシン内におけるこれらのファイルの所在を、図6Aにおいてファ
イル556、558および560としてそれぞれ示している。好適な実施形態に
おいて、送達可能なファイルは拡張子「.dyp」を有する。ユーザは、.dy
pファイルを解凍し、「dynainstall.exe」プログラム(解凍フ
ァイルとして提供される)を実行し、インストールされたプログラムを実行する
ことにより、ファイルをインストールしなければならない。ユーザは、プログラ
ムのダイナマイズされたバージョンを、標準的な方法でロードして実行すること
かできる(すなわち、実行可能物に対応付けられたアイコンをクリックして、W
indows(登録商標)95において実行可能物の名前を指定することにより
)。
【0121】 図6Aは、ユーザのコンピュータ内のダイナマイズされたプログラムを実行す
るプロセスを示している。この図は図3Aのステップ306をより詳細にしたも
のである。この場合ユーザは、アドオンモジュール(後述)なしで、オリジナル
のアプリケーションプログラムのダイナマイズされたバージョンを実行している
。したがって、シンボルリファレンスにはリダイレクトが提供されているが、全
てのシンボルは、アプリケーションの元々のプログラマが考えた通りの本来意図
されたアイテムへ、対応している。すなわち、プログラムのランタイム機能はま
だ改変されていない。
【0122】 図6Aにおいて、実行可能オブジェクト552は、実行イメージ556として
、ローダ554によってユーザのマシンのシステムRAMにロードされる。実行
イメージ556は、オリジナルのシンボルリファレンスとオリジナルのアイテム
定義との間に対応付けがなされる領域としての、ダイナマップ領域562を含む
。実行イメージ556の開始時において、dynalib.dll558内のル
ーチンが呼び出されて、Hangman32.vfs560内のプロシージャお
よびデータにアクセスする。.vfsファイル内のこれらのルーチンおよびデー
タは、実行イメージ556内のリファレンスを、ダイナテーブル562の値を変
更することによって、どのようにリダイレクトするかを指定する。ただし、これ
はアドオンモジュールを有さないプログラムのダイナマイズされたオリジナルの
バージョンであるため、ダイナテーブルに変更は加えられない。.vfsファイ
ルが処理された後、実行イメージ556は、オリジナルのソースコードで指定さ
れた通りの機能を、ユーザのマシンにおいて提供する。シンボルリファレンスリ
ンクの一例として、実行イメージ556がポインタW1を介してシンボルをリフ
ァレンスしている例を示している。W1は、実行イメージ556内のある1つの
アイテム定義を指している。
【0123】 プログラムが、そのシンボルリファレンスが容易にリダイレクトされ得るよう
にダイナマイズされると、図3Aのステップ306に示すようにプログラムはロ
ードされて実行され得る。プログラムは、元々設計された通りに振る舞う。すな
わち、ダイナマイズされたプログラムは、プログラムがダイナマイズされなかっ
たかのように同じ機能を実行する。しかし、シンボルリファレンスがリダイレク
トされているので、各リファレンスの実行は、プログラムの元々のダイナマイズ
されていないバージョンにおけるより遅くなり得る。リファレンスが遅くならな
い場合は、リダイレクトされたアクセスの実行が実行時間を増加させないような
プロセッサにおける場合である。これは、パイプライン化プロセッサ、最適化さ
れたキャッシングを有するプロセッサなどの場合にそうであり得る。また、シン
ボルアクセスがそもそも間接的な手段による場合(例えばオリジナルのソースコ
ードにおけるサブルーチンへのポインタを介してサブルーチンを呼び出すなど)
、シンボルリファレンスをダイナマイズすることは、シンボルアクセスのオーバ
ヘッドを増大させない。
【0124】 実行可能物のダイナマイズされたバージョンは、シンボルへの間接的リンクを
提供するダイナテーブルを保持するために余分な格納領域が必要である点におい
て、非ダイナマイズバージョンとは異なる。テーブルのサイズは、ダイナマイズ
されるシンボルの数に依存する。例えば、全てのシンボルがダイナマイズされる
ことを防ぐための「#dyna−on」および「#dyna−off」のような
コンパイラ指示が、プログラマに提供され得る。後述の補助ファイルもまた、プ
ログラムのランタイム改変を達成するためのオーバヘッドを増大させる。しかし
、サイズおよびスピードの影響は通常無視し得るものである。容易に改変可能な
実行可能物を有することの利点は、典型的には、あったとしてもわずかな実行可
能物のサイズの増加、ファイル数の増加、および実行時間の増加(大部分のアプ
リケーションにおいてユーザにはまったく感知され得ない)を、はるかにしのぐ
ものである。
【0125】 4.アドオン(「ダイナ」)モジュールの作成 図5は、本発明のアドオン開発フェーズを説明するフローチャート500を示
している。アドオン開発フェーズは、改変された実行可能オブジェクト情報を、
ランタイム時においてオリジナルのプログラムにリンクするためのDLL形式で
、生成する。アドオン開発フェーズはまた、ランタイム時またはその直前におい
て、シンボルリンクがどのようにリダイレクトされるかを決定する、補助ファイ
ルを生成する。基本的に、ランタイム機能の改変は、オリジナルのプログラム内
で定義されたアイテム(すなわち、実行可能コード、データ構造など)に異なる
定義を代入することによって得られる。
【0126】 図5において、プログラマは、オリジナルのアプリケーションプログラムから
のソースコードモジュールを改変することにより、改変されたソースコードモジ
ュール502を生成する。プログラマはオリジナルのソースコードモジュールか
ら開始する必要はないが、全てのシンボルリファレンスおよびプログラム構造が
既に存在しているため、実際はそうした方がオリジナルのプログラムの改変が容
易になる。改変は、関数、プロセス、データ構造などの新しいアイテムを含み得
る。改変はまた、既存のアイテムの削除も含み得るが、削除する場合は、関数を
「スタブアウト(stub out)」するのが最もよい。すなわちある構造か
ら、その構造またはリソースの「ダミー」シンボル定義をそのまま残しながら、
全てのデータを除去することにより、その構造またはリソースへのリファレンス
の全てを削除する必要がないようにする。シンボル定義を残しておくことで、削
除されたアイテムに後でデータを容易に足し戻すことが可能である。
【0127】 改変されたソースコードモジュール502は、コンパイラ504によってコン
パイルされる。コンパイルは、プログラムの改変された部分以上に対して行われ
得ることに留意されたい。なぜなら、プログラムの改変された部分を含むモジュ
ールは、ソースコードのうち他の改変されていない部分を含み得るからである。
【0128】 リンカ508を用いて、コンパイルされた改変済みオブジェクトモジュールを
ライブラリ定義512とリンクする。ライブラリ定義512は、図4のファイル
430と同じファイルである。このファイルは、改変されたモジュールのリンキ
ングが、シンボルリファレンスエラーなしでなされ得るように、オリジナルのア
プリケーションプログラム中のシンボルのためのシンボル定義の全てを提供する
。リンクの結果は、ランタイム時においてオリジナルのプログラムにフックされ
るべき新しいアイテムを含むDLLである、dynaplay.dllとなる。
【0129】 本発明の.dllは、共通のファイル拡張子すなわち「.dll」を用いてい
るが、本発明の.dllは、従来技術における.dll形式および用途とは大き
く異なっている。本明細書に記載したように、本発明におけるプログラムの機能
の変更は、ランタイムプログラムに存在するテーブル内のシンボルリファレンス
を介して行われる。旧来のDLLは、DLL機能にアクセスするためにAPIル
ーチンの使用を必要とするが、これは、旧来のDLLアプローチにおいて、サイ
ズおよび動作オーバーヘッドを導入するものである。DLLライブラリとともに
APIインターフェースを運ばなければならず、これは、機能を変更するための
少量の新しいコードまたはデータを導入するための媒体としては、非効率的なも
のとなってしまう。APIインターフェースを用いることはまた、DLLルーチ
ンとやりとりするためにはインターフェースルーチンが実行されなければならな
いため、プログラムの実行を遅めてしまう。APIルーチンを使用することをア
プリケーションプログラムに要求することはまた、本発明のアプローチによって
提供される機能変更のタイプよりも、機能変更のタイプを減少させることになる
【0130】 リンカ508はまた、新しいモジュールのリンキングに用いられるシンボルを
含む、dynaplay.map514を生成する。Dynaplay.map
は、図4のdynamap.exe420によってhangman32.def
ファイルが生成されたのと同様にして.defファイル518を生成する、dy
namap.exeへの入力である。ダイナモジュールからの.defファイル
の一例を、下記の表Vに示す。
【0131】
【表8】
【0132】
【表9】 .defファイルは、.vfsファイル522を生成するdynagen.e
xe520への入力として用いられる。.vfsファイルは、ランタイム時また
はランタイム以前にどのようにシンボルリファレンスをリダイレクトするかに関
する情報を含んでいる。.vfsファイルの機能はより詳細に後述される。
【0133】 5.ランタイム時におけるアドオンモジュールのリファレンシング ダイナマイズされたプログラムおよびアドオンダイナモジュールがユーザのマ
シンにロードされた後、ダイナマイズされたプログラムの機能の改変は、ダイナ
マップテーブルにおけるシンボルリファレンスリンクを変更することにより、制
御される。
【0134】 図6Aおよび図6Bは、ユーザ機器内で起こるシンボルリファレンスリンク改
変を示す。上記したように、図6Aは、アドオンダイナモジュールがない状態で
初期動作を行うときの、ダイナマイズされたプログラムを示す。図6Bは、ダイ
ナマイズされたプログラムであって、リンクのリダイレクトによって、リンクに
関連づけられたシンボルがダイナモジュール、すなわち、Hangman32.
vfsファイル内のアイテムを参照する、ダイナマイズされたプログラムを示す
【0135】 図6Bにおいて、送達可能ファイル582が、オリジナルのダイナマイズされ
たプログラムをすでに有しているユーザによって、受け取られる。たとえば、ユ
ーザは、2つのキャラクタ間の戦いをシミュレートするコンピュータゲームを獲
得し得る。その場合、ゲームの送達可能ファイル(たとえば、図6Aの送達可能
ファイル564)が、インターネットサイトまたはCD−ROMディスクなどか
らダウンロードすることにより得られる、ゲームのダイナマイズされたバージョ
ンが得られ得る。ユーザは、上記セクション3に記載したように、ゲームをイン
ストールし、ロードし、実行する。ゲームは、キャラクタおよびシーンの背景の
ためのアートワーク、キャラクタの戦いの動きを動画化するプロセス、ユーザか
らの入力を受け取ってキャラクタを制御するプロセス、ならびにスコアをとるプ
ロセスなどを含む、すべての機能を備えたスタンドアローン型プログラムである
。数ヶ月後、オリジナルゲームの製造者(または別の製造者)がオリジナルゲー
ムに特徴を追加することを決定する。たとえば、新しい戦闘キャラクタが追加さ
れ、背景シーンの掲示板の広告が変更される。製造者は、送達可能ファイル58
2という形態でアドオンダイナモジュールを提供することにより、これを行う。
【0136】 送達可能ファイル582は、解凍され、dynalib.dllファイル58
4およびhangman32.vfs586を置換する。通常、新しいダイナモ
ジュールをインプリメントするためには、.vfsファイルのみを置換する必要
がある。しかし、dynalib.dllをアップグレードするために、これも
置換され得る。従って、機能を追加するためのダウンロードサイズは、通常、ち
ょうど、変更されるアイテムのサイズである。これは、プログラム全体が数10
メガバイトであるのに比べて、数10キロバイトのオーダーであり得る。次回、
実行可能オブジェクト552によって表されるゲームがローダ554によってロ
ードされて実行イメージ556として実行されるとき、アイテムリファレンスは
、新しい戦闘キャラクタをインプリメントするプロセスが呼び出され、かつ、新
しい広告画像をインプリメントするデータ構造およびプロセスがアクセスされる
ように、リダイレクトされる。シンボルリファレンスリンクの実際の変更は、ダ
イナモジュールを実行することに関して図6Aに示したものと同一である。しか
し、今回は、新しいアイテムが参照されるように、リンクが実際に置換される。
従って、図6Bは、この時点でhangman32.vfsファイル586内の
アイテムを指し示しているダイナテーブル内のW1を介したリファレンスを示す
。このことは、W1を介してマッピングされたすべてのリファレンスがこの時点
で、hangman32.vfs内のダイナモジュール内に設けられたアイテム
にアクセスすることを意味する。
【0137】 図7は、.vfsファイル内のオブジェクトの詳細、および、いかにしてこれ
らのオブジェクトが生成されるかを示す。
【0138】 図7において、プログラムdynagen.exe606は、アイテム定義6
20とSCHEMEスクリプト608とを、.exeまたは.dllファイル6
02および.defファイル604から生成する。これらのファイルはすべて、
SCHEMEスクリプトを除いて、上記に詳細に説明されている。アイテム定義
は、.vfsファイルの一部となる、実行可能なバイナリの命令、データ、また
は他の情報である。これらは、ランタイム時に、リファレンスがリダイレクトさ
れる先の定義である。dynagen.exeプロセスの入力および出力の詳細
に関しては、ソースコードAppendixのdynagenリストを参照され
たい。
【0139】 SCHEMEスクリプトは、シンボルリファレンスリンクのリダイレクトを行
うために、アプリケーションプログラムのランタイム時に、解釈され得るソース
コードファイルである。すなわち、SCHEMEスクリプトは、図6B内のダイ
ナテーブル562などのダイナテーブル内のポインタをスワップまたはリダイレ
クトする様式を制御する。好適な実施形態は、言語を規定するパブリックドメイ
ンSCHEMEスクリプトインタープリタを用いる。任意の適切なスクリプト言
語、または他の制御メカニズムが用いられ得る。いずれの言語も用いることがで
きるため、シンボルリファレンスのスワッピングまたはリダイレクトを制御する
特定のメカニズムには選択の余地がある。たとえば、この言語は、スワッピング
を行うためにマシンコードを用いる場合のように、人間にとって読取り可能な言
語である必要さえない。しかし、人間にとって読取り可能な、フレキシブルなス
クリプト言語を、メカニズムとして提供することは、以下に述べるように有利で
ある。
【0140】 図7に示すように、SCHEMEスクリプトは、dynagen.exeプロ
グラム以外のソースから提供され得る。たとえば、SCHEMEスクリプト61
0は、人間のプログラマによって手動で作成され得るし、すでに存在するファイ
ルであり得るし、第三者などによって自動的にまたは手動で作成され得る。SC
HEMEスクリプトは、スクリプトインタープリタに提供され、スクリプトイン
タープリタは、スクリプトの、「中間言語」バージョンを生成するように命令さ
れる。典型的には、このような中間言語は、スクリプトの、人間にとって読取り
可能な形態と等価であるが、よりコンパクトであり、コンピュータプロセスが読
取りかつ実行するにより容易である。中間言語は、バイナリ命令同様、人間にと
って容易に読取り可能ではない。
【0141】 中間言語614は、.vfsファイル内に、たとえばファイル624および6
26として、インタープリタ622のインスタンスと共に含まれる。ランタイム
時には、実行可能イメージが起動されると、dynaplay.dllルーチン
「DllMain()」を呼び出すことにより、SCHEME中間言語ファイル
が解釈されて、リファレンスのリダイレクトが処理される。
【0142】 図8は、dynagen.exeによって生成されたSCHEMEスクリプト
の一例である。
【0143】 図8において、650で示す行は、リファレンスリンクの置換を行うための、
「enable−dynamod」の関数呼び出しを表す。リンクされるダイナ
モジュールのファイル位置は、「selfandheat.dll」として65
2で特定される。ダイナモジュールにアクセスする実行可能物は、「net_f
ighter.exe」として654で特定される。それに続く数字対のそれぞ
れは、新しいアドレス位置によって置換される、ダイナモジュール内のインデッ
クスを指定する。これらは、実行可能物用(net_fighter.exe)
の.defファイルおよびダイナモジュール(selfhandheat.dl
l)用の.defファイルに対応する。
【0144】 テーブルVを、ダイナモジュールからの.defファイルとして用い、かつ、
テーブルIVを、実行可能物からの(部分)テーブルとして用いることにより、
図8のSCHEMEスクリプトファイル内の対(84.#x1000)は、イン
デックス84を有する実行可能物内のシンボルDrawGameが.dll内の
16進数1000のアドレスにマッピングされることを特定する。テーブルVは
、同一の名前であるDrawGameによる新しい手続きのアドレスがこうして
アクセスされることを示す。
【0145】 スクリプト言語はシンボルリファレンスのリダイレクトを制御するために用い
られるため、リファレンスの多様な組み合わせのスワッピングをすることが可能
である。たとえば、図8のスクリプトは、特定のファイルが存在する場合に、あ
るいは1日のうちのある時刻に、あるいは1ヶ月のうちのある日より後に、ある
いはインターネットからの条件がチェックされた時などに、リファレンスのスワ
ッピングが起こるように、改変され得る。このようにして、ユーザが追加料金を
支払っているか否か、期限がすぎているか否か、関係するプレーヤの数、などに
依存して、プログラムの特徴がオンまたはオフされ得る。このことにより、プロ
グラムは、ユーザの興味に適合する、スポンサの順番が回ってきたときに変更さ
れる、などというようにカスタマイズされた、広告などの情報のためのフレキシ
ブルな媒体となる。本発明は、ダウンロードされ得、かつ、既存のダイナマイズ
されたコンピュータプログラムに組み込まれ得る非常に小さいダイナモジュール
を介して、このフレキシビリティをすべて提供する。さらに本発明は、いずれの
既存のプログラムもが、専門的作業をほとんど必要とすることなくダイナマイズ
されることを可能にする。
【0146】 スクリプト命令は、起動時のみに実行されることに限定される必要はない。マ
ルチスレッド環境において、スクリプト命令は、オリジナルのコンピュータプロ
グラムおよびダイナモジュールによって提供される命令の実行と「同時に」実行
され得る。このことにより、フレキシビリティが増加し、たとえば、ユーザの入
力、リアルタイムクロック、このプログラムまたは他のプログラムを実行した結
果起こる状況などに基づいてリファレンスが変更されるようになる。
【0147】 図7に戻って、.vfsファイルシステムの特徴は、.vfsファイル中のす
べてが人間にとって読取り不可能であるということである。アイテム定義620
は、SCHEMEインタープリタ622同様、バイナリ形式である。SCHEM
E中間言語ファイルもまた、読取り不可能である。なぜなら、人間にとって読取
り可能なスクリプトからコンピュータ読取り可能な中間言語を引き出すように予
備処理されているからである。従って、.vfsファイルは、製造者にセキュリ
ティを提供して、ユーザのプログラムの「ハッキング」を防止し、かつ、他の製
造者が、たとえばライセンスなどで許可されない限り、オリジナルの製造者の製
品と共に用いられるアドオンモジュールを製造することを防止する。
【0148】 .vfsフォーマットの別の特徴は、SCHEME中間言語命令によるファイ
ルに対するリファレンスが.vfsファイル内のリファレンスに限定されている
ことである。このことは、たとえば、SCHEME命令のエラーが、ユーザ機器
上のファイルまたは他の情報またはデバイスを害することを防止する。
【0149】 本発明を特定の実施形態に照らして述べてきたが、多くの変更が可能であるこ
とが明らかであるはずである。たとえば、.vfsファイルフォーマットは広範
囲に変更され得る。.vfsファイルは、ユーザが通常はその存在を知らない隠
しファイルであり得る。インタープリタは.vfsファイル内に存在する必要は
なく、dynaplay.dllライブラリ、異なるライブラリ、プログラムま
たは他のエンティティの一部であり得る。概して、本発明によって述べた処理は
、任意の数のプロセス、プログラム、またはルーチンによっても実行され得、本
明細書に述べたように、任意の適切なプラットフォーム上の機能を実行すること
により達成され得る。従って、本明細書における実施形態は、本発明の説明のみ
のために提供され、本発明の範囲は添付の請求の範囲によってのみ限定される。
【0150】
【表10】
【0151】
【表11】
【0152】
【表12】
【0153】
【表13】
【0154】
【表14】
【0155】
【表15】
【0156】
【表16】
【0157】
【表17】
【0158】
【表18】
【0159】
【表19】
【0160】
【表20】
【0161】
【表21】
【0162】
【表22】
【0163】
【表23】
【0164】
【表24】
【0165】
【表25】
【0166】
【表26】
【0167】
【表27】
【0168】
【表28】
【0169】
【表29】
【0170】
【表30】
【0171】
【表31】
【0172】
【表32】
【0173】
【表33】
【0174】
【表34】
【0175】
【表35】
【0176】
【表36】
【0177】
【表37】
【0178】
【表38】
【0179】
【表39】
【0180】
【表40】
【0181】
【表41】
【0182】
【表42】
【0183】
【表43】
【0184】
【表44】
【0185】
【表45】
【0186】
【表46】
【0187】
【表47】
【0188】
【表48】
【0189】
【表49】
【0190】
【表50】
【0191】
【表51】
【0192】
【表52】
【0193】
【表53】
【0194】
【表54】
【0195】
【表55】
【0196】
【表56】
【0197】
【表57】
【0198】
【表58】
【0199】
【表59】
【0200】
【表60】
【0201】
【表61】
【0202】
【表62】
【0203】
【表63】
【0204】
【表64】
【0205】
【表65】
【0206】
【表66】
【0207】
【表67】
【0208】
【表68】
【0209】
【表69】
【0210】
【表70】
【0211】
【表71】
【0212】
【表72】
【0213】
【表73】
【0214】
【表74】
【0215】
【表75】
【0216】
【表76】
【0217】
【表77】
【0218】
【表78】
【0219】
【表79】
【0220】
【表80】
【0221】
【表81】
【0222】
【表82】
【0223】
【表83】
【0224】
【表84】
【0225】
【表85】
【0226】
【表86】
【0227】
【表87】
【0228】
【表88】
【0229】
【表89】
【0230】
【表90】
【0231】
【表91】
【0232】
【表92】
【0233】
【表93】
【0234】
【表94】
【0235】
【表95】
【0236】
【表96】
【0237】
【表97】
【0238】
【表98】
【0239】
【表99】
【0240】
【表100】
【0241】
【表101】
【0242】
【表102】
【0243】
【表103】
【0244】
【表104】
【0245】
【表105】
【0246】
【表106】
【0247】
【表107】
【0248】
【表108】
【0249】
【表109】
【0250】
【表110】
【0251】
【表111】
【0252】
【表112】
【0253】
【表113】
【0254】
【表114】
【0255】
【表115】
【0256】
【表116】
【0257】
【表117】
【図面の簡単な説明】
【図1A】 図1Aは、変換されたコードを実行する、従来技術のプロセスを示す簡略図で
ある。
【図1B】 図1Bは、コンパイルされたコードを実行する、従来技術のプロセスを示す簡
略図である。
【図1C】 図1Cは、変換されたソースコードの一部の一例を示す図である。
【図1D】 図1Dは、コンパイルされた実行可能オブジェクトの部分の一例を示す図であ
る。
【図1E】 図1Eは、コンパイルされた実行可能オブジェクトのパッチングの一例を示す
図である。
【図2A】 図2Aは、本発明と共に用いられるために適切なコンピュータシステムを例示
する図である。
【図2B】 図2Bは、図2Aのコンピュータシステムのようなコンピュータシステムにお
けるサブシステムを示す図である。
【図2C】 図2Cは、典型的なネットワークの一般化された図である。
【図3A】 図3Aは、実行時にコンパイルされたプログラムに機能性を加える、全体的な
アプローチの基本的な工程を示すフローチャートである。
【図3B】 図3Bは、従来技術の実行可能オブジェクトのメモリマップの図である。
【図3C】 図3Cは、本発明の実行可能オブジェクトのメモリマップの図である。
【図3D】 図3Dは、従来技術の実行イメージの図である。
【図3E】 図3Eは、本発明の実行イメージの図である。
【図4】 図4は、本発明のシステムのプログラム変換段階を示す図である。
【図5】 図5は、本発明のアドオン開発段階の工程を示すフローチャートである。
【図6A】 図6Aは、ユーザのコンピュータにおいてダイマナミズされた(dynami
zed)プログラムを実行するプロセスを示す図である。
【図6B】 図6Bは、ユーザのコンピュータにおいてダイナモジュール(dynamod
ule)を実行するプロセスを示す図である。
【図7】 図7は、.vfsファイル内のオブジェクトの細部、およびそれらのオブジェ
クトがどのように発生されるかを示す図である。
【図8】 図8は、制御スクリプトの一例を示す図である。
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,CY, DE,DK,ES,FI,FR,GB,GR,IE,I T,LU,MC,NL,PT,SE),OA(BF,BJ ,CF,CG,CI,CM,GA,GN,GW,ML, MR,NE,SN,TD,TG),AP(GH,GM,K E,LS,MW,SD,SL,SZ,TZ,UG,ZW ),EA(AM,AZ,BY,KG,KZ,MD,RU, TJ,TM),AE,AL,AM,AT,AU,AZ, BA,BB,BG,BR,BY,CA,CH,CN,C R,CU,CZ,DE,DK,DM,EE,ES,FI ,GB,GD,GE,GH,GM,HR,HU,ID, IL,IN,IS,JP,KE,KG,KP,KR,K Z,LC,LK,LR,LS,LT,LU,LV,MA ,MD,MG,MK,MN,MW,MX,NO,NZ, PL,PT,RO,RU,SD,SE,SG,SI,S K,SL,TJ,TM,TR,TT,TZ,UA,UG ,US,UZ,VN,YU,ZA,ZW Fターム(参考) 5B081 AA01 AA03 AA04 AA06 AA09 CC12 CC13

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータプログラムを、ランタイム時にリダイレクトさ
    れ得るシンボルリファレンスを有する実行可能オブジェクトに変換する方法であ
    って、プロセッサ兼格納デバイスを含み、オリジナルの名前を有するオリジナル
    の定義に対するシンボルリファレンスを有するコンピュータプログラムをさらに
    含むコンピュータシステム上で実行される、方法であって、 1以上の該オリジナルの名前を識別する工程と、 該コンピュータプログラム内で用いられる1以上の該オリジナルの名前を新し
    い名前に再ネーミングする工程と、 該オリジナルの名前に対するシンボルリファレンスが該新しい名前に対するリ
    ファレンスを呼び出すように、該オリジナルの名前と該新しい名前との関連づけ
    を作成する工程と、 を含む、方法。
  2. 【請求項2】 前記関連づけに関する情報をテーブルフォーマットで格納す
    る工程をさらに含む、請求項1に記載の方法。
  3. 【請求項3】 シンボルリファレンスに、前記テーブル内のエントリを参照
    させる工程と、 該オリジナルの定義へのポインタを該エントリに関連づける工程と、 をさらに含む、請求項2に記載の方法。
  4. 【請求項4】 前記コンピュータプログラムをコンパイルするためにコンパ
    イラが用いられ、 該コンパイラによって生成された情報を用いて、該コンピュータプログラム内
    のオリジナルの名前を識別する前記工程を実行する工程をさらに含む、請求項1
    に記載の方法。
  5. 【請求項5】 前記シンボルリファレンスが、データ構造に対するものであ
    る、請求項1に記載の方法。
  6. 【請求項6】 前記シンボルリファレンスが、プログラム命令に対するもの
    である、請求項1に記載の方法。
  7. 【請求項7】 前記シンボルリファレンスが、リソースに対するものである
    、請求項1に記載の方法。
  8. 【請求項8】 前記シンボルリファレンスが、オブジェクトに対するもので
    ある、請求項1に記載の方法。
  9. 【請求項9】 前記コンピュータプログラムをコンパイルするために、Mi
    crosoft Developer’s Environmentが用いられ
    、該Microsoft Developer’s Environmentが
    、該コンピュータプログラム内のシンボルリファレンスに関する情報を生成する
    ユーティリティを含み、 1以上のファイルからの情報を用いて、前記オリジナルの名前に関する情報を
    含む1以上の補助ファイルを生成する工程と、 該補助ファイルを用いて、該コンピュータプログラムと共に実行されるアドオ
    ンモジュールをコンパイルする工程と、 をさらに含む、請求項1に記載の方法。
  10. 【請求項10】 Microsoft Developer’s Envi
    ronmentが、.mapファイルを生成するリンカを用いることにより、前
    記コンピュータプログラムをコンパイルし、 1以上のファイルからの情報を用いて補助ファイルを生成する前記工程が、該
    .mapファイルを用いて、該補助ファイルの少なくとも一部として含まれる.
    defファイルを引き出すサブ工程を含む、請求項1に記載の方法。
  11. 【請求項11】 コンピュータプログラム内で用いられる1以上のシンボル
    リファレンスに対する代替リファレンスを有する機能を、該コンピュータプログ
    ラム内でランタイム時に改変する方法であって、プロセッサ兼格納デバイスを含
    むコンピュータシステム上で実行される方法であって、 該コンピュータプログラムを該コンピュータシステムにロードする工程と、 アイテム定義を含むモジュールを該コンピュータシステムにロードする工程と
    、 該代替リファレンスを該アイテム定義に関連づけるプロセスを実行する工程と
    、 を含む、方法。
  12. 【請求項12】 スクリプト言語命令を実行することによって、前記代替リ
    ファレンスを前記アイテム定義に関連づける工程をさらに含む、請求項11に記
    載の方法。
  13. 【請求項13】 前記コンピュータプログラムの実行中に、同時にスクリプ
    ト言語命令を実行することによって、前記代替リファレンスを前記アイテム定義
    に関連づけ、それにより、前記関連づけを制御する工程をさらに含む、請求項1
    1に記載の方法。
JP2000580089A 1998-10-30 1999-10-29 実行時にコンパイルされたコンピュータコードの機能を改変するためのシステム Pending JP2002529812A (ja)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012010344A (ja) * 2011-07-13 2012-01-12 Fujifilm Corp 画像処理装置、方法およびプログラム

Families Citing this family (93)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (5)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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