JP2005243004A - コードの書き換え - Google Patents

コードの書き換え Download PDF

Info

Publication number
JP2005243004A
JP2005243004A JP2005020314A JP2005020314A JP2005243004A JP 2005243004 A JP2005243004 A JP 2005243004A JP 2005020314 A JP2005020314 A JP 2005020314A JP 2005020314 A JP2005020314 A JP 2005020314A JP 2005243004 A JP2005243004 A JP 2005243004A
Authority
JP
Japan
Prior art keywords
code unit
computer
code
rewriter
rewrite
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.)
Granted
Application number
JP2005020314A
Other languages
English (en)
Other versions
JP2005243004A5 (ja
JP4851096B2 (ja
Inventor
Alan C Shi
シー.シャイ アラン
Christopher W Brumme
ダブリュ.ブラム クリストファー
Jan S Gray
エス.グレイ ジャン
Jonathan C Hawkins
シー.ホーキンス ジョナサン
Sean E Trowbridge
イー.トローブリッジ ショーン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2005243004A publication Critical patent/JP2005243004A/ja
Publication of JP2005243004A5 publication Critical patent/JP2005243004A5/ja
Application granted granted Critical
Publication of JP4851096B2 publication Critical patent/JP4851096B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61HPHYSICAL THERAPY APPARATUS, e.g. DEVICES FOR LOCATING OR STIMULATING REFLEX POINTS IN THE BODY; ARTIFICIAL RESPIRATION; MASSAGE; BATHING DEVICES FOR SPECIAL THERAPEUTIC OR HYGIENIC PURPOSES OR SPECIFIC PARTS OF THE BODY
    • A61H39/00Devices for locating or stimulating specific reflex points of the body for physical therapy, e.g. acupuncture
    • A61H39/06Devices for heating or cooling such points within cell-life limits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61HPHYSICAL THERAPY APPARATUS, e.g. DEVICES FOR LOCATING OR STIMULATING REFLEX POINTS IN THE BODY; ARTIFICIAL RESPIRATION; MASSAGE; BATHING DEVICES FOR SPECIAL THERAPEUTIC OR HYGIENIC PURPOSES OR SPECIFIC PARTS OF THE BODY
    • A61H7/00Devices for suction-kneading massage; Devices for massaging the skin by rubbing or brushing not otherwise provided for
    • A61H7/002Devices for suction-kneading massage; Devices for massaging the skin by rubbing or brushing not otherwise provided for by rubbing or brushing
    • A61H7/003Hand-held or hand-driven devices
    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61HPHYSICAL THERAPY APPARATUS, e.g. DEVICES FOR LOCATING OR STIMULATING REFLEX POINTS IN THE BODY; ARTIFICIAL RESPIRATION; MASSAGE; BATHING DEVICES FOR SPECIAL THERAPEUTIC OR HYGIENIC PURPOSES OR SPECIFIC PARTS OF THE BODY
    • A61H2201/00Characteristics of apparatus not provided for in the preceding codes
    • A61H2201/02Characteristics of apparatus not provided for in the preceding codes heated or cooled
    • A61H2201/0221Mechanism for heating or cooling
    • A61H2201/0278Mechanism for heating or cooling by chemical reaction
    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61HPHYSICAL THERAPY APPARATUS, e.g. DEVICES FOR LOCATING OR STIMULATING REFLEX POINTS IN THE BODY; ARTIFICIAL RESPIRATION; MASSAGE; BATHING DEVICES FOR SPECIAL THERAPEUTIC OR HYGIENIC PURPOSES OR SPECIFIC PARTS OF THE BODY
    • A61H2201/00Characteristics of apparatus not provided for in the preceding codes
    • A61H2201/12Driving means
    • A61H2201/1253Driving means driven by a human being, e.g. hand driven
    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61NELECTROTHERAPY; MAGNETOTHERAPY; RADIATION THERAPY; ULTRASOUND THERAPY
    • A61N5/00Radiation therapy
    • A61N5/06Radiation therapy using light
    • A61N2005/0658Radiation therapy using light characterised by the wavelength of light used
    • A61N2005/0659Radiation therapy using light characterised by the wavelength of light used infrared
    • A61N2005/066Radiation therapy using light characterised by the wavelength of light used infrared far infrared

Landscapes

  • Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Rehabilitation Therapy (AREA)
  • Epidemiology (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Pain & Pain Management (AREA)
  • Physical Education & Sports Medicine (AREA)
  • Software Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Animal Behavior & Ethology (AREA)
  • General Health & Medical Sciences (AREA)
  • Public Health (AREA)
  • Veterinary Medicine (AREA)
  • Dermatology (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】開発、配置、および実行にわたる様々な段階におけるプログラムコードの変換を、プログラム、コンパイラ、または実行環境の複雑さを増大させずに行う。
【解決手段】リライトマネージャ500はデジタル署名を含むコード単位102を受信する。最初にリライトマネージャ500はコード単位102を書き換える必要があるかを決定し、必要があると判断するとリライタ502のグループから適切なリライタを識別し順序付ける。次にリライトマネージャ500はコード単位102のデジタル署名を認証してその識別及び信頼性を確認する。信頼できる場合はリライタ502を実行して書き換えられたコードを生成し、新たに生成した署名とともにリライトキャッシュ406に格納する。
【選択図】図5

Description

本開示は、コードの書き換えに関し、より詳細には、開発から実行までのコードのライフサイクルにわたってコードを書き換えることができる構成可能な1組のリライタ(rewriters)に関する。
プログラムの開発は一般に、ソースコードを書くこと、ソースコードを編集すること、ソースコードをコンパイルすること、次いで結果として得られたバイナリコードを実行することのサイクルをたどる。開発サイクルは、例えば個々の開発者のコンピュータから、開発者のコンピュータ、中間コンピュータ、および1つまたは複数のネットワークを介して相互接続される一企業の配置コンピュータ(deployment computer)を含む複数のコンピューティング装置のシステムにわたる様々なコンピューティング環境において行うことができる。したがってサイクルは、例えば最後の配置コンピュータにおけるプログラムのインストールおよび実行に先立つ中間コンピュータにおけるプログラムのインストールおよび実行を伴う中間段階も含み得る。
その開発サイクルにわたるある時点でプログラムの変換を必要とする理由には様々なものがある。例えば、プログラムの実行を監視し、それが正しく稼働しているかどうかを決定するためにコードをプログラムに導入する必要がある可能性がある。こうした「ウォッチドッグ」コードは、例えば特定の関数が呼び出された回数を数える、特定の関数の出力をファイルに送信するなどのタスクを行うことができる。プログラムの実行時に問題が発見されると、問題のソースを発見するように設計された追加のコードを含むようにプログラムをさらに変換する必要がある場合がある。
プログラミング言語の中には、「ウォッチドッグ」コードの導入など、いくつかの変換を可能にする機能をサポートするものもある。しかし、これらの変換の機能は一般に非常に限られている。さらに、こうした機能は、一般に言語固有のコンパイラを介して実施される。したがって、あるプログラミング言語は「ウォッチドッグ」コードの変換機能をサポートしているが、別のプログラミング言語はサポートしていない可能性がある。
開発中のプログラムの変換の他の理由は、プログラムが配置される様々な実行環境を含み得る。例えば、プログラムは、オペレーティングシステム、データベース、またはアプリケーションプログラムの一部として稼働し得る。セマンティクス、または定義されたシステムの挙動は、環境によって異なる可能性があり、または、オペレーティングシステムのアップグレードなど環境が変化したときに環境内で変化する可能性がある。したがってプログラムは、異なる環境および変化する環境において異なるように振る舞い得る。したがって、プログラムが異なる環境において一貫して機能することを保証するには、プログラムの変換が必要となり得る。こうした変換は、開発者が環境固有のコードをソースに導入することによって、またはこうしたコードをコンパイラを介して導入することによって達成することができる。別の選択肢は、実行環境を変えることである。こうした各選択肢には、プログラム、コンパイラ、または実行環境のいずれかの複雑さを大幅に増大させるという欠点がある。
Pratt, Introducing Microsoft .NET, Third Edition, Microsoft Press, 2003
したがって、ソースプログラム、コンパイラ、実行環境の複雑さを大幅に増大させない、プログラムの開発および配置サイクルにわたる様々な段階でコードの変換を実施する方法が必要である。
システムおよび方法は、拡張可能、構成可能な1組のコードリライタの使用を介してコード単位(code units)の書き換えおよび変換を提供する。リライタは、コード単位の開発および配置にわたる様々な段階での適用、および実施が可能である。リライトマネージャ(rewrite manager)は、コード単位自体の中に開発者によって組み込まれた情報、セキュリティまたはインストールポリシーなどのシステムポリシーなどを含めて、様々な理由でコード単位の書き換えを開始することができる。リライトマネージャは、1つまたは複数のリライタを識別し、コード単位に対してリライタを実行して、書き換えられたコード単位、または書き換えられたコード単位の一連の連続するバージョンを生成する。また、リライトマネージャは、特定の順序でコード単位に対する書き換えを行うようにリライタを順序付けることができる。コード単位に対してリライタを実行する前に、リライトマネージャは、コード単位およびリライタの両方の信頼性を確認する。コード単位を実行するためのその後の呼び出しが書き換えプロセスを繰り返さないように、書き換えられたコード単位は、キャッシュに格納される。書き換えられたコード単位は、キャッシュから直接アクセスして実行することができる。
同様の構成要素および特徴を参照するために図面を通じて同じ参照番号が使用されている。
(概要)
次の説明は、コード単位の開発および配置にわたる様々な段階で実施できる拡張可能、構成可能な1組のコードリライタを介してコード単位の書き換えおよび変換を提供するシステムおよび方法を対象とする。記載したシステムおよび方法の利点は、プログラム開発者およびシステム管理者が、ソースプログラム、コンパイラ、または実行環境の複雑さを大幅に増大させない、プログラムの開発および配置にわたる様々な段階でコードの変換を実施する強力な方法を提供することを含む。
(環境例)
図1は、様々な開発および配置の環境で行うことができるコードを書き換える基本的なプロセス100を示す図である。コード単位102を書き換えるプロセス100は、コード単位102が、1つまたは複数のコードリライタをコード単位102に適用して書き換えられたコード単位106を生成する書き換え機能104に遭遇することを含む。コード単位102は、例えば、言語固有のコンパイラからPC上で実行する用意ができているネイティブのコードにコンパイルされたオブジェクトモジュール、管理された(managed)コード環境での抽象および/またはマシン非依存言語などの中間言語で配置されたDLLまたは実行可能ファイルの集まり、インタープリタ型言語で書かれたスクリプトプログラムなどを含み得る。
コード単位102は、開発および配置の様々な段階で書き換え機能104に遭遇し得る。したがって、書き換え機能104は、コード単位102の開発、配置、および実行に関わる様々なシナリオおよび様々なコンピュータで動作可能である。一般に、書き換え機能104は、コード単位102を受信し、コード単位が書き換えられるべきかどうかを決定し、コード単位を書き換えるためにどのリライタを適用すべきかを識別し、それらを順序付け、コード単位に対するリライタの実行を容易にし、その結果書き換えられたコード単位106をもたらす。書き換え機能104は一般に、リライトマネージャ、コード単位102を書き換えるように構成された1つまたは複数のコードリライタ、およびどのリライタをどの順序でコード単位に適用すべきかを識別するリライタリストなどの情報を包含し、かつ/または含む。
図2および図3は、コードの書き換えを実施するのに適した環境の例を示す。図2および図3の環境の例は、一例として示したにすぎず、限定として示したものではない。したがって、本明細書で説明するように、コードの開発および配置の様々な段階中にコードの書き換えを実施できる他の多くのコンピューティング環境が考えられることを理解されたい。
図2の環境例200は、コードが開発され、比較的直接的な配布チャネルを介して配布される、コードの書き換えを実施するのに適した開発および配置のシナリオを示している。一般に、コード単位106は、開発者コンピュータ202上で開発され、配置コンピュータ204に配布され、インストールされ、そこで実行することができる。しかし、コンピュータ202上で開発されたコード単位106をコンピュータ202上にインストールし、そこで実行することもでき、また、コード書き換え機能104をコード単位102に対して実施して、書き換えられたコード単位106をコンピュータ202および204のいずれか、またはその両方において生成することができることを理解されたい。
コード単位102は、例えば開発者コンピュータ202から配置コンピュータ204にネットワーク206を介してダウンロードする、またはディスク、コンパクトフラッシュ(登録商標)カードなど様々なポータブル媒体208を介して開発者コンピュータ202から配置コンピュータ204に転送するなどを含めていくつかの手段によって開発者コンピュータ202から配置コンピュータ204に転送することができる。ネットワーク206は、特定のシステム構成に応じてローカルおよびリモートの接続を含んでいる可能性がある。したがって、ネットワーク206は、例えば、モデム、ケーブルモデム、LAN(ローカルエリアネットワーク)、WAN(広域ネットワーク)、イントラネット、インターネット、または他の任意の適した通信リンクのうちのいずれか、またはその組合せを含み得る。
図3は、コードが開発され、より複雑な配布システムを介して配置される、コードの書き換えを実施するのに適した別の環境例300を示している。環境300は、上記で概説したように、中間コンピュータ302に加えて、開発者コンピュータ202、および配置コンピュータ204を含む。配置コンピュータ204は、企業のファイヤウォール内で保護されている企業イントラネットなど、企業のコンピューティングシステム304内にある。図3の環境300で、コード単位102の開発および配置は、配置コンピュータ204上にコード単位102を配置する前に、ネットワーク206を介して開発コンピュータ(development computer)202から中間コンピュータ302にコード単位102を転送することを含み得る。一般に、こうした中間コンピュータ302は、コード単位を段階的に実行し、それらを配置コンピュータ204に配布するために使用される。中間コンピュータ302上で行われるコードの書き換えは、開発コンピュータまたは配置コンピュータ上で行われるものとは異なり得る。例えば、中間コンピュータ302でのコードの書き換えは、企業304の配置コンピュータ204において実施中のあるシステムおよび/またはセキュリティ要件と互換性があるようにコードを書き換えることができる。さらに、コード単位102をその開発の一部として中間コンピュータ302に一時的にインストールし、そこで実行して、それを企業304内の配置コンピュータ204に移動する前にそのパフォーマンスを確認することができる。実施形態の例に関して後述するように、コード単位102は、環境300の様々なコンピュータ202、204、および302におけるその開発、インストール、および実行にわたる様々な段階で1つまたは複数のリライタによって書き換えることができる。
図2および図3のコンピュータ202、204、および302は、例えば、デスクトップPC、ノートブック、または他のポータブルコンピュータ、ワークステーション、サーバ、メインフレームコンピュータなどを含む従来の様々なコンピューティング装置のうちの任意のものとして実装することができる。コンピュータ202、204、および302は一般に、電子メール、カレンダリング、タスク編成、文書処理、Webブラウジングなど、一般的なコンピューティング環境を実行することができる。コンピュータ202、204、および302は、ワシントン州レドモンドのMicrosoft(登録商標)社のWindows(登録商標)オペレーティングシステムなどのオペレーティングシステムを稼働させる。開発者コンピュータ202、配置コンピュータ204、および中間コンピュータ302の実装例を図14を参照して以下により詳しく説明する。
(実施形態の例)
図4は、図3の環境例300内のコードの書き換えを説明するのに有用な様々な構成要素を示すコンピュータ202、204、および302のブロック図である。コードの書き換えは、コンピュータ202、204、および302のいずれか、またはすべての上で行うことができ、1つのコンピュータ上でのコードの書き換えは、他のコンピュータ上でのコードの書き換えに影響を与える可能性がある。例えば、開発コンピュータ202での書き換え機能104の実施は、書き換えられたコード単位をもたらす可能性があり、これが中間コンピュータ302に転送される。開発コンピュータ202からの書き換えられたコード単位は、中間コンピュータ302によって再度書き換えられ、次いで配置コンピュータ204に転送され、そこでさらにもう一度書き換えられる場合がある。
図4の開発者コンピュータ202は、開発者によってC、C++、C♯、Java(登録商標)、Microsoft Visual Basic(登録商標)などのプログラミング言語で書かれたソースプログラム400を含む。図4のコンピュータ202、302、および204のそれぞれは、様々なコンパイラ402を含み得る。コンパイラ402は、コンピュータによって異なっていてよく、したがって開発コンピュータ202、中間コンピュータ302、および配置コンピュータ204上のものがそれぞれ参照番号402(1)、402(2)、および402(3)で示されている。コンパイラ402は、言語固有のコンパイラを含んでいてよく、それぞれ特定の言語のソースプログラムを1つまたは複数のコード単位102にコンパイルするように構成されている。コード単位102は、例えば、PC上で実行する用意ができているネイティブコードにコンパイルされたオブジェクトモジュール、管理されたコ―ド環境での実行に適したバイトコードまたは別の中間言語、例えば抽象および/またはマシン非依存言語などとしてコンパイルされたDLLまたは実行可能ファイルの集まり、インタープリタ型言語で書かれたスクリプトプログラムなどを含み得る。したがって、コンパイラ402は、ソース言語を特定のプラットフォーム上で稼働するネイティブコードにコンパイルするネイティブコードコンパイラ、およびソース言語を中間言語またはバイトコードなどの管理されたコードにコンパイルする管理されたコードコンパイラ、例えばJava(登録商標)コンパイラ、.NETコンパイラなどを含むことができる。
さらに、コンパイラ402は、中間言語やバイトコードなど、プラットフォーム非依存コード、すなわち管理されたコードを特定のプロセッサ上で実行することができるネイティブコードに変換する実行前コンパイラ(pre−execution compiler)を含み得る。したがって、コンパイラ402は、実行直前にバイトコード、中間言語などの管理されたコードをネイティブコードにコンパイルするJIT(ジャストインタイム)コンパイラ、およびインストールしたときに実行の用意ができているように管理されたコードをネイティブコードに事前コンパイルするインストール時コンパイルコンパイラ(compile−on−install compiler)も含み得る。
各コンピュータ202、302、および204は、コード単位102を受信し、コード単位を書き換えるべきかどうかを決定し、コード単位102を書き換えるために適用されるリライタを識別し、順序付け、例えばプロセッサ上で実行するためにコード単位102および適切なリライタをRAMにロードするなどコード単位に対するリライタの実行を容易にするように構成されたコード書き換え機能104を含み得る。図5に示すように、コード書き換え機能104は、リライトマネージャ500、コード単位102を書き換えるように構成された1つまたは複数のコードリライタ502、およびどのリライタをどの順序でコード単位に適用すべきかを識別するリライタリスト504などの情報を包含し、かつ/または含む。
各コンピュータ202、302、および204は、オペレーティングシステム(OS)、セキュリティポリシーなどのシステムポリシー、アプリケーションツール、実行環境など様々なシステム構成要素404も含む。コード書き換え機能104の構成要素、すなわちリライトマネージャ500、リライタ502、リライタリスト504のうちの1つまたは複数を、様々なシステム構成要素404のうちの任意の1つまたは複数の中に組み込むことができる。例えば、図6は、リライトマネージャ500、リライタ502、およびリライタリスト504を含むコード書き換え機能104のすべての構成要素がオペレーティングシステムの一部として組み込まれていることを示している。このシナリオは、例えばいくつかのアプリケーションがオペレーティングシステムの更新されたバージョンとの互換性がなくなるときに有用となり得る。書き換え機能104、すなわちリライトマネージャ500、リライタ502、およびリライタリスト504の更新されたオペレーティングシステム内への包含は、こうしたアプリケーションを変更して更新されたオペレーティングシステムとの互換性を確実にするために使用される。
図7および図8は、コード書き換え機能104の構成要素をスタンドアロンモジュールとする、および/または様々なシステム構成要素404間に分散することができることを示す実装形態の例を示している。図7のリライトマネージャ500は、配置コンピュータ204上で実行するシステムセキュリティポリシー404(3)の構成要素であり、リライタ502およびリライトリスト504はスタンドアロンモジュールである。したがって、配置コンピュータ204に実装されているセキュリティポリシー404(3)の一部として、リライトマネージャ500は、セキュリティポリシーに適合するようにコード単位を書き換える必要があるかどうかを決定するために実行される。書き換える必要がある場合、リライトマネージャは、続いてリライトリスト504を使用して適切なリライタ502を識別し、順序付け、次いでコード単位に対して識別されたリライタを実行する。図8で、リライトマネージャ500は、中間コンピュータ302上のインストールツール404(2)の構成要素として示されており、リライタ502およびリライトリスト504はスタンドアロンモジュールである。したがって、コード単位102のインストール中、インストールツール404(2)内のリライトマネージャ500は、コード単位を書き換える必要があるかどうかを決定するために実行される。書き換える必要がある場合、リライトマネージャは、続いてリライトリスト504を使用して適切なリライタ502を識別し、順序付け、次いでコード単位に対して識別されたリライタを実行する。
図9は、コード書き換え機能104の構成要素の一部を開発者によってコード単位102自体の中にどのように含めることができるかを示している。図9に示すように、開発者は、リライタリスト504をコード単位102自体の中に含んでいる。リライトマネージャ500は、JIT(ジャストインタイム)コンパイラ402の一部として示されており、リライタ502はスタンドアロンモジュールである。したがって開発者は、コード単位102自体を、コード単位102を書き換える1組のリライタ502を構成する方法として使用することができる。例えば、開発者は、新しくコンパイルされたコード単位102に渡される、1つまたは複数のリライタを使用してコード単位102を書き換えるようリライトマネージャ500に指示するタグ、属性、文字列などのリライト命令をソースプログラム400内に組み込むことができる。このように、開発者は、コード単位の開発および配置にわたる様々な段階で実施することができる1組のコードリライタを構成する能力を有する。JITコンパイラ402によるコード単位102のその後の実行前コンパイル時に、JITコンパイラ402内のリライトマネージャ500は、どのリライタ502をコード単位に対して実行するかをコード単位に組み込まれているリライタリスト504から決定する。したがって、コード単位102は、JITコンパイラ402よるネイティブコードへのコンパイルおよびその後の実行の直前に書き換えられる。
このプロセスは、特定の方法でコード単位をそれぞれ変更する1組のリライタを開発者がつなぎ合わせる、または「構成する」ことができるようにする。好ましい実施形態では、コード単位は各リライタによって「構成された」リライタの組に連続的に書き換えられるため、書き換えられた各コード単位の形式は同一のままである。したがって、リライタに入力されたコード単位は、そのリライタから出力されたコード単位と同じ形式を有している。このことは、開発者が、コード単位をそれぞれ取り込み、同じ形式または表現のコード単位をそれぞれ出力する任意の1組のリライタを構成できるようにする。代替実施形態では、各リライタは、入力されたコード単位とは異なる形式でコード単位を出力することができる。しかし、この代替は、1組のリライタを構成する際に開発者が使用可能な柔軟性および恣意性の度合いを多少制限する。
再度図5を参照すると、図4に示すコンピュータ202、304、および204のいずれかまたはすべてに関して説明することができる一般のコード書き換えプロセスを示している。コード書き換えプロセスは、例えばコンピュータ202、304、および204においてその開発および配置にわたってコード単位に対して行われる様々な変換を考慮するのに特に適した信用モデルの実装を含む。したがって、リライトマネージャ404は、書き換えられる前および書き換えられた後にコード単位の識別および信頼性の確認を提供する信用モデルをサポートする。
一般の信用モデルでは、開発者は、デジタル署名をコード単位に添付する。次いでデジタル署名を使用して、コード単位の識別を認証するとともに、コード単位が不正変更を加えられないように、または最初に配布されたそのバージョンから変更されないようにすることを保証することができる。デジタル署名を使用するための技術およびソフトウェアは、一般に入手可能である。こうした1つの技術では、適切なソフトウェアを使用してコード単位のハッシュまたは数学的サマリ(mathematical summary)を取得することができる。次いで、パブリック−プライベートキーの機関から取得されたプライベートキーを使用してハッシュを暗号化することができる。暗号化されたキーは、コード単位内に含めてともに送信することができるデジタル署名である。アセンブリが送信されたユーザ、すなわちコンピュータは、次いでコード単位のハッシュ、または数学的サマリを作成し、パブリックキーを使用してハッシュを解読する。ハッシュが一致すると、コード単位が認証される。したがって一般の信頼の原理は、コード単位が最初に「署名された」バージョンから変更されている場合、その署名も変更されており、コード単位はもはや信頼されないというものである。
現在説明したコード書き換えシステムはコード単位の書き換えを含むため、上記の一般の信用モデルは適していない。1つまたは複数のコードの書き換えを介して変更されたデジタル「署名された」コード単位は、書き換え中に加えられた変更に基づいて信用のおけるものとして確認することができない。したがって図5に示した一般のコード書き換えプロセスは、例えばコンピュータ202、304、および204において開発および配置にわたってコード単位に対して行われる様々な変換を考慮するのに特に適した信用モデルの実装を含む。
図5に示した一般の書き換えプロセスでは、コード単位102は、コード書き換え機能104のリライトマネージャ500によって受信される。コード単位は、デジタル署名「署名#1」を含む。リライトマネージャ500は、最初に、コード単位102を書き換える必要があるかどうかを決定する。図6〜図9に関して上述したように、この決定は、様々な方法で行うことができる。例えば、リライトマネージャ500は、コード単位102が開発者コンピュータ202上のソースプログラム400から例えばネイティブコード、バイトコード、中間言語などにコンパイルされたとき、コード単位102を書き換える必要があると決定することができる。
次いでリライトマネージャ500は、リライタ502のグループから適切なリライタを識別し、順序付ける。これは、リライトリスト504を調べることによって行われる。リライトリスト504は、リライトマネージャ500にリライタを知らせ、識別されたリライタがコード単位102に対して実行される順序を提供する。次いでリライトマネージャ500は、1つまたは複数のリライタ502のグループから識別されたリライタにアクセスし、それらをコード単位102とともにRAMなどのメモリにロードする。コード単位102に対して識別されたリライタを実行する前に、リライトマネージャ500は、例えばパブリックキーを使用してハッシュまたは数学的サマリを解読することによって、コード単位102の「署名#1」およびリライタ502の「署名#2」などのリライタおよびコード単位102のデジタル署名を認証して、その識別および信頼性を確認する。デジタル署名が信頼できるものである場合、リライトマネージャは、コード単位102に対して識別されたリライタを実行して、書き換えられたコード単位106を生成する。また、リライトマネージャは、書き換えられたコード単位106のデジタル署名、例えばプライベートキーを使用して暗号化された書き換えられたコード単位106のハッシュまたは数学的サマリである「署名#3」を生成し、書き換えられたコード単位106を署名とともにリライトキャッシュ406に格納する。
一般に、コード単位102に対して実行されたコードリライタ502は、すでにメモリ内にない場合はディスク上のコード単位ファイルを開き、ネイティブコード、バイトコード、中間言語、メタデータなどにロードし、モジュールの論理構造、その型、メソッドなどを回復して「メモリ内」データ構造にすることができる。次いでコードリライタは、こうしたデータ構造をトラバースし、例えば「関数」としても知られるメソッドの本文を変更してコードを任意に挿入または削除する、または変更することによって型およびメソッドの表現に任意の変更を加える。コードリライタは、例えばモジュール、型、メソッド、フィールドの全体を挿入する、または削除することができる。例えば上記の図9、下記の図10および図11のタグ、属性、文字列などによって書き換えがコード単位自体の中から指示されている場合、加えられる変更は、コード単位の外部の、またはコード単位内に組み込まれていて、時にはコード単位内の特定の要素またはサイトに関連していることがある、追加のディレクティブ、タグ、属性、文字列など、特定のコードリライタがコード単位に加えている変更の種類を変更またはある方向に向けるものによって案内される。
再度図4を参照すると、説明した信用モデルは、コンピュータ202、304、および204において開発および配置にわたってコード単位102に対して行うことができる様々な変換を考慮に入れる。例えば、開発者のコンピュータ202上の書き換えられたコード単位106(1)をコード単位102(2)として中間コンピュータ302に転送することができる。コード単位102(2)は、開発者コンピュータ202上のコード単位102(1)のその元のバージョンから変更されており、すなわち書き換えられたコード単位106(1)に変更されているが、コード単位102(2)は一般に、コードの変更が行われた後、デジタルで署名される。したがって中間コンピュータ302は、それに伴うデジタル署名に基づいて依然としてコード単位102(2)の識別および信頼性を認証することができる。
リライトキャッシュ406は、ユニット102をコンパイルする、インストールする、実行するなどのためのその後の呼び出しが書き換えプロセスの繰り返しをもたらさないように、書き換えられたコード単位106を格納するために使用される。したがって、コード単位102が特定のリライタまたはリライタ502の組によってすでに書き換えられている場合、リライトマネージャ500は、結果として得られた書き換えられたコード単位106をリライトキャッシュ406に格納し、特定のリライタまたはリライタ502の組に関して書き換えプロセスを繰り返す必要性を回避する必要があるときに、キャッシュ406から書き換えられたコード単位106にアクセスする。コード単位102は、いったん書き換えられ、書き換えられたコード単位106としてリライトキャッシュ406に格納されると、キャッシュ406から直接アクセスされ、書き換えプロセスを再度通過することなく実行することができる。
図10および図11は、コード書き換え機能104が管理されたコード環境においてコードに関して実施されるより具体的な例を示している。管理されたコード環境は、サポートされたいくつかの言語のうちのいずれかで書かれたプログラムの実行を管理し、プログラムが言語のうちのいずれかで書かれた共通のオブジェクト指向クラスを共有できるようにする。管理されたコード環境の例は、Sun Microsystemsが提供する、Java(登録商標)言語からコンパイルされたプログラムを稼働するJava(登録商標)仮想マシン、およびUSAワシントン州レドモンドのMicrosoft社によって作成された.NET(商標)プラットフォームの一部である共通言語ランタイム(CLR)を含む。図10および図11に示した例は、本明細書では、MicrosoftのCLRを参照して説明する。.NET(商標)Frameworkの基本に関する追加の情報は、非特許文献1など、いくつかの入門テキストで見つけることができる。
CLRは、Microsoftの.NET(商標)Frameworkの核であり、すべての.NETコードの実行環境を提供する。したがって、CLRを使用するために構築され、CLR内で稼働するコードは、「管理されたコード」と呼ばれる。CLRは、ジャストインタイム(JIT)コンパイル、メモリの割り振りおよび管理、型安全性の実施(enforcing type safety)、例外処理、スレッド管理およびセキュリティを含む、プログラムの実行に必要な様々な機能およびサービスを提供する。.NET(商標)ルーチンを最初に呼び出すとCLRがロードされる。最高のパフォーマンスでは、管理されたコードは一般に、実行の直前にネイティブコードにコンパイルされる。
管理されたコードを書くとき、配置単位はアセンブリと呼ばれる。アセンブリは、一単位としてバージョン番号が付けられ、配置される1つまたは複数のファイルの集まりである。アセンブリは、.NET(商標)Frameworkアプリケーションの主な構成要素である。管理されたすべての型およびリソースは、アセンブリ内に含まれ、アセンブリ内のみでアクセス可能、または他のアセンブリ内のコードからアクセス可能なものとしてマークされる。アセンブリは、DLLまたは実行可能(EXE)ファイルとしてパッケージされる。実行可能ファイルは、それ自体で稼働することができるが、DLLは、既存のアプリケーションでホストされなければならない。
説明を簡潔にするために、図10および図11は、図2を参照して上述した環境200と一致する配置環境の例を示している。したがって、ソースプログラム400は、開発者コンピュータ202上で開発され、例えばネットワーク206を介してダウンロードする、またはディスクを介して転送するなど、比較的直接的なやり方で配置コンピュータ204に配布される。さらに、一貫性のために、そうでなければ管理されたコード環境において「アセンブリ」と呼ばれるコードの配置単位は、図10および図11のコード書き換え例においてコード単位と呼ばれる。
図10では、「hello.cs」という名のソースプログラム400の例は、C#プログラミング言語で書かれており、特定のコードリライタを要求する「リライトカスタム属性(rewrite custom attribute)」、およびコードの書き換えに固有ではない他のカスタム属性を含む。属性はすべて角括弧「[]」内に示されている。こうした形の両方のカスタム属性は、プログラムソースコード400に組み込まれ、例えばこれらのクラスの特徴を説明するためにクラスに適用される。したがって、図10のソースプログラム400では、属性「[Attr]」は、クラス「T」の何らかの特徴を説明するためにクラス「T」に適用されるカスタム属性である。
カスタム属性は、ソースプログラム400のコンパイル402を通ってコード単位102(1)に運ばれる、開発者がソースプログラム400に含めることができるカスタマイズ可能な注釈である。一般に、.NET Frameworkの実施形態は、カスタム属性の組の任意の拡張性を可能にする。カスタム属性の組は固定されない。むしろ任意のコードは、ユーザ定義された新しいカスタム属性を導入することができる、またはこうしたユーザ定義された新しいカスタム属性の対象とすることができる。カスタム属性をコード単位102(1)、型、メソッドなどに適用することができる。その型がリライトカスタム属性型から導出されるコード単位102(1)に適用されるカスタム属性は、「リライトカスタム属性」と呼ばれる。リライトカスタム属性は、例えばコードリライタ502のグループの中の1つのコードリライタのコード単位102(1)に対する適用をトリガする。したがってリライトカスタム属性は、コード単位102(1)に適用されるリライタを指定または決定するリライトリスト504を構成することができる。ソースプログラム400では、リライトカスタム属性「RCA1」および「RCA2」は、それぞれ「[RCA1]」および「[RCA2]」という括弧内で識別される。開発者は、リライトカスタム属性内で、識別されたコードリライタがコード単位102(1)に対していつ適用されるかを指定し、したがってコード単位102(1)に対して識別されたリライタを実行する順序を示すことができる。
図10のコンパイラ402は、C#プログラミング言語に固有のC#コンパイラ(CSC)である。CSCコンパイラ402は、異なる言語固有のソースプログラムを共通のプロセッサ非依存中間言語(IL)およびメタデータを含むコード単位にコンパイルする目的で開発者コンピュータ202上に存在し得る様々な言語固有の.NETコンパイラのうちの1つである。第1のパスで、コンパイラ402は、ソースプログラム400をコンパイルし、エラーチェックを実行し、「hello.exe」という名前のコード単位102(1)、つまりコード単位102のバージョン1を構築する。ソースプログラム400内のリライトカスタム属性「[RCA1]」および「[RCA2]」を含むカスタム属性の表現は、コード単位102(1)のメタデータに渡される。
図10および図11の管理されたコード例のコード単位102は、ILおよびメタデータを含む。ILは、抽象的なやり方で、メソッドの本文で行われる動作を記述する。メタデータは、コード単位の構造を記述するテーブルおよびカスタム属性を含み、コード単位は、モジュールの集まりから成り、各モジュールは型定義の集まりから成り、各型定義はフィールドおよびメソッド、つまりコード、関数の集まりであり、各メソッドは、戻り値型および正式な引数の型のリストを有する。この場合、メタデータは、ソースプログラム400から渡された2つのリライタカスタム属性RCA1、RCA2があること、および「T」と呼ばれる型、およびTのメソッドを記述するテーブルがあることを示す。Tのメソッドのうちの1つはMainと呼ばれる。属性「Attr」など他のカスタム属性も存在し得るが、これらは、リライタカスタム属性ではなく、任意のコードの書き換えをトリガしない。
第2のパスで、コンパイラ402のリライトマネージャ構成要素500は、第1のパスから構築されたコード単位102(1)を調査するように構成されている。調査時に、コンパイラ402のリライトマネージャ500がコードリライタ502を要求する例えばRCA1、RCA2などの任意のリライトカスタム属性を見つけると、リライトマネージャ500は、図には示していないメモリにロードされ、次にコード単位102(1)に対して要求されたコードリライタ502を稼働させる。リライトマネージャ500はさらに、上記で概説したように、コード単位102(1)に対して要求されたコードリライタ502を稼働させる前にそれらの識別および信頼性を確認するために、コード単位102(1)およびコードリライタ502に関連付けられているデジタル署名を認証する。
この例では、RCA1およびRCA2と呼ばれる2つのリライトカスタム属性は、コード単位102(1)を変更するためにそれぞれアセンブリリライタCR1およびCR2が適用されることを要求している。しかし、カスタム属性RCA2は、開発者がCR2コードリライタを開発者コンピュータ202上のコード単位102(1)に対して稼働させたくないという指示、例えば下付き文字「T」でタグ付けされている。ソースプログラム400は、コンパイラ402が第1のパスでコード単位102(1)まで運ぶ第2のリライトカスタム属性RCA2の「DeploymentTime=True」タグを含む。したがって、第2のパスで、コンパイラ402のリライトマネージャ500は、タグ付けされた属性RCA2によって要求されたCR2コードリライタが開発者コンピュータ202上のコード単位102(1)に対して稼働されないことを認識する。したがって、この例では、コードリライタCD1のみが開発者202上のコード単位102(1)に対して稼働する。これは、変更されたコード単位102(2)、つまりコード単位102のバージョン2をもたらす。さらにコンパイラ402は、任意選択で、上記で説明したようにデジタル署名を生成し、変更されたコード単位102(2)に添付する。結果として得られたコード単位102(2)のバージョンは、配置コンピュータ204に配布されてインストールされ、実行される。図10のクラスTのメソッド「Main」の例は、コード単位102(1)内のクラスTの元のメソッド「Main」がCR1によってその元のバージョンから変更されていることを示すものであることを留意されたい。
例えば配置コンピュータ204上など、後で実施するようにタグ付けされているリライトカスタム属性、例えばRCA2などは、変更されたコード単位102(2)に渡される。その要求されたコードリライタがすでに開発者コンピュータ202上のコード単位102(1)に適用されている他のリライトカスタム属性、例えばCR1なども、図10で示すように、変更されたコード単位102(2)に渡される。しかし、これらの属性の目的がすでに果たされているため、これは必須ではない。
図11を参照すると、配置コンピュータ204は、例えば開発者コンピュータ202から配布されたコード単位102(2)など、任意の数のアプリケーションプログラムコード単位を含み得る。上述したように、コード単位102は、.NETコンパイラ上でコンパイルされ、CLR(共通言語ランタイム)1100の管理された実行環境で実行されるように構成されたILコードおよびメタデータを含む。さらに、コード単位102は、コード単位102が配置コンピュータ204にインストールされたときなど、様々なときにコード単位102の変更をコードリライタに要求するように構成されているRCA1およびRCA2などの様々なリライタカスタム属性を含み得る。さらに、コード単位102は、コード単位102自体およびコード単位102内のリライタカスタム属性によって要求される任意のコードリライタ502の信憑性を確認するために1つまたは複数のデジタル署名を含み得る。
コード単位102(2)が配置コンピュータ204上で起動されたとき、CLR1100内に例えばローダ1102として組み込まれたリライトマネージャ500は、コード単位102(2)をメモリにロードし、それを調査する。調査時に、CLR1100のリライトマネージャ500は、コード単位102(2)の信憑性および信頼性を決定する。信憑性は、コード単位102(2)内に見られるコード単位のデジタル署名に基づいて確認される。数学的ハッシュおよびパブリック‐プライベートキーの機関を使用したこの確認の一例を簡単に上述している。コード単位102(2)の信頼性は、CLR1100の他の何らかの追加のセキュリティポリシーに一部基づいて決定することもできる。例えば、CLR1100セキュリティポリシーは、いくつかのディストリビュータまたはWebサイトから来るコード単位を信頼することができ、また、他のいくつかのディストリビュータまたはWebサイトから来るコード単位を拒否することができる。一般に、セキュリティポリシーは、前もって配置コンピュータ204にインストールされているシステムコード単位を信頼する。
コード単位102(2)の調査時に、CLR1100のリライトマネージャ500は、配置コンピュータ204上で実行する前にコード単位102(2)を変更するようコードリライタ502(2)に要求しているRCA2など、任意の潜在的な待ち状態のリライトカスタム属性、すなわち実行前に配置コンピュータ204上で実施するようにタグ付けされたリライトカスタム属性があるかどうかを決定する。コード単位102(2)を変更するようリライタに要求する潜在的なリライトカスタム属性に加えて、CLR1100自体は、コード単位102(2)に対して稼働する必要があることがわかっている1つまたは複数のシステムコードを開始することができる。システムリライタの一例は、以下でより詳しく説明する「アプリケーション互換リライタ(application compatibility rewriter)」である。
リライタが要求されているとき、CLR1100のリライタマネージャ500は、存在する1組のリライタ502(2)からこうした任意のリライタの第1のものをロードし、コード単位102(2)上で実行された同じタイプの信憑性および信頼性のチェックを開始する。したがって、図11の例では、CLR1100のリライトマネージャ500は、リライタ502(2)からCR2をロードし、CR2の信憑性および信頼性を確認する。
コード単位102(2)およびCR2などのリライタの確認の成功後、CLR210のリライトマネージャ500は、コード単位102(2)に対してリライタCR2を稼働させて、変更されたコード単位102(2)が得られる。コード単位102(2)内の他のリライトカスタム属性が追加のリライタの使用を要求している場合、CLR1100のリライトマネージャ500は、追加のリライタを同じやり方でロードし、確認し、コード単位102(2)に対して稼働させる。要求されたすべてのリライタがコード単位102(2)に適用された後、最後の変更されたコード単位102(3)は、配置コンピュータ204上のリライトキャッシュ406に格納される。リライトマネージャ500は、最後に書き換えられたアセンブリだけの代わりに中間の書き換えられたアセンブリのうちの1つまたは複数をキャッシュに入れることを選択することもできる。次いでCLR1100は、JIT(ジャストインタイム)コンパイラを使用して変更されたコード単位102(3)のネイティブマシンコード1104へのコンパイルを管理する。次いでネイティブマシンコード1104は、プロセッサ1106上で実行される。
代替実施形態では、コードリライタでコード単位102(2)をコード単位102(3)に変更するプロセス、およびコード単位102(3)のネイティブマシンコード1104へのその後の変換は、インストール時に実行する用意ができているように、管理されたコードをネイティブコードに事前コンパイルするインストール時コンパイルコンパイラを使用して、コード単位102(2)の配置コンピュータ204へのインストール時に行われる。
最後の変更されたコード単位102(3)の配置コンピュータ204上の書き換えコード406への格納は、CLR1100のリライトマネージャ500が、コード単位102(3)を実行するためのその後のすべての呼び出しについて、コード書き換えプロセスに先行できるようにする。したがって、コード単位102(3)が将来開始されたとき、CLR210のリライトマネージャ500は、リライトキャッシュ406からのコード単位102(3)のキャッシュされた書き換えられた最後のバージョンにアクセスし、プロセッサ1106上で実行できるように、コード単位102(3)のネイティブマシンコード1104への変換を管理する。
キャッシュ無効化アルゴリズム(cache invalidation algorithm)1108は、リライトキャッシュ406に保存されたコード単位が有効なままであるかどうかを決定するように構成されている。アルゴリズム1108は一般に、リライトキャッシュ406の内容の一部またはすべてを無効にする、または破棄する事前決定されたポリシーを設ける。例えば、こうしたポリシーは、コード単位が変更されたとき、または所与のコードリライタのパラメータが変更されたときにキャッシュを無効化することを含み得る。
図12は、図11に関して上述したシステムコードリライタの一例を示す。図12は、配置コンピュータ204上の「アプリケーション互換リライタ」1200を、ACRデータベース1202、オペレーティングシステム1204、リライトキャッシュ406、およびコード単位102を含めて、アプリケーション互換リライタ1200の実装および説明を容易にする他の構成要素とともに示している。アプリケーション互換リライタ1200の現在の説明は、管理されたコード環境およびCLRとの脈絡はないが、この説明は一般に、管理されたコード環境、および管理されていないコード環境に適用されることを理解されたい。
一般に、アプリケーション互換リライタ1200は、特定の既存のアプリケーションプログラムと一致しないプラットフォーム/オペレーティングシステムにおいて加えられた変更を考慮するコードリライタである。例えば、図12のコード単位102は、文書処理アプリケーションであることを示し、オペレーティングシステム1204は、更新されたバージョンであることを示している。多くの場合、オペレーティングシステムがアップグレードされたとき、新しいオペレーティングシステム環境で引き続き適切に稼働するために、いくつかのアプリケーションプログラムをパッチし、または修正する必要がある。
アプリケーション互換リライタ1200は、プラットフォーム/オペレーティングシステムの更新されたバージョンとの様々なアプリケーションプログラムの互換性を維持する。例えば、実行するためにコード単位102をロードする試行がなされたとき、アプリケーション互換リライタ1200は、コード単位102を検査し、それがオペレーティングシステム1204の更新されたバージョンとの互換性があるかどうかを決定するように構成されている。アプリケーション互換リライタ1200は、例えばある文書処理アプリケーションなどのコード単位102を識別し、次いでACRデータベース1202を調べて、更新されたオペレーティングシステム1204との互換性のために、コード単位102の任意の部分を書き換える必要があるかどうかを確かめる。書き換える必要がある場合、アプリケーション互換リライタ1200は、適切な修正をコード単位102に適用する。
(方法例)
次に、コ―ドの書き換えを実施する方法例を、主に図13のフロー図を参照して説明する。方法は、図1〜12に関して上述した実施形態の例に適用される。1つまたは複数の方法がフロー図、およびフロー図のブロックに関連付けられているテキストによって開示されているが、記載した方法の要素を必ずしも示した順序で実行する必要はなく、代替の順序が同様の利点をもたらし得ることを理解されたい。さらに、方法は、排他的なものではなく、単独、または互いの組合せで実行することができる。記載した方法の要素は、例えばASIC上のハードウェア論理ブロック、またはコンピュータ可読媒体上で定義されたコンピュータ可読命令の実行によるなど、任意の適切な手段によって実行することができる。
「コンピュータ可読媒体」は、本明細書で使用する場合、プロセッサによって使用される、または実行される命令を含む、格納する、伝達する、伝搬する、または移送することができる任意の媒体とすることができる。コンピュータ可読媒体は、それだけには限定されないが、電子、磁気、光学、電磁、赤外線、または半導体のシステム、装置、デバイス、または伝搬媒体とすることができる。コンピュータ可読媒体のより具体的な例には、数ある中でも特に、1つまたは複数の配線を有する電気接続(電子)、ポータブルコンピュータディスケット(磁気)、ランダムアクセスメモリ(RAM)(磁気)、読み取り専用メモリ(ROM)(磁気)、消去可能プログラム可能読み取り専用メモリ(EPROMまたはフラッシュメモリ)、光ファイバ(光)、書き換え可能コンパクトディスク(CD−RW)(光)、およびポータブルコンパクトディスク読み取り専用メモリ(CD−ROM)(光)などがある。
方法1300のブロック1302で、コード単位が受信される。コード単位は、例えばオペレーティングシステム、セキュリティポリシー、アプリケーションツールなど、スタンドアロンモジュールまたはコンピュータシステム上で実行する構成要素内のモジュールであるリライトマネージャによって受信される。ブロック1304で、リライトマネージャは、コード単位を書き換える必要があると決定する。この決定は、例えば、コード単位を書き換える必要があることをリライトマネージャに伝えるコード単位自体の中のタグ、属性、文字列などのリライト命令を読み取ることによるなど、様々な方法で行うことができる。ブロック1306で、リライトマネージャは、コード単位を書き換える1つまたは複数のリライタを決定する。リライトマネージャは、リライタを識別するリライトリストにアクセスすることによってコード単位を書き換えるリライタを決定する。リライトリストは、コード単位自体の中の命令、またはコンピュータシステム上のスタンドアロンモジュールである、またはコンピュータシステムの別の構成要素の一部であるファイルとすることができる。あるいは、リライトリストは、ネットワーク206などのネットワークを介してアクセス可能なリモートコンピュータ装置上に配置されているファイルとすることができる。
どのリライタがコード単位を書き換えるかを決定した後、リライトマネージャは、1つまたは複数のリライタのグループから識別されたリライタにアクセスし、それらをコード単位とともにメモリ(RAM)にロードする。一般にリライタを、それらが実行されるコンピュータ装置上に存在するものとして説明しているが、ネットワーク206などのネットワークを介してアクセス可能なリモートコンピュータ装置上に配置することもできる。このシナリオでは、リライトマネージャは、リモート装置上のリライタにアクセスし、それらをコード単位とともにRAMにロードすることになる。次いでリライトマネージャは、ブロック1308に示すように、コード単位およびリライタが信用のおけるものであることを確認する。これは、コード単位およびリライタにそれぞれ関連付けられているデジタル署名を認証することによって行われる。ブロック1310で、リライトマネージャは、コード単位に対して実行するための特定の順序でリライタを順序付ける。コード単位に適用されるべきリライタは1つだけでもよい。この場合、リライタの順序付けは行われないことになる。複数のリライタの順序は、リライトリストに従って決定される。ブロック1312で、リライトマネージャは、適切な順序で一度に1回、コード単位に対して1つまたは複数のリライタを実行する。コード単位に対する各リライタの実行は、一意の方法でコード単位を変更する。1つまたは複数のリライタによる書き換えの結果が書き換えられたコード単位である。ブロック1314で、書き換えられたコード単位のためのデジタル署名が生成される。デジタル署名は、ブロック1316に示すように、書き換えられたコード単位に例えば添付されるなどして関連付けられている。ブロック1318で、書き換えられたコード単位、および任意選択で関連付けられたデジタル署名がリライトキャッシュに格納される。
ブロック1320で、コード単位を実行する旨の命令が受信される。ブロック1322で、リライトマネージャは、書き換えられたコード単位がリライトキャッシュに格納されることを認識する。したがって、書き換えプロセスを再度実施する必要はない。代わりに、書き換えられたコード単位がブロック1326でリライトキャッシュから直接ロードされ、1328で実行される。
1つまたは複数の方法がフロー図、およびフロー図のブロックに関連付けられているテキストによって開示されているが、ブロックを必ずしも示した順序で実行する必要はなく、代替の順序が同様の利点をもたらし得ることを理解されたい。さらに、方法は、排他的なものではなく、単独、または互いの組合せで実行することができる。
(コンピュータ例)
図14は、図1〜13を参照して上述したものなど、開発者コンピュータ202、中間コンピュータ302、および配置コンピュータ204を実装するのに適したコンピューティング環境の例を示している。1つの具体的な構成を図14に示しているが、開発者コンピュータ202、中間コンピュータ302、および配置コンピュータ204は、他のコンピューティング構成に実装することができる。
コンピューティング環境1400は、コンピュータ1402の形で汎用コンピューティングシステムを含む。コンピュータ1402の構成要素は、それだけには限定されないが、1つまたは複数のプロセッサまたは処理ユニット1404、システムメモリ1406、およびプロセッサ1404を含む様々なシステム構成要素をシステムメモリ1406に結合するシステムバス1408を含み得る。
システムバス1408は、様々なバスアーキテクチャのうちの任意のものを使用するメモリバスまたはメモリコントローラ、周辺バス、高速グラフィックスポート、およびプロセッサまたはローカルバスを含むいくつかのタイプのバス構造のうちの1つまたは複数を表す。システムバス1408の一例には、メザニンバスとしても知られている周辺部品相互接続(PCI)バスがある。
コンピュータ1402は、様々なコンピュータ可読媒体を含む。こうした媒体は、コンピュータ1402からアクセスできる使用可能な任意の媒体とすることができ、揮発性および不揮発性の媒体、取り外し式および固定式の媒体を含む。システムメモリ1406は、ランダムアクセスメモリ(RAM)1410などの揮発性メモリ、および/または読み取り専用メモリ(ROM)1412などの不揮発性メモリの形でコンピュータ可読媒体を含む。基本入出力システム(BIOS)1414は、例えば起動中など、コンピュータ1402内の要素間での情報の転送を助ける基本ルーチンを含み、ROM1412に格納されている。RAM1410は、処理ユニット1404から直接アクセス可能な、かつ/または処理ユニット1404が現在処理しているデータおよび/またはプログラムモジュールを含む。
コンピュータ1402は、取り外し式/固定式、揮発性/不揮発性コンピュータ記憶媒体も含み得る。一例として、図14は、図には示していないが固定式不揮発性磁気媒体から読み取り、あるいはそこに書き込むハードディスクドライブ1416、フロッピー(登録商標)ディスクなどの取り外し式不揮発性磁気ディスク1420から読み取り、あるいはそこに書き込む磁気ディスクドライブ1418、およびCD−ROM、DVD−ROM、他の光媒体など、取り外し式不揮発性光ディスク1424から読み取り、あるいはそこに書き込む光ディスクドライブ1422を示している。ハードディスクドライブ1416、磁気ディスクドライブ1418、および光ディスクドライブ1422はそれぞれ、1つまたは複数のデータ媒体インターフェース1425によってシステムバス1408に接続される。あるいは、ハードディスクドライブ1416、磁気ディスクドライブ1418、および光ディスクドライブ1422は、図には示していないがSCSIインターフェースによってシステムバス1408に接続することができる。
ディスクドライブおよびその関連のコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピュータ1402の他のデータの不揮発性記憶域を提供する。例は、ハードディスク1416、取り外し式磁気ディスク1420、および取り外し式光ディスク1424を示しているが、磁気カセットや他の磁気記憶装置、フラッシュメモリカード、CD−ROM、デジタル多用途ディスク(DVD)または他の光記憶域、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、電気的消去可能プログラム可能読み取り専用メモリ(EEPROM)など、コンピュータによってアクセス可能なデータを格納できる他のタイプのコンピュータ可読媒体を使用してコンピューティングシステムおよび環境の例を実装することができることを理解されたい。
一例としてオペレーティングシステム1426、1つまたは複数のアプリケーションプログラム1428、他のプログラムモジュール1430、およびプログラムデータ1432を含めて、いくつかのプログラムモジュールをハードディスク1416、磁気ディスク1420、光ディスク1424、ROM1412、および/またはRAM1410に格納することができる。こうしたオペレーティングシステム1426、1つまたは複数のアプリケーションプログラム1428、他のプログラムモジュール1430、およびプログラムデータ1432のそれぞれ、またはそれらの組合せは、ユーザのネットワークアクセス情報のキャッシュ方式の実施形態を含み得る。
コンピュータ1402は、通信媒体として識別される様々なコンピュータ/プロセッサ読み取り可能媒体を含むことができる。通信媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを搬送波または他の移送機構などの変調されたデータ信号に組み込む。これには任意の情報配送媒体がある。「変調されたデータ信号」という用語は、信号に情報を符号化するように1つまたは複数のその特性が設定または変更された信号を意味する。通信媒体には、それだけには限定されないが一例として、有線ネットワーク、直接配線された接続などの有線媒体、および音響、RF、赤外線、その他の無線媒体などの無線媒体がある。また、上記のどんな組合せでもコンピュータ可読媒体の範囲内に含まれるものとする。
ユーザは、コマンドおよび情報をキーボード1434、および「マウス」などのポインティング装置1436などの入力装置を介してコンピュータ1402に入力することができる。具体的には図示していないが、他の入力装置1438には、マイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、シリアルポート、スキャナなどがある。これらおよび他の入力装置は、システムバス1408に結合されている入力/出力インターフェース1440を介して処理ユニット1404に接続されるが、パラレルポート、ゲームポート、ユニバーサルシリアルバス(USB)など他のインターフェースおよびバス構造で接続してもよい。
モニタ1442または他のタイプの表示装置も、ビデオアダプタ1444などのインターフェースを介してシステムバス1408に接続することができる。モニタ1442に加えて、他の出力周辺装置は、入力/出力インターフェース1440を介してコンピュータ1402に接続することができる、図示していないスピーカやプリンタ1446などの構成要素を含むことができる。
コンピュータ1402は、リモートコンピューティング装置1448など1つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク式環境で動作することができる。一例として、リモートコンピューティング装置1448は、パーソナルコンピュータ、ポータブルコンピュータ、サーバ、ルータ、ネットワークコンピュータ、ピア装置、または他の一般のネットワークノードなどでよい。リモートコンピューティング装置1448は、コンピュータシステム1402に関連して本明細書に記載した要素および特徴の多くまたはすべてを含み得るポータブルコンピュータとして示されている。
コンピュータ1402とリモートコンピュータ1448との間の論理接続は、ローカルエリアネットワーク(LAN)1450および一般の広域ネットワーク(WAN)1452として示されている。こうしたネットワーキング環境は、オフィス、全社規模のコンピュータネットワーク、イントラネット、およびインターネットではごく一般的である。LANネットワーキング環境に実装する場合、コンピュータ1402は、ネットワークインターフェースまたはアダプタ1454を介してローカルネットワーク1450に接続される。WANネットワーキング環境に実装する場合、コンピュータ1402は、モデム1456、または広域ネットワーク1452を介して通信を確立する他の手段を含む。モデム1456は、コンピュータ1402の内蔵のものでも外付けのものでもよく、入力/出力インターフェース1440または他の適切な機構を介してシステムバス1408に接続することができる。示したネットワーク接続は例であり、コンピュータ1402と1448との間の通信リンクを確立する他の手段を使用することができることを理解されたい。
ネットワーク式環境では、コンピューティング環境1400で示したものなど、コンピュータ1402に関連して示したプログラムモジュール、またはその一部をリモートメモリ記憶装置に格納することができる。一例として、リモートアプリケーションプログラム1458は、リモートコンピュータ1448のメモリ装置上に存在する。例示の目的で、アプリケーションプログラム、およびオペレーティングシステムなどの他の実行可能プログラム構成要素は、本明細書には個別のブロックとして示しているが、こうしたプログラムおよび構成要素は、様々な時にコンピュータシステム1402の異なる記憶構成要素に存在し、コンピュータのデータプロセッサによって実行されることを理解されたい。
(結論)
本発明は、構造の特徴および/または方法論的動作に固有の言語で説明しているが、添付の特許請求の範囲で定義した本発明は、必ずしも記載した特定の特徴または動作に限定されるわけではないことを理解されたい。むしろ特定の特徴および動作は、請求した本発明を実施する形式の例として開示されている。
様々な開発および配置の環境で行うことができるコードを書き換えるプロセス例を示す図である。 コードの書き換えを実施するのに適したコンピューティング環境の例を示す図である。 コードの書き換えを実施するのに適したコンピューティング環境の別の例を示す図である。 コードの書き換えを容易にする様々な構成要素を詳述する開発者コンピュータ、中間コンピュータ、および配置コンピュータを示すブロック図の例である。 図1のコードの書き換えのプロセス例を実施する構成要素を詳述するブロック図の例である。 コード書き換えプロセスを実施する構成要素をオペレーティングシステム構成要素の一部として組み込むことができることを示す図である。 コード書き換えプロセスを実施する構成要素をスタンドアロンモジュールおよび様々なシステムの構成要素の一部として示す図である。 コード書き換えプロセスを実施する構成要素をスタンドアロンモジュールおよび様々なシステムの構成要素の一部として示す図である。 コード単位自体内に含まれるコード書き換えプロセスを実施する構成要素を示す図である。 図2に示す環境と一致するコード配置環境例を示す図である。 図2に示す環境と一致するコード配置環境例を示す図である。 アプリケーション互換リライタと呼ばれるシステムコードリライタの例を示す図である。 コードの書き換えを実施する方法の例を示すブロック図である。 図2および図3の環境例に示したものなど、開発者コンピュータ、中間コンピュータ、および配置コンピュータを実装するのに適したコンピューティング環境の例を示す図である。
符号の説明
102 コード単位
104 コード書き換え機能
106 書き換えられたコード単位
202 開発者コンピュータ
204 配置コンピュータ
206 ネットワーク
302 中間コンピュータ
304 企業
1404 処理ユニット
1406 システムメモリ
1408 システムバス
1425 データメディアインターフェース
1426 オペレーティングシステム
1428 アプリケーションプログラム
1430 プログラムモジュール
1432 プログラムデータ
1434 キーボード
1436 マウス
1438 他の装置
1440 I/Oインターフェース
1442 モニタ
1444 ビデオアダプタ
1446 プリンタ
1448 リモートコンピューティング装置
1452 インターネット
1454 ネットワークアダプタ
1456 モデム
1458 リモートアプリケーションプログラム

Claims (47)

  1. 実行可能命令を有するコード単位と、
    少なくとも1つのリライタを識別するリライタリストと、
    前記少なくとも1つのリライタを含む、前記コード単位を書き換えることができる1つまたは複数のリライタと
    を含むことを特徴とする複数のデータ構造を含む1つまたは複数のコンピュータ可読媒体。
  2. 前記1つまたは複数のリライタの前記少なくとも1つのリライタにアクセスし、前記コード単位に対して前記少なくとも1つのリライタを実行して書き換えられたコード単位を生成するように構成されている実行可能命令を有するリライトマネージャをさらに含むことを特徴とする請求項1に記載の1つまたは複数のコンピュータ可読媒体。
  3. キャッシュをさらに含み、前記リライトマネージャが前記書き換えられたコード単位を前記キャッシュに格納するようにさらに構成されていることを特徴とする請求項1に記載の1つまたは複数のコンピュータ可読媒体。
  4. 前記リライタリストは、
    前記コード単位内の1つまたは複数のカスタム属性のリストと、
    セキュリティポリシー内のリストと、
    インストールツール内のリストと、
    構成ファイル内のリストと、
    XML(拡張可能なマーク付け言語)ファイル内のリストと
    を含むグループから選択されることを特徴とする請求項1に記載の1つまたは複数のコンピュータ可読媒体。
  5. 前記リライトマネージャは、
    スタンドアロンモジュールと、
    オペレーティングシステムモジュールと、
    実行環境モジュールと、
    JITコンパイラモジュールと、
    ソースコードコンパイラモジュールと、
    前記コード単位をインストールするように構成されているインストールツールと
    を含むグループから選択されるモジュールであることを特徴とする請求項2に記載の1つまたは複数のコンピュータ可読媒体。
  6. 請求項1に記載の1つまたは複数のコンピュータ可読媒体を含み、
    前記コード単位を作成するように構成されている開発者コンピュータと、
    前記コード単位を配置するように構成されている中間コンピュータと、
    前記コード単位を実行するように構成されている配置コンピュータと
    を含むグループから選択されることを特徴とするコンピュータ。
  7. 前記コード単位の変換を開始し、
    前記変換を実施するための1つまたは複数のリライタを識別する
    ように構成されている実行可能命令を含むことを特徴とするコード単位を含む1つまたは複数のコンピュータ可読媒体。
  8. 前記1つまたは複数のリライタは複数のリライタであり、各リライタは前記コード単位の一意の変換を実施するように構成されており、前記コード単位は、前記一意の変換を特定の順序で実施するために前記複数のリライタを順序付けるように構成されている実行可能命令をさらに含むことを特徴とする請求項7に記載の1つまたは複数のコンピュータ可読媒体。
  9. 前記コード単位は、前記コード単位内の識別された要素に対して前記変換を実施するために前記1つまたは複数のリライタを案内するように構成されている実行可能命令をさらに含むことを特徴とする請求項7に記載の1つまたは複数のコンピュータ可読媒体。
  10. 前記開始するステップは、
    前記変換を実施すべき環境を識別するステップと、
    前記コード単位が前記識別された環境を経験した場合のみ前記変換を開始するステップと
    を含むことを特徴とする請求項7に記載の1つまたは複数のコンピュータ可読媒体。
  11. 環境を識別する前記ステップは、
    ソースコードコンパイル環境を識別するステップと、
    実行前コンパイル環境を識別するステップと、
    インストール時コンパイル環境を識別するステップと、
    実行環境を識別するステップと、
    インストール環境を識別するステップと
    を含むことを特徴とする請求項10に記載の1つまたは複数のコンピュータ可読媒体。
  12. 1つまたは複数のリライタを識別する前記ステップは、前記コード単位内の前記1つまたは複数のリライタを列挙するステップを含むことを特徴とする請求項7に記載の1つまたは複数のコンピュータ可読媒体。
  13. 1つまたは複数のリライタを識別する前記ステップは、前記1つまたは複数のリライタのリストを含む前記コード単位から分離したファイルを識別するステップを含むことを特徴とする請求項7に記載の1つまたは複数のコンピュータ可読媒体。
  14. 実行可能命令を有するコード単位を受信し、
    前記コード単位を書き換えることができる少なくとも1つのリライタを決定し、
    前記少なくとも1つのリライタを呼び出し、
    前記少なくとも1つのリライタを前記コード単位に対して実行して書き換えられたコード単位を生成する
    ように構成されているコンピュータ実行可能命令を含むことを特徴とする1つまたは複数のコンピュータ可読媒体。
  15. 前記実行の前に前記コード単位および前記少なくとも1つのリライタの信頼性を確認するように構成されているコンピュータ実行可能命令をさらに含むことを特徴とする請求項14に記載の1つまたは複数のコンピュータ可読媒体。
  16. 前記確認するステップはデジタル署名を認証するステップを含むことを特徴とする請求項15に記載の1つまたは複数のコンピュータ可読媒体。
  17. 前記書き換えられたコード単位をキャッシュに格納するよう構成されているコンピュータ実行可能命令をさらに含むことを特徴とする請求項14に記載の1つまたは複数のコンピュータ可読媒体。
  18. 前記コード単位を実行する命令を受信し、
    前記コード単位が書き換えられたことを認識し、
    前記キャッシュから前記書き換えられたコード単位をロードし、
    前記書き換えられたコード単位を実行する
    ように構成されているコンピュータ実行可能命令をさらに含むことを特徴とする請求項17に記載の1つまたは複数のコンピュータ可読媒体。
  19. 前記書き換えられたコード単位のデジタル署名を生成し、
    前記デジタル署名を前記書き換えられたコード単位に関連付ける
    ように構成されているコンピュータ実行可能命令をさらに含むことを特徴とする請求項17に記載の1つまたは複数のコンピュータ可読媒体。
  20. 前記少なくとも1つのリライタは複数のリライタであり、前記1つまたは複数のコンピュータ可読媒体は、特定の書き換え順序で前記コード単位を書き換えるように前記複数のリライタを順序付けるように構成されたコンピュータ実行可能命令をさらに含むことを特徴とする請求項14に記載の1つまたは複数のコンピュータ可読媒体。
  21. 前記順序付けるステップは、
    リライタリストにアクセスするステップと、
    前記リライタリストに従って前記書き換え順序を設定するステップと
    を含むことを特徴とする請求項20に記載の1つまたは複数のコンピュータ可読媒体。
  22. 前記アクセスするステップは、
    前記コード単位と、
    前記コード単位に関連付けられている個別のファイルと、
    システムポリシーと
    を含むグループから選択された前記リライタリストのある位置にアクセスするステップを含むことを特徴とする請求項21に記載の1つまたは複数のコンピュータ可読媒体。
  23. 前記少なくとも1つのリライタを決定する前記ステップはリライトリストを読み取るステップを含むことを特徴とする請求項14に記載の1つまたは複数のコンピュータ可読媒体。
  24. ソースコードコンパイラと、
    インストールツールと、
    管理された実行環境と、
    スタンドアロンリライト管理ツールと、
    JIT(ジャストインタイム)コンパイラと
    を含むグループから選択されるツールに組み込まれることを特徴とする請求項14に記載の1つまたは複数のコンピュータ可読媒体。
  25. 請求項14に記載の1つまたは複数のコンピュータ可読媒体を含み、
    前記コード単位を開発するように構成されている開発者コンピュータと、
    前記コード単位をインストールするように構成されている中間コンピュータと、
    前記コード単位を実行するように構成されている配置コンピュータと
    を含むグループから選択されることを特徴とするコンピュータ。
  26. コード単位と、
    前記コード単位を一意のやり方で書き換えるようにそれぞれ構成されている構成可能な1組のリライタと、
    前記構成可能な1組のリライタから1つまたは複数のリライタを識別し、前記識別された1つまたは複数のリライタを前記コード単位に対して実行するように構成されているリライトマネージャと、
    前記識別された1つまたは複数のリライタを前記コード単位に対して実行することによって生成される書き換えられたコード単位と
    を含むことを特徴とするコンピュータ。
  27. リライトキャッシュをさらに含み、前記リライトマネージャが前記書き換えられたコード単位を前記リライトキャッシュに格納するようにさらに構成されていることを特徴とする請求項26に記載のコンピュータ。
  28. 前記リライトマネージャが前記コード単位に対して実行する前記1つまたは複数のリライタをそこから識別するリライトリストをさらに含むことを特徴とする請求項26に記載のコンピュータ。
  29. 前記リライトリストは、
    前記コード単位内のリライタのリストと、
    スタンドアロンファイル内のリライタのリストと、
    セキュリティポリシー内のリライタのリストと、
    インストールツール内のリライタのリストと
    を含むグループから選択された構成要素であることを特徴とする請求項28に記載のコンピュータ。
  30. 前記コード単位に関連付けられている第1のデジタル署名と、
    前記構成可能な1組のリライタからの固有のリライタにそれぞれ関連付けられている第2のデジタル署名の組と
    をさらに含み、前記リライトマネージャは、前記第1のデジタル署名に基づいて前記コード単位が信頼されるかどうかを決定し、前記識別された1つまたは複数のリライタからの各リライタが前記第2のデジタル署名の組からの対応する第2のデジタル署名に基づいて信頼されるかどうかを決定し、前記コード単位および前記識別された1つまたは複数のリライタからの各リライタが信頼された場合にのみ前記識別された1つまたは複数のリライタを前記コード単位に対して実行するようにさらに構成されている
    ことを特徴とする請求項26に記載のコンピュータ。
  31. 前記リライトマネージャによって前記書き換えられたコード単位に関連付けられており、前記書き換えられたコード単位が信頼されることを確認するように構成されている第3のデジタル署名をさらに含むことを特徴とする請求項30に記載のコンピュータ。
  32. 前記リライトマネージャは、
    スタンドアロンリライトモジュールと、
    オペレーティングシステムの一部として構成されているリライトモジュールと、
    インストールツールの一部として構成されているリライトモジュールと、
    セキュリティポリシーの一部として構成されているリライトモジュールと
    を含むグループから選択された構成要素であることを特徴とする請求項26に記載のコンピュータ。
  33. 前記コード単位を開発するように構成されている開発コンピュータと、
    前記コード単位をインストールするように構成されている中間コンピュータと、
    前記コード単位を実行するように構成されている配置コンピュータと
    を含むグループから選択されることを特徴とする請求項26に記載のコンピュータ。
  34. 実行可能コード単位を受信するステップと、
    前記コード単位を書き換える必要があると決定するステップと、
    前記コード単位を書き換えるための1つまたは複数のリライタを決定するステップと、
    前記1つまたは複数のリライタを前記コード単位に対して稼働させて書き換えられたコード単位を生成するステップと
    を含むことを特徴とする方法。
  35. 前記稼働するステップの前に前記コード単位および前記1つまたは複数のリライタの信頼性を確認するステップをさらに含むことを特徴とする請求項34に記載の方法。
  36. 前記確認するステップはデジタル署名を認証するステップを含むことを特徴とする請求項35に記載の方法。
  37. 前記書き換えられたコード単位をキャッシュに格納するステップをさらに含むことを特徴とする請求項34に記載の方法。
  38. 前記コード単位を実行する命令を受信するステップと、
    前記書き換えられたコード単位を前記キャッシュに格納することを認識するステップと、
    前記キャッシュから前記書き換えられたコード単位をロードするステップと、
    前記書き換えられたコード単位を実行するステップと
    をさらに含むことを特徴とする請求項37に記載の方法。
  39. 前記書き換えられたコード単位のデジタル署名を生成するステップと、
    前記デジタル署名を前記書き換えられたコード単位に関連付けるステップと
    をさらに含むことを特徴とする請求項37に記載の方法。
  40. 前記コード単位を特定の書き換え順序で書き換えるように前記1つまたは複数のリライタを順序付けるステップをさらに含むことを特徴とする請求項34に記載の方法。
  41. 前記順序付けるステップは、
    リライタリストにアクセスするステップと、
    前記リライタリストに従って前記書き換え順序を設定するステップと
    を含むことを特徴とする請求項40に記載の方法。
  42. 前記1つまたは複数のリライタを決定するステップはリライタリストを読み取るステップを含むことを特徴とする請求項34に記載の方法。
  43. 前記読み取るステップは、
    前記実行可能コード単位と、
    前記実行可能コード単位に関連付けられている個別のファイルと
    を含むグループから選択されるリライタリストのある位置を読み取るステップを含むことを特徴とする請求項42に記載の方法。
  44. コード単位を受信するステップと、
    前記コード単位をリライタによって書き換えるべきであると決定するステップと、
    前記コード単位およびリライタが信頼されるかどうかを決定するステップと、
    前記コード単位に対して前記リライタを稼働させて、前記コード単位および前記リライタが信頼される場合、書き換えられたコード単位を生成するステップと、
    前記書き換えられたコード単位をキャッシュに格納するステップと
    を含むことを特徴とする方法。
  45. 前記書き換えられたコード単位のデジタル署名を生成するステップと、
    前記デジタル署名を前記書き換えられたコード単位に添付するステップと
    をさらに含むことを特徴とする請求項44に記載の方法。
  46. 前記コード単位を実行する呼び出しを受信するステップと、
    前記コード単位が書き換えられたことを認識するステップと、
    前記キャッシュから前記書き換えられたコード単位をロードするステップと、
    前記書き換えられたコード単位に添付された前記デジタル署名を確認するステップと、
    前記確認するステップが前記書き換えられたコード単位は安全であることを示す場合、前記書き換えられたコード単位を実行するステップと
    をさらに含むことを特徴とする請求項45に記載の方法。
  47. 前記リライタはアプリケーション互換リライタであり、前記コード単位を書き換えるべきであると決定するステップは、
    前記コード単位をアプリケーションとして識別するステップと、
    アプリケーション互換リライタデータベースを調べて、現在の実行環境との互換性のために前記アプリケーションの任意の部分を書き換える必要があるかどうかを決定するステップと
    を含むことを特徴とする請求項44に記載の方法。
JP2005020314A 2004-02-27 2005-01-27 コードの書き換え Expired - Fee Related JP4851096B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/789,201 US7409675B2 (en) 2004-02-27 2004-02-27 Code rewriting
US10/789,201 2004-02-27

Publications (3)

Publication Number Publication Date
JP2005243004A true JP2005243004A (ja) 2005-09-08
JP2005243004A5 JP2005243004A5 (ja) 2008-03-13
JP4851096B2 JP4851096B2 (ja) 2012-01-11

Family

ID=34838851

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005020314A Expired - Fee Related JP4851096B2 (ja) 2004-02-27 2005-01-27 コードの書き換え

Country Status (5)

Country Link
US (1) US7409675B2 (ja)
EP (1) EP1577767B1 (ja)
JP (1) JP4851096B2 (ja)
KR (1) KR100965706B1 (ja)
CN (1) CN1661551A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010267264A (ja) * 2009-05-15 2010-11-25 Internatl Business Mach Corp <Ibm> コンポーネント・ベース・アプリケーションに対して実行可能なコードを構築する方法、その方法を実行するプログラムを含むコンピュータ可読の記憶媒体、およびコンパイラ
JP2015531502A (ja) * 2012-09-05 2015-11-02 マイクロソフト テクノロジー ライセンシング,エルエルシー アプリケーション用の中間言語コードからネイティブコードを生成すること

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7901291B2 (en) * 2001-09-28 2011-03-08 Igt Gaming device operable with platform independent code and method
US7493605B2 (en) * 2004-12-29 2009-02-17 Mainsoft R&D Ltd Method and a software product for adapting a .Net framework compliant reflection mechanism to a java environment
US9286308B2 (en) 2005-12-22 2016-03-15 Alan Joshua Shapiro System and method for metadata modification
WO2007072310A1 (en) 2005-12-22 2007-06-28 Shapiro Alan J System and method for software delivery
CN101110020B (zh) 2006-07-21 2011-01-26 国际商业机器公司 维护关于可编辑对象中的元素的与原创性有关的信息的方法和系统
US7966599B1 (en) * 2006-08-29 2011-06-21 Adobe Systems Incorporated Runtime library including a virtual file system
US9251498B2 (en) * 2006-10-23 2016-02-02 Oracle International Corporation Facilitating deployment of customizations of enterprise applications
CN101187965B (zh) * 2006-11-16 2010-12-15 思科技术公司 用于过滤对数据对象的访问的方法和装置
US8341616B2 (en) * 2007-03-28 2012-12-25 International Business Machines Corporation Updating digitally signed active content elements without losing attributes associated with an original signing user
EP2015561A1 (fr) * 2007-07-10 2009-01-14 Nagracard S.A. Procédé d'envoi d'un code exécutable à un dispositif de réception et procédé d'exécution de ce code
US8024315B2 (en) * 2007-07-20 2011-09-20 International Business Machines Corporation Method of dynamically providing a compound object's source information during its development
US8677141B2 (en) * 2007-11-23 2014-03-18 Microsoft Corporation Enhanced security and performance of web applications
US8359582B2 (en) * 2007-12-31 2013-01-22 Hewlett-Packard Development Company, L.P. Compiling and inserting code snippets at runtime
US20090193392A1 (en) * 2008-01-29 2009-07-30 Michael David Downen Dynamic intermediate language modification and replacement
US8443338B2 (en) * 2008-10-08 2013-05-14 Microsoft Corporation Logical extensions to intermediate code
US8434059B2 (en) * 2009-05-01 2013-04-30 Apple Inc. Systems, methods, and computer-readable media for fertilizing machine-executable code
US9185064B2 (en) * 2010-01-15 2015-11-10 Microsoft Technology Licensing, Llc Interactive email
US8955043B2 (en) * 2010-01-27 2015-02-10 Microsoft Corporation Type-preserving compiler for security verification
US9836724B2 (en) 2010-04-23 2017-12-05 Microsoft Technology Licensing, Llc Email views
KR101490047B1 (ko) * 2013-09-27 2015-02-04 숭실대학교산학협력단 자가변환 기반 애플리케이션 코드 난독화 장치 및 그 방법
KR101770292B1 (ko) 2014-11-27 2017-08-22 주식회사 엘지씨엔에스 컴퓨터 수행 가능한 모델 역공학 방법 및 장치
CN104657185B (zh) * 2015-03-12 2017-08-11 东港股份有限公司 一种Java卡的Java代码补丁方法
US10216819B2 (en) 2015-03-20 2019-02-26 International Business Machines Corporation Automated identification of complex transformations and generation of subscriptions for data replication
US10686608B2 (en) * 2018-02-26 2020-06-16 Red Hat, Inc. Secure, platform-independent code signing
CN112905231A (zh) * 2021-02-04 2021-06-04 浪潮电子信息产业股份有限公司 一种业务系统重构方法、系统及相关装置
KR20230049392A (ko) * 2021-10-06 2023-04-13 삼성전자주식회사 멀티 서명된 apk 파일을 처리하는 전자 장치 및 그 동작 방법
US11941382B2 (en) * 2022-02-07 2024-03-26 Red Hat, Inc. User customizable compiler attributes for code checking

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4553205A (en) 1982-09-21 1985-11-12 Salvatore Porchia Flexible macro expansion process
CA2134059C (en) 1993-10-29 2009-01-13 Charles Simonyi Method and system for generating a computer program
US5634114A (en) * 1993-11-18 1997-05-27 Intel Corporation Dynamic link library version negotiation
US6397380B1 (en) 1994-10-21 2002-05-28 International Business Machines Corporation Computer-program compilers comprising a program augmentation capability
US6055503A (en) * 1997-08-29 2000-04-25 Preview Systems Software program self-modification
US6314562B1 (en) 1997-09-12 2001-11-06 Microsoft Corporation Method and system for anticipatory optimization of computer programs
US5966541A (en) * 1997-12-04 1999-10-12 Incert Software Corporation Test protection, and repair through binary-code augmentation
US6151708A (en) * 1997-12-19 2000-11-21 Microsoft Corporation Determining program update availability via set intersection over a sub-optical pathway
US6219834B1 (en) 1998-05-15 2001-04-17 International Business Machines Corporation Extensible compiler and method
US6302010B1 (en) * 1998-08-27 2001-10-16 Christopher A. Holler Utility vehicle for rescue and defense
US6324689B1 (en) * 1998-09-30 2001-11-27 Compaq Computer Corporation Mechanism for re-writing an executable having mixed code and data
US6353887B1 (en) * 1998-11-13 2002-03-05 Unisys Corporation Digital signaturing method and system for re-creating specialized native files out of a container imported from an open network or residing on a CD-ROM
US6457172B1 (en) 1999-04-13 2002-09-24 International Business Machines Corporation Compiler for supporting multiple runtime data representations
SG102555A1 (en) * 1999-11-25 2004-03-26 Kim Seng Holdings Pte Ltd Method for using a data flow net to specify and assemble computer software
EP1122640A1 (en) * 2000-01-31 2001-08-08 BRITISH TELECOMMUNICATIONS public limited company Apparatus for automatically generating source code
US6978448B1 (en) * 2000-06-12 2005-12-20 Sun Microsystems, Inc. Method and apparatus for rewriting bytecodes to minimize runtime checks
US9158538B2 (en) 2007-05-21 2015-10-13 International Business Machines Corporation User-extensible rule-based source code modification

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010267264A (ja) * 2009-05-15 2010-11-25 Internatl Business Mach Corp <Ibm> コンポーネント・ベース・アプリケーションに対して実行可能なコードを構築する方法、その方法を実行するプログラムを含むコンピュータ可読の記憶媒体、およびコンパイラ
US8943482B2 (en) 2009-05-15 2015-01-27 International Business Machines Corporation Incrementally constructing executable code for component-based applications
JP2015531502A (ja) * 2012-09-05 2015-11-02 マイクロソフト テクノロジー ライセンシング,エルエルシー アプリケーション用の中間言語コードからネイティブコードを生成すること
US10795652B2 (en) 2012-09-05 2020-10-06 Microsoft Technology Licensing, Llc Generating native code from intermediate language code for an application

Also Published As

Publication number Publication date
EP1577767B1 (en) 2018-05-02
KR100965706B1 (ko) 2010-06-24
US20050193369A1 (en) 2005-09-01
EP1577767A3 (en) 2007-11-21
US7409675B2 (en) 2008-08-05
CN1661551A (zh) 2005-08-31
EP1577767A2 (en) 2005-09-21
KR20050087727A (ko) 2005-08-31
JP4851096B2 (ja) 2012-01-11

Similar Documents

Publication Publication Date Title
JP4851096B2 (ja) コードの書き換え
US11599348B2 (en) Container image building using shared resources
JP4263476B2 (ja) ハッシュによるアセンブリの完全性の確認のための方法、コンピュータ可読媒体及びプログラム
US9201642B2 (en) Extending platform trust during program updates
JP5437550B2 (ja) ファームウェアの必要なメモリ容量を減らすシステム及び方法
JP5663006B2 (ja) ランタイム環境を構築するためのシステムおよび方法
US9460306B1 (en) System and method for controlling access of machine code to operating system resources
US20170010906A1 (en) Conservative class preloading for real time java execution
US8418169B2 (en) Management method for managing software module and information processor
KR20150024842A (ko) 적응식 이식가능 라이브러리
Langiu et al. Upkit: An open-source, portable, and lightweight update framework for constrained iot devices
JP2019502197A (ja) ランタイム生成コードにおける悪意のあるコードの検出のためのシステムおよび方法
CN106897587A (zh) 加固应用、加载加固应用的方法和装置
WO2023155697A1 (zh) 一种数据处理的方法和装置
KR101092373B1 (ko) 소프트웨어 패키지의 생성 및 설치를 위한 시스템 및 방법
Mäki et al. Interface diversification in IoT operating systems
US9367686B1 (en) System and method for antivirus checking of native images of software assemblies
CN112965731A (zh) 基于Tinker的Flutter热更新方法、装置、设备及存储介质
CN113168320A (zh) 用类选择性替换遗留加载模块程序以在java虚拟机中执行
Tang et al. Analysis of firmware vulnerabilities
CN113139197B (zh) 一种项目验签方法、装置和电子设备
US12008386B2 (en) Conservative class preloading for real time java execution
Brady et al. Dynamic Repair of Mission-Critical Applications with Runtime Snap-Ins
Eisenbach et al. Component adaptation in contemporary execution environments
JP2007128537A (ja) 動的に接続可能な実行イメージの真正性検証システム及び方法

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080128

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080128

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110513

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110804

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111014

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111020

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 4851096

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141028

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees