JP4615795B2 - プログラムバイナリに対する最小デルタジェネレータ - Google Patents
プログラムバイナリに対する最小デルタジェネレータ Download PDFInfo
- Publication number
- JP4615795B2 JP4615795B2 JP2001349299A JP2001349299A JP4615795B2 JP 4615795 B2 JP4615795 B2 JP 4615795B2 JP 2001349299 A JP2001349299 A JP 2001349299A JP 2001349299 A JP2001349299 A JP 2001349299A JP 4615795 B2 JP4615795 B2 JP 4615795B2
- Authority
- JP
- Japan
- Prior art keywords
- block
- cfg
- blocks
- program
- representation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99933—Query processing, i.e. searching
- Y10S707/99936—Pattern matching access
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99943—Generating database or data structure, e.g. via user interface
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Description
【発明の属する技術分野】
本発明は一般に、プログラムバイナリ間で最小限のデルタを生成することに関する。
【0002】
【従来の技術】
今日のソフトウェアシステムの重要な特徴の1つはアップグレードできることであり、これは「アップグレード性(upgradability)」と呼ばれることもある。古いソフトウェアは、絶えずより新しいバージョンで置換されており、コードの再使用可能性およびモジュラ開発が、ソフトウェア設計の主要な特徴である。
【0003】
正確さ
ソフトウェアを古いバージョンから新しいバージョンにアップグレードするときは、完全な正確さが極めて重要である。ターゲットコンピュータ中で新たにアップグレードしたソフトウェア中のあらゆるビットが、媒体ソースにある新しいソフトウェアと正確に合致(マッチ)しなければならない。さもなければ、新しいソフトウェアは誤動作するか全く動作しない恐れがある。
【0004】
完全な正確さを保証するために、従来の技術では、古いソフトウェアを新しいソフトウェアで完全に置換する。ソフトウェアプログラム(特に主要なアプリケーションスイートおよびオペレーティングシステム)のサイズおよび複雑さが増すにつれて、この十把ひとからげに置換して更新する手法は、このようなソフトウェアの顧客にとってより時間がかかり苛立たしいものになっている。
【0005】
このような更新のソースを、ローカル、携帯型かつ高帯域幅のリムーバブルメディア(CD−ROMなど)からリモート、集中型かつ比較的低い帯域幅のネットワークサーバ(インターネットウェブサーバなど)に移行する傾向により、事態は悪化している。100MBのソフトウェアをおそらくはCD−ROMから置換するのには数分かかることがあるが、同じ量のソフトウェアをダイヤルアップインターネット接続で置換するのには数時間かかることがある。
【0006】
本明細書で、「完全な正確さ」および「ほぼ同一」は、元々製作された新しいソフトウェアとユーザのコンピュータ上に存在する新しいソフトウェアの間での小さく実質的でない差を考慮に入れている。
【0007】
従来のデルタパッチング
通常、ソフトウェアのより新しいバージョンは、わずかな追加部分、ならびに、古い部分におけるいくつかの小さな変更を有する。したがって、古いバージョンを新しいバージョンで完全に置換する力任せの手法は行き過ぎである。ある代替手法は、古いバージョンから新しいバージョンを再構築できるように、これらの変更を「パッチ」に取り込むものである。古いバージョンと新しいバージョンの間に差があるので、この技法はしばしば「差分パッチング(diff−patching)」と呼ばれる。本明細書では、古いバージョンと新しいバージョンとの差を「デルタ」(Δ)と呼び、したがってこの差分パッチング技法を「デルタパッチング」(または「Δパッチング」)と呼ぶ。
【0008】
デルタパッチングに伴う問題は正確さである。何をパッチして何をパッチしないかを識別するのは難しい。このようなパッチの境界を正確に決定しないと、パッチしたバージョンは、ソフトウェアの所望の新バージョンとは異なるものになる。
【0009】
この結果、従来のデルタパッチングでは、正確さを達成する効率が損なわれる。一般に、サブモジュールファイル、データファイル、ライブラリファイル、およびこのようなファイルのグループは、どんな変更であれそれらの内に変更があるかどうかがマークされる。このことは例えば、100KbのDLL(ダイナミックリンクライブラリ)ファイル内のソースコードの一行が変更される場合でもDLLファイル全体を置換することを意味する。既存のDLLファイル中のフラグメントを置換するのではなくこのようにするのは、一部には、置換が必要なフラグメントを選択してそのフラグメントだけを完全に正確に置換するのが難しいからである。しかし主に、従来の技術ではモジュール全体を置換する方が効率的なので、このことが行われる。ある小さなフラグメント中の小さな変更が、プログラム全体に及ぶ変更に見える場合もある。
【0010】
【発明が解決しようとする課題】
この従来の非効率的なデルタパッチングは、ソフトウェア全体の大規模な置換よりは効率的で速いものの、依然として可能な限り効率的ではない。古いソフトウェアバージョンと形の異なる、または古いソフトウェアバージョン中に存在しない、モジュールまたはサブモジュールのフラグメントだけをパッチする方が効率的であろう。フラグメントの例としては、サブルーチン、関数、オブジェクト、データ構造、インタフェース、メソッド、またはこれらのいずれかの一部が挙げられる。
【0011】
不変フラグメントの検出
フラグメントデルタを検出するための前提は、フラグメントの不変性を検出できることである。言い換えれば、プログラムモジュールをパッチできるようになる前に、2つのバージョン間でどのフラグメントが変更されていないかを決定する必要がある。このような不変量を検出してパッチを生み出すことは、各バージョンに対するソースコードを知っていればそれほど難しくはない。
【0012】
しかし、このようなフラグメントがバイナリとして表されたものを(そのソースコードを知らずに)扱うときは、フラグメントの不変性の検出はかなり難しくなる。主な困難は、プログラムモジュールの異なるバージョン中に、機能的には変更されていないが異なるように見えるコードが存在することある。コードは、その機能の変更を受けないこともあるが、種々の理由で2つのバージョン中で異なって見えることがある。このような理由の例としては、次のことが挙げられる。
・コードのある領域の変更により、別の(変更されない)領域が異なって見える可能性がある。
・小さな2つのバイナリコードシーケンスが、異なる機能を有するソースコードに対応する場合でも同一に見えることがある。
・2つの構造におけるレジスタ割付けの違い。
【0013】
変更が見かけ上の変更を引き起こす場合
コードのある部分の小さな変更は、しばしば近くで、また時として遠く離れたコード領域でも、連続的な変更を引き起こす。例えば、以下の2つのソースフラグメントを考えてみる。
【0014】
2つのプログラムP1およびP2中にある2つの関数fおよびgは、名前の違いを別にすれば実際は同じである。ソースコードを知っていれば、各フラグメント中の「if(b>p)」条件が同じでありパッチする必要がないことが確定するのは明らかである。しかし、これらに対応するバイナリを検査する場合、スタックのベースからのbのオフセットは、この2つのフラグメント中で異なることになる。これは、P1中でbの前にaが宣言されている形が、P2中でaの前にbが宣言されている形と異なるからである。したがって、他がすべて同じであっても、2つのフラグメントのバイナリは同一ではないことになる。当然、形の上でのこれらの違いは実質的には関係ないが、それでもやはり得られるバイナリは異なる。
【0015】
次に、以下の抜粋を考えてみる。
Program P1 Program P2
---------- ----------
x = f (10) x = g (10)
【0016】
この例では、前の例と同様に関数fおよびgが定義されていると仮定する。ここでもまた、呼び出される関数ならびに呼出し引数が同一なので、2つの呼出しは同一である。しかし、fとgの一致を知らない場合は、上の呼出しの一致もわからないことになる。これは、局部的な変更が、ともすれば遠くのコード領域を通ってどのようにカスケードする可能性があるかを示す一例である。
【0017】
同一に見えるが同一ではない場合
時として2つのバイナリフラグメントが、対応するプログラムの構造中で異なる領域に対応するにもかかわらず同一に見える場合がある。以下の場合を考えてみる。
Program P1 Program P2
---------- -----------------
int a = atoi (argv [1]); int b = atoi (argv [2]):
int b = atoi (argv [2]) if (b < 10) return;
if (a < 10) return; ...
if (b < 20) return;
....
【0018】
P1中の条件「if(a<10)」とP2中の条件「if(b<10)」は、これらの機能が異なっても(これらのソースコードを検査すればはっきりわかるが)、両方とも同じバイナリコードに翻訳される場合がある。これは、P2中のスタック上のbのオフセットが、P1のスタック上のaのオフセットと同じである場合があるために起こる。2つの変数は、これらの上にあるコンテキストを見ればわかるように異なるプログラム引数によって定義されているので、明らかに異なる。しかし、上にあるソースコードコンテキストを参照せずにこれらのバイナリに相当するものを比較すると、同一であるかのような錯覚が生じる可能性がある。このバイナリに相当するものの表現は、次のように見える場合がある。
mov eax, dword ptr [ebp+8h]
cmp eax, 0ah
jge L
ret
L: ...
【0019】
レジスタ割付け
バイナリフラグメントの一致を検出する際のもう1つの問題は、レジスタ割付けによって生じる。コードの一部を変更すると、近くの領域が修正されていなくても、これらの後方の領域でレジスタ割付けの変更を引き起こす場合がある。したがって、バイナリを比較するときは、レジスタオペランドの変更のように見えるものが実際はレジスタの単純な名前変更によって識別が変えられたものだという可能性を考慮しなければならない。
【0020】
【課題を解決するための手段】
本明細書では、少なくとも2つのプログラムバイナリ間で最小限のデルタを生成する技術について述べる。本明細書に述べる一実施形態では、バイナリフォーマットのソースプログラム(S)と、バイナリ形式のターゲットプログラム(T)が提供される。それぞれの制御フローグラフ(CFG)を構築する。SのCFGとTのCFGとの共通ブロックを突き合わせる(マッチング)。ブロックは、それらの内容およびそれらの局所近傍(例えばd近傍)に基づいてマッチングする。さらにブロックは、計算したハッシュ値に基づくラベルを使用してマッチングする。マッチングは複数のパスで行い、各パスは、マッチのための基準を緩和することによってマッチングを向上させる。さらに、ブロックを公正に比較できるように、レジスタ名の変更の問題を解決する。
【0021】
上記の実施形態は中間出力を生み出すが、これはマッチしないブロックの内容である。このようなマッチしないブロックは、T中に見られるがS中には見られないブロックである。マッチしないブロックをSにマージするためのエッジ編集操作のセットを生み出す。マッチしないブロックと編集操作とを組み合わせたものがデルタである。SをパッチしてTの再構築コピーを生み出すには、デルタをSとマージする。
【0022】
この概要自体は、本発明の範囲を限定するものではない。本発明をよりよく理解するために、以下の詳細な説明および頭記の特許請求の範囲を添付の図面と共に参照されたい。本発明の範囲は頭記の特許請求の範囲に示す。
【0023】
図面全体にわたり、同じ要素および機構を参照するのに同じ番号を使用する。
【0024】
【発明の実施の形態】
後続の記述では、頭記の特許請求の範囲に挙げる要素を組み入れた、プログラムバイナリに対する最小デルタジェネレータの具体的な実施形態を述べる。これらの実施形態は、法定の書面による記述、実施可能であること、および最良の形態の要件を満たすために具体的に述べるものである。ただし、この記述自体は本特許の範囲を限定するものではない。
【0025】
本明細書では、プログラムバイナリに対する最小デルタジェネレータの、1つまたは複数の例示的な実施形態について述べる。発明者は、これらの例示的な実施形態を例として意図している。発明者は、これらの例示的な実施形態が、請求項に記載された本発明の範囲を限定するものであるとは意図しない。むしろ、請求項に記載された本発明が、現在または将来の他の技術を用いて他の形でも実施および実装できることを企図している。
【0026】
参照による組込み
以下の同時係属の特許出願は、すべて1999年6月30日に出願され、Microsoft Corporationに譲渡されたものである。これらを参照により本明細書に組み込む。
「Translation and Transformation of Heterogeneous Programs」という名称の米国特許出願第09/343,805号
「Instrumentation and Optimization Tools for Heterogeneous Programs」という名称の米国特許出願第09/343,298号
「Shared Library Optimization for Heterogeneous Programs」という名称の米国特許出願第09/343,279号
「Application Program Interface for Transforming Heterogeneous Programs」という名称の米国特許出願第09/343,276号
「Cross Module Representation of Heterogeneous Programs」という名称の米国特許出願第09/343,287号
【0027】
簡単な概略
プログラムバイナリに対する最小デルタジェネレータの例示的な一実施形態は、例示的な「デルタジェネレータ」と呼ぶことができる。本明細書に述べる1つまたは複数の例示的な実施形態は、(全体的または部分的に)図1のデルタジェネレータシステム100および/または図11に示すコンピューティング環境によって実装することができる。
【0028】
効率および速度を促進するために、例示的なデルタジェネレータは、バイナリソースとターゲットプログラムとの最小限の差を見つけ、それを用いてソースプログラムを修正する。しかし、このような効率および速度のために正確さが損なわれることはない。
【0029】
これを達成するために、例示的なデルタジェネレータは、ソースプログラムとターゲットプログラムのバイナリフラグメントを比較する。これらの間で同じ(すなわち変更されていない)フラグメントを識別する。これらの間で異なる(すなわち変更された)フラグメントを識別することも必要である。変更されたフラグメントをデルタに含める。例示的なデルタジェネレータは、ソースをデルタでパッチしてターゲットプログラムに変形させる。
【0030】
デルタジェネレータシステムの高レベルな記述
図1に、デルタジェネレータシステム100を示す。この図には、バイナリソースプログラム112およびバイナリターゲットプログラム122が示されている。デルタジェネレータシステム100は、ソースプログラム112およびデルタ(Δ)142からターゲットプログラム122を再構築する。ターゲットプログラムとソースプログラムは、同じプログラムの異なるバージョンであると想定し、したがってこれらのコードの少なくともいくつかの部分は共通する。例えば、ターゲットプログラムはソースプログラムの新しいバージョンとすることができる。
【0031】
ソースCFG機構110が、ソースプログラム112の制御フローグラフ(CFG)を作成する。CFGについては、「用語」セクションでより詳細に述べる。同様に、ターゲットCFG機構120が、ターゲットプログラム122のCFGを作成する。当然、この2つのCFG機構110および120は共通のCFG機構としてもよい。
【0032】
図1には、ソースCFGおよびターゲットCFGを入力として受け取ってこれらを比較するブロックマッチャ(matcher)130が示されている。これは、ソースCFGとターゲットCFGの両方に見られるバイナリフラグメントをマッチングする。
【0033】
デルタジェネレータ140は、デルタ(Δ)フラグメントとしてマッチしなかった、ターゲットCFG中の残りの(すなわちマッチしない)フラグメントを識別する。ブロックマッチャ130とデルタジェネレータ140がまとまって、ターゲットCFG中のバイナリフラグメントを、ソースCFG中でマッチするものとソースCFG中でマッチしないものとに識別する。
【0034】
さらに、Δ決定機構140がまた、ΔをソースCFG中にマージするためにどのようにソースCFGを編集するかを決定する。「編集」はΔ142の一部であり、Δ142はΔ決定機構140の結果である。
【0035】
Δパッチャ150が、ソースプログラムをバイナリレベルでパッチする。ソースプログラム112をΔ142と結合して、ターゲットプログラム160を再構築する。再構築したターゲットプログラム160は、ターゲットプログラム122と同一である。これは、意図される結果がターゲットプログラム122の同一コピーなので、同一である。このデルタジェネレータシステム100は、ソースプログラムを効率的にパッチすることによって誤りを導入することがないので、コピーは同一となる。
【0036】
図2に、プログラムバイナリに対する最小デルタジェネレータの例示的な実施形態のためのサンプルの適用シナリオを概略的に示す。図2には、インターネットなどのネットワーク接続215を介してリンクされたサーバ側210とクライアント側220が示されている。サーバ側210は、バイナリソースプログラム(S)112のコピーおよびバイナリターゲットプログラム(T)122のコピーを有するサーバ212を含む。クライアント側220は、バイナリソースプログラム(S)112のコピーだけを有するクライアント222を含む。クライアントは最初、ターゲットプログラム(T)122のコピーまたはデルタ(Δ)142は有しない。
【0037】
サーバ側210のサーバ212は、本明細書に述べる実施形態に従ってΔ142を作成する。サーバ212は、このようなΔをクライアント側220のクライアント222に送信する。142aおよび142b(ならびにこれらの矢印)の表現は、Δがサーバからクライアントに送信されているのを示す。
【0038】
クライアントは、新たに到着したΔ142でS112をパッチして、T122を再構築する。したがって、例示的なデルタジェネレータの実施形態によれば、限られた帯域幅と思われるネットワーク215を介して最小サイズのデルタが送信され、それによりクライアントがSをパッチしてTを正確に再構築する。
【0039】
用語
プログラムバイナリ(またはバイナリプログラム)の一例は、プログラムモジュールがバイナリとして表されたもの(例えばソフトウェア)である。これには、プログラムモジュールに対するソースコードは含まれない。
【0040】
「基本ブロック」(または単に「ブロック」)は、単一の入口点を有し(外部からは最初の命令だけにしか到達できない)、最後の命令に1つの出口点を有する命令シーケンスである。したがって、基本ブロック内部には一連の制御フローがある。基本ブロックはフラグメントの一例である。具体的には、コードフラグメントの一例である。基本ブロックは、「コードブロック」と呼ぶこともできる。
【0041】
制御フローグラフ(CFG)は、プログラムを抽象化したものである。これは、プログラム中の基本ブロックをノードとし、ブロック間の可能なすべての制御フローをエッジ(視覚的にしばしば矢印で表される)で表した有向グラフである。図3〜図5はCFGを含んでいる。
【0042】
プログラム中の隣接した静的データエリアを「データブロック」と呼び、これらもまた、CFG中のノードを形成する。データブロックはフラグメントの一例である。具体的には、データフラグメントの一例である。
【0043】
データブロックは、静的データ(「生」データと呼ばれる)を有し、プログラムの他の部分へのポインタを有する場合もある。これらのポインタは、例えばオブジェクトの仮想テーブルエントリとすることができる。このようなポインタは再配置可能データであり、したがって、データブロック中の他の静的データとは異なる。
【0044】
CFGでは、データブロック中のポインタを、データブロックからターゲットブロックへの有向エッジで表す。さらに、コードブロック中の命令中にあるアドレスオペランドを、コードブロックから対応アドレスにあるブロックへのエッジとして表す。
【0045】
データブロックの内容にはその生データが含まれるが、ブロック中のポインタは除外する。同様に、コードブロックの内容にはその命令シーケンスが含まれるが、アドレスオペランドは除外する。CFG中の基本ブロックの内容は、そのエッジと共に、プログラムを完全に指定する。CFG P中に所与の任意のブロックνがある場合、その親は、集合{χ|χ→νがP中のエッジ}であり、その子は、集合{χ|ν→χがP中のエッジ}である。
【0046】
本明細書で述べるCFGは、プログラムのレイアウトに関する完全な情報を含む。CFG中には、バイナリ中の関数に対応してプロシージャがあり、各プロシージャは、単一関数の基本ブロックによって誘導されるサブグラフである。関数のレイアウト(すなわちプログラムのアドレス空間における基本ブロックの構成)は、対応するプロシージャのすべてのブロックのリンクリストによって取り込まれ、したがって、リストの先頭から末尾まで走査すると、関数のレイアウト中の基本ブロックの順序が正確に記述される。
【0047】
ツールVが、所与のプログラムバイナリに対し、本明細書で述べるCFGを生み出す。さらにVは、プログラムに多くの種類の修正を加えることを可能にする(CFGへの)インタフェースを提供することもできる。これらの修正には、基本ブロックの追加および削除、それらの内容の修正、エッジの変更が含まれるが、これらに限定しない。
【0048】
本明細書に述べるツールVをどのように実装して使用するかは、当業者なら理解する。さらに、参照により組み込む特許出願には、ツールVのようなツールを実装するのに使用できるコンポーネントが記載されている。さらに、以下の刊行物に、ツールVが使用できるCFG方法に関する一般的な背景が提供されている。すなわち、Aho,Hopcroft,Ulman:「Principlesof Compiler Design」および2)A.Aho,R.Sethi,J.Ullman,「Compilers, Principles, Techniques,and Tools」(1986)である。
【0049】
プログラムバイナリに対する最小デルタジェネレータの実施形態の1つまたは複数の例について述べる際、プログラムのソース(S)バイナリと、プログラムのターゲット(T)バイナリについて論じる。TとSの関係は、次のように数学的に記述することができる。
Diff(S,T)=Δ
Patch(S,Δ)=T
すなわち言い換えれば次のようになる。
SとTの差異がデルタであり、
SをデルタでパッチするとTになる。
【0050】
本明細書で述べるように、例示的な実施形態はΔを十分に最小化するが、SをパッチしてTを再構築する際に完全な正確さを達成する能力は維持する。本明細書では、パッチングに関して、「完全な正確さ」(および「ほぼ同一」、または同様の用語)は、元のTと再構築したTの間での実質的でない差を考慮に入れている。
【0051】
マッチング
バイナリプログラム(SやTなど)の間の変更を検出するための前提は、バイナリフラグメントの一致を検出できることである。言い換えれば、プログラムモジュールをパッチできる前に、2つのバイナリプログラム間でどのフラグメントが変更されていないかを決定する必要がある。例えば、プログラムモジュール中のあるフラグメントの一致は、別のプログラムモジュール(おそらく同じモジュールの先または後のバージョン)中で、変更されていない同じフラグメントを見つけることによって検出することができる。
【0052】
単純な例
図3〜図5に、例示的なデルタジェネレータの方法論的な一実施形態の単純な一例を示す。この例では、最初の目標は、入力リストであるソース(S)310およびターゲット(T)320に対してΔ330を計算することである。
【0053】
図3にソース310を示すが、ソース310は6つのノード311〜316を含み、これらのノードの内容はそれぞれH、O、O、V、E、Rである。ターゲット320は6つのノード321〜326を含み、これらのノードの内容はそれぞれH、O、O、P、E、Rである。ソース310と比較して、ターゲット320は大きく変更されていない。違うのはノード314(「V」を含む)であり、これは、ターゲット中で欠けているが、ノード324(「P」を含む)で置換されている。
【0054】
例示的なデルタジェネレータは、変更されていないノードをマッチングする。
内容および相対的な配置に基づいて、ノード314および324を除く各ノードをマッチングする(すなわち識別する)。例えば、ノード311と321は、これらの内容(具体的には「H」)および相対位置が同一なのでマッチする。同様に、ノード312と322、ノード313と323、ノード315と325、ノード316と326がマッチする。
【0055】
図3に示すように、デルタ330は、ノード337の内容としてノード324の内容(「P」)を含む。デルタ330はまた、この新しいノードをどのようにソース中にパッチするかを指定する「編集」も含む。具体的には、デルタ330は、編集ボックス339内で「ADDEDGE(313,337);ADDEDGE(337,315)」を指定する。
【0056】
図4に、新しいノード337を挿入した後でソース310に追加すべき2つのエッジがあることを示す。したがってデルタは、ソース310中のノード313から新しいノード337へのエッジ339aを追加することになる編集操作ADDEDGE(313,337)と、ノード337からソース中のノード315へのリンク339bを追加することを指定する編集操作ADDEDGE(337,315)を含む。
【0057】
図5では、340aにソースとデルタを結合したものを示す。デルタ(新しいノード337および新しい2本のエッジ(339aおよび339b))の追加により、ソースは、リストターゲット320の正確なコピーに変形する。ターゲットのこの正確なコピーは、再構築したターゲット340bと呼ぶことができる。
【0058】
図4と図5を比較すると、ソースのノード313と314の間のエッジ314aと、ソースのノード314と315の間のエッジ314bが削除されていることに気付く。この削除は、エッジ339aおよび339bを追加することによって非明示である。
【0059】
マッチするブロックの発見
よいブロックのマッチングは、編集操作を最小限にするマッチングである。内容の類似性だけに基づいて2つのブロックをマッチングすると、よいマッチングにならないことがある。これは、内容が同一であってそれぞれのグラフにおける場所が異なるだけのブロックが、通常、ソース中ならびにターゲット中に複数あるからである。例えば、図6に示すサブグラフを考えてみる。
【0060】
図6には、ソース410およびターゲット420のサブグラフが示されている。この例では、内容からみて(412、416、422)、(413、417、423)、(414、418、424)、(411、421)、(415、425)の各グループ中のブロックはすべて同一であると仮定する。またこの例では、2つのブロックの内容が同一であればそれだけで、それらのブロックをマッチングすることができるとも仮定する。ブロック422をブロック412とマッチングする場合(両方とも「A」を含む)、他のブロックの最良のマッチングは次のようになる。
ブロック411(Ds)とブロック421(Dt)
ブロック415(Es)とブロック425(Et)
ブロック413とブロック423(両方とも「B」を含む)
ブロック414とブロック424(両方とも「C」を含む)
【0061】
この場合、このマッチングに従ってローカルエッジ構造が保存されるので、編集操作は必要ない。一方、ブロック422をブロック416とマッチングする場合(両方とも「A」を含む)、他のブロックの最良のマッチングは次のようになる。
ブロック411(Ds)とブロック421(Dt)
ブロック415(Es)とブロック425(Et)
ブロック417とブロック423(両方とも「B」を含む)
ブロック418とブロック424(両方とも「C」を含む)
【0062】
編集操作は、Delete(411,412)、Add(422,416)、Delete(416,419)、Add(416,415)である。本明細書では、Delete(a,b)は、「ノードaからノードbまでのエッジを削除する」ことを意味する。同様に、Add(a,b)は、「ノードaからノードbまでのエッジを追加する」ことを意味する。
【0063】
上の例は、内容だけに基づいている。これらの例は、各ブロックの周囲のブロックを考慮していない。これらの周囲ブロックは、そのブロックの近傍または局所近傍と呼ぶことができる。これらの例は、内容だけに基づく従来のマッチング手法がよいブロックのマッチングを生み出さないことを示す。これは誤ったマッチングさえ生み出す場合もある。
【0064】
したがって、例示的なデルタジェネレータは、ブロックをマッチングしながらブロックの近傍を考慮する。
【0065】
近傍の考慮
例示的なデルタジェネレータは、ブロックの内容および近傍に基づいてブロックをマッチングする。実際には、ソースCFGおよびターゲットCFGのいくつかのパスを生み出し、各パスで近傍をサイズの大きい順に考慮する。先にサイズの大きい方の近傍に基づいてマッチングすることが望ましい。こうすることでより正確なマッチが得られる。近傍に基づくマッチを検査した後、最後のパスでブロックの内容だけに基づいてブロックをマッチングする。必要条件ではないものの、最後に内容をマッチングするのが有利である。というのは、マッチしないブロックを記録するオーバーヘッドは普通、それを同一内容の任意のブロックとマッチングした後に必要となる編集操作のサイズよりも大きいからである。
【0066】
同一内容のブロックを検出するために、コードブロックに対しては操作コード(opcode)のシーケンスを得て、データブロックに対しては生の再配置不可能データを得ることから始める。前述のように、アドレスは普通、参照先のブロックが同じのままであっても変化するので、アドレスオペランドは内容の一部と見なさない。この問題は、アドレスオペランドをCFG中のエッジと見なすことによって対処する。
【0067】
レジスタオペランドは、扱いに注意を要することがある。いくつかのブロックを追加または削除すると、CFGの他のいくつかの近接領域にあるレジスタ割付けが、それらの領域に変更が加えられていなくても変化する場合がある。このようなオペランドは、各グラフのレジスタフロー分析を用いて、あり得るレジスタ名の変更を除外してモジュールをマッチングする。スタック変数のオフセットは普通、ローカル変数宣言の変化によって変化するので、これらは問題を呈する。この問題に対処するために、例示的なデルタジェネレータは、いくつかの即値オペランドが変化していてもブロックをマッチングする。上のそれぞれの場合では、オペランドタイプのシーケンスが同じのままであるときはコードブロックの内容は変化しないと見なす。
【0068】
CFG P中のノードνのi近傍(すなわち局所近傍)は、Pに対応する無向グラフ中でνから≦iの距離にあるブロックの集合である。したがって、例えば0近傍は集合{V}であり、1近傍はνおよびその親と子である。例示的なデルタジェネレータは、ブロックに対するマッチを見つけようとする間に、異なる値のdについてそのd近傍を計算する。ブロックνに対し、νからその子のうちの1つへのエッジを子エッジとし、νの親からνへのエッジを親エッジとする。
【0069】
例示的なデルタジェネレータは、ノードνから開始するCFGの幅優先走査を行いながら、νのi近傍を計算する。νからのiよりも遠くなるまで、ブロックの子エッジならびに親エッジを(逆方向に)走査する。別法として、例示的なデルタジェネレータは、すべての親エッジを無視し、子エッジだけを走査して近傍を計算することもできる。
【0070】
例えば、異なる3つのブロックb1、b2、b3から呼び出されるS中のプロシージャfにある最初のブロックνを考えてみる。これらすべてのブロックならびにプロシージャfはT中で変更されないが、ブロックb4からの呼出しが余分にfに追加されると仮定する。νのi近傍(i≧1の場合)はこの追加の呼出しによって変化し、したがって、νはこれによりマッチングされずに残ることがある。
【0071】
しかしこの例で、f自体は何の変更も受けておらず、したがってνの近傍を計算する間にνの親を無視する方が有利な場合があることを考える。時として近傍は、異なるプロシージャ中にあるブロックはどれも除外することができる。
【0072】
一般に、マッチングの候補のあいまいさを解決する点で、考慮する近傍サイズが大きいほどマッチングは正確である。しかしこれはマッチがより少なくなり、望ましくない。したがって、例示的なデルタジェネレータは、小さい近傍サイズ(通常3つまたは2つ以下)を、後で述べる「ランダムウォーク」を行うことによって得られるより長いランダム成分と共に用いる。この「ランダムウォーク」ヒューリスティックがよく機能することが、実験から観測された。
【0073】
「ランダムウォーク」の一例を次に示す。ある人が、いくつかのバス停A、B、...N(この順序で)のある、まっすぐな道でランダムウォークを行わなければならないと仮定する。この人は、A(道の一端)から出発する。この人は右にしか行けないので、右すなわちBに行かなければならない。次にBでは、2つの選択肢がある。左(A)に行くか右(C)に行くかである。統一されたランダムウォークモデルでは、公平なコインを投げて、表が出たら一方に行き、裏が出たら他方に行くと決める。到達したあらゆるバス停でこれを行い続けると、ランダムウォークを行ったことになる。
【0074】
同じ概念を、直線に代えて一般的なグラフに容易に拡張することができる。以下は、前述の「ランダムウォーク」の例示に基づいたヒューリスティックである。無向グラフをRとするが、この無向グラフは、CFGのノードを頂点とし、CFG中の対応する頂点の対がいずれかの方向の(有向)制御フローエッジを有する場合に限って頂点の対の上にエッジがある。明らかに、Rは最大次数3のグラフである。元のノードwから開始して、いずれかのノードxで、dxエッジのうちの1つを一様な確率でとる(dxはxの次数である)。プロシージャ境界(別のプロシージャの呼出しまたはそれへの分岐)に遭遇したときに中止するか、あるいはパスの長さが所定の限度を超えたときに中止する。
【0075】
他のどんなブロックとも内容がマッチしないブロックbを考えてみる。このようなブロックがいずれかのブロックνの近傍に含まれている場合、これはνのマッチングを妨げる場合がある。というのは、νを何らかのブロックとマッチングするには、その全近傍をマッチングしなければならないからである。このブロックbを、「不良」ノードまたはアウトライア(outlier)と呼ぶ。このようなアウトライアは、マッチングを行う前にフィルタリングして、これらの近隣すべての近傍から除去することができる。
【0076】
例示的なデルタジェネレータは、漸進的に緩和される基準に基づいて、CFGのいくつかのパスでマッチを検出する。例示的なデルタジェネレータは事前に、マッチするブロックの数の事前推定値に基づいてSとTのプロシージャをマッチングする。プロシージャの例には、バイナリプログラムのルーチンおよびサブルーチンがある。
【0077】
この事前マッチングは、大域レベルで行う(すなわち、ブロックが位置するプロシージャに関係なくブロックをマッチングする)。その後、マッチするプロシージャにブロックが属する場合に限り、これらのブロックをマッチングする。このようなマッチングはまた、局所マッチングと呼ぶこともできる。プロシージャマッチ情報を用いて呼出し命令のターゲットを検査して、異なる2つの呼出しが同じ関数(名前が変更されているか最初のブロックが異なる場合もある)をターゲットにしているかどうかを検出することもできる。
【0078】
マッチングパスの間、現在のマッチ基準を使用して、各ノードの短いハッシュ値を計算する。ブロックνのハッシュ値は次のようにして計算する。
【0079】
そのd近傍(何らかの適した値dに対する)中の各ブロックをその内容に基づいてハッシュして、各ブロック自体に対するラベルを作成する。
【0080】
これらのラベルすべてを連結し、得られるストリングを再度ハッシュして、νに対する単一のラベルを作成する。これを、このブロックの「dラベル」と呼ぶ。
【0081】
各グラフ中のノードをこれらのラベルによってソートし、同一のラベルおよびマッチするプロシージャを有するブロックをマッチングする。
【0082】
マッチングを向上させるために、他のいくつかのヒューリスティックも使用する。本明細書では、これらのヒューリスティックについては特に後述の「追加の実施形態の詳細」セクションで述べる。例えば2つのブロックc1およびc2が、何らかのiに対して前述の順序付けに従ってそれぞれブロックb1およびb2のi番目の子である場合、これらのブロックをb1およびb2の対応子と呼ぶ。マッチングをより精密するのに使用するヒューリスティックの一例は次のとおりである。すなわち、マッチするブロックが、内容ラベルにおいてマッチする(ただしおそらくdラベルにおいてはマッチしない)対応子を有する場合、これらの子をマッチングする。
【0083】
この段階の終わりには、例示的なデルタジェネレータは、SとTのブロックの部分的マッチングを計算し終えている。
【0084】
編集の計算
マッチングを完了した後、次の段階はΔの計算である。図3〜図5の小さな例でΔの計算を簡単に示した。図7に、Δを生み出す際に、上で計算したマッチングをどのようにグラフ(すなわちCFG)の場合に使用できるかを示す一例を示す。
【0085】
図7には、ソース510およびターゲット520のサブグラフが示されている。マッチング段階で、511と521(「A」)、512と522([B])、513と523([C])、516と526(「E」)のブロックの対がマッチしたと仮定する。ターゲットサブグラフ520中のマッチしなかったブロックは、ブロック525(Ft)およびブロック524(Dt)である。ブロック525(Ft)およびブロック524(Dt)の内容と、編集操作Add(512,525)およびAdd(512,524)とをΔが含んでいれば、ソースサブグラフ510からターゲットサブグラフ520を再構築することができる。
【0086】
編集操作Delete(512,514)およびDelete(512,515)は、Δに明示的に含める必要はない。これらは非明示的に含まれる。本発明の趣旨および範囲を逸脱することなく非明示的な編集を特にΔに含めることもできることは、当業者なら理解する。しかし、非明示的な編集はΔのサイズを不必要に増大させるので、本明細書に述べる例示的な実施形態のΔには含めない。
【0087】
したがって例示的なデルタジェネレータは、ターゲット中のマッチしなかったブロックの内容および追加する必要のあるエッジを(ある時点で)出力する。これがΔを構成する。
【0088】
例示的なデルタジェネレータの方法論的な実施形態
図8および9に、デルタジェネレータシステム100(またはその一部)によって行う、例示的なデルタジェネレータの方法論的な実施形態を示す。これらの方法論的な実施形態は、ソフトウェア、ハードウェア、またはこれらの組合せにおいて行うことができる。
【0089】
図8には主に、例示的なデルタジェネレータの方法論的な実施形態の「マッチング」段階を示す。図9には主に、例示的なデルタジェネレータの方法論的な実施形態の「編集」段階を示す。「編集」段階は、「マッチング」段階の後に続く。「編集」段階の結果がデルタである。
【0090】
図8では、620で、例示的なデルタジェネレータが、コードブロックに対しては操作コードのシーケンスを得て、データブロックに対しては生の再配置不可能データを得るのが示されている。このようなブロックは、ソースプログラムバイナリ(S)612からのプロシージャのブロックと、ターゲットプログラムバイナリ(T)614からのプロシージャのブロックである。
【0091】
624で、例示的なデルタジェネレータは、ブロックに対するマッチを見つけようとする間に、異なるdの値についてそのd近傍を計算する。さらに、幅優先走査によってd近傍を計算する。
【0092】
628で、各ノードについて短いハッシュ値を計算する。さらに、例示的なデルタジェネレータは、ノードのd近傍(すなわち局所近傍)でハッシュ値に基づいてノードに対するラベルを決定する。628ではまた、いくつかの即値オペランドが変更されている場合でも、例示的なデルタジェネレータはブロックをマッチングする。630で、各グラフ中のノードをこれらのラベルによってソートし、同一ラベルおよびマッチするプロシージャを有するブロックをマッチングする。この段階の終わりの632で、例示的なデルタジェネレータは、SとTのブロックの部分的なマッチングを計算し終えている。この逆の、マッチしないブロックもまた計算する。
【0093】
デルタジェネレータのこの方法論的な実施形態の「マッチング」段階に関するこれ以上の詳細は、後述の「追加の詳細」セクションに提供する。
【0094】
図9では、720で、例示的なデルタジェネレータがPt(すなわちターゲットプログラムバイナリからのプロシージャ)中のマッチしないブロックの内容710を受け取るのが示されているが、この内容710は、図8の方法論的な実施形態からの出力の一部である。すべてのエッジ情報はブロックの内容から除外する。したがって、内容が記録されているマッチしないブロックνがアドレスオペランド(コードブロックの場合)またはポインタ(データブロックの場合)を有する場合は、エッジ編集情報を用いてこのようなオペランドまたはポインタを訂正しなければならないことを示す「ダミー」アドレスでこれらのオペランドまたはポインタを置換する。
【0095】
PsおよびPtは、マッチング段階でマッチした(SおよびTそれぞれの中の)すべてのプロシージャの対を表す。ある対につき、Psはソースからのプロシージャであり、PtはTからのマッチするプロシージャである。例示的なデルタジェネレータは、ソースプログラムバイナリ(S)中のプロシージャPs712と、ターゲットプログラムバイナリ(T)中のプロシージャPt717との対を受け取る。
【0096】
730で、PsのリンクリストからPtのリンクリストを再構築するのに必要なすべての情報を、計算したΔの一部として記録する。プログラムのアドレス空間における各プロシージャのレイアウト(すなわちブロックの配置)をブロックのリンクリストによって取り込むが、これにより、このリストの先頭から末尾まで順次走査すると、プロシージャのレイアウトを正確に記述することができる。
PsからPtを再構築する際の最初のタスクは、PsのリンクリストからPtのリンクリストを再構築することになる。したがって、一方のリンクリストから他方のリンクリストを再構築するのに必要なすべての情報を、計算したΔの一部として記録する。
【0097】
732で、エッジ編集操作を計算する。前述のように、エッジ編集操作はエッジの明示的な追加である(非明示的な削除ではない)。各エッジは、そのソースおよびターゲットによって完全に指定することができる。編集のコンテキスト内で、用語「ソース」は、このエッジが表す正確なオペランド(コードブロックの場合)または再配置可能ワード(データブロックの場合)を指す。さらに、編集のコンテキスト内で、用語「ターゲット」は一方、このオペランドまたは再配置可能ワードの参照先であるアドレスのブロックを表す。例示的なデルタジェネレータは、ソースおよびターゲットに対する固有の識別子を別々のリストに記録することにより、編集したエッジ(追加または削除したエッジ)を記録する。
【0098】
734で、ソース中の所与のプロシージャ(Ps)に対するデルタを出力する。このようなデルタは、Pt中のマッチしないブロックと732で計算したエッジ編集操作を含む。
【0099】
例示的なデルタジェネレータの「編集」段階に関する前述の方法論的な実施形態は、レジスタ名、即値、および操作コードにおけるいくつかの小さい変更まで、ターゲットプログラムバイナリを再構築するのに十分な情報を記録する。変更されたこれらのレジスタ名、即値、および操作コードは、別々のリストに記録する。
【0100】
追加の実施形態の詳細
例示的な実施形態のマッチング段階ではCFGのいくつかのパスを生み出すが、以下に、各パスについてより詳細に述べる。
【0101】
マッチング段階における複数パス
マッチング段階における各パスは、SとTの中のブロックを比較するのに異なる基準を使用するが、これは各ブロックについてハッシュ値またはラベルを計算することによって行う。例示的な実施形態では、例示的な2つのサブプロセスを採用し、これらをいくつかのパスで呼び出す。本明細書では、これらをComputeLabelおよびComputeDLabelと呼ぶ。
【0102】
ComputeLabel:ブロックの内容のハッシュ値を計算する。これはブロックの内容ラベルとも呼ぶ。標準的なハッシュを使用してハッシュ値を計算する。このような標準的なハッシュの一例はMD5であり、これは、所与のバイトストリングのハッシュとして16バイトストリングを生成する。
【0103】
このComputeLabelと呼ぶ例示的なサブプロセスは、異なるマッチ基準を可能にするようにパラメータ化されており、ブールパラメータは、Immediate、RegisterChain、OpcodeString、およびProcIdである。Immediateは、コードブロック中の即値オペランドをハッシングで使用すべきかどうかを示す。同様に、RegisterChainは、レジスタ名変更を使用すべきかどうかを指定し、OpcodeStringは、操作コードがその正確な名前で表されるか、あるいはそのグループ識別子(「グループID」)で表されるかを示す。
【0104】
類似する操作コードにグループIDを使用すると、機能に影響しない、命令の小さな変更が捉えられる。例えば、命令「jge eax,10」が「jle eax,10」に変わったのが唯一の変更であるSの一部を考えてみる。これは例えば、不等式の向きが正しくないバグが発見された場合に起こり得る。このような場合、「jge」と「jle」の両方をこれらの操作コードグループ「branch」で表すことができ、この結果、対応するブロックをマッチングすることができる。
【0105】
第4のパラメータ、ProcIdは、プロシージャマッチングがすでに行われたかどうかを示し、すでに行われた場合は、プロシージャはマッチするプロシージャに合う固有の識別子を有する。このパラメータが設定されている場合、関数呼出しのターゲットは、それらのプロシージャ識別子で表される。サブプロセスComputeLabelに対する擬似コードの一例は、以下のとおりである。
【0106】
ComputeDLabel:内容ならびに近傍に基づいてハッシュ値を計算する。これは、すでに計算した全近傍(ルートノードを含む)を検査し、これらの内容ラベルを連結する。次いで、連結したこのリストのハッシュ値を返す。
【0107】
この実施形態は、標準的なハッシュを使用してハッシュ値を計算する。このような標準的なハッシュの一例はMD5であり、これは、所与のバイトストリングのハッシュとして16バイトストリングを生成する。
【0108】
例示的なデルタジェネレータのマッチング段階の方法論的実施形態に関する追加の詳細
図10に、例示的なデルタジェネレータのマッチング段階に関する広範な方法論的実施形態を示す。この広範な方法論的実施形態は、デルタジェネレータシステム100(またはその一部)によって実施することができる。この広範な方法論的実施形態は、ソフトウェア、ハードウェア、またはこれらの組合せにおいて実施することができる。
【0109】
以下に、この広範な方法論的実施形態の追加の詳細について述べる。
タスク1(図10の810):基本ブロックの事前マッチング
このタスク(図10の810)は、基本ブロックを大域レベルでマッチングする。
・例示的なデルタジェネレータは、SならびにT中の各ブロックごとにComputeLabelを呼び出し、それに内容ラベルを割り当てる。この段階では、ComputeLabelに対する4つのパラメータはそれぞれ偽である。 ・例示的なデルタジェネレータは、計算したラベルに基づいてSのブロックをTのブロックとマッチングする。S中の重複ブロック(すなわち同じハッシュ値を有するブロック)は、同じラベルを有するT中のブロックのいずれかとマッチングする。2つのブロックをマッチングするときは常に、後で参照するために各ブロックに固有のMatchIdを割り当てる。このタスクの後でマッチしないブロックは、アウトライアとして指定する。
・例示的なデルタジェネレータは、各ブロックについて、このブロックから開始する幅優先走査を行うことによってd近傍(d=2)を計算する。走査では、ブロックに子がない場合はその親に行く。
・例示的なデルタジェネレータは、上で計算した不良ノードをフィルタリングして、すべてのd近傍から除去する。
・例示的なデルタジェネレータは、各ブロックごとにComputeDLabelを呼び出し、それにdラベルを割り当てる。dラベルは呼出しから返される値である。
・例示的なデルタジェネレータは、同一のdラベルを有するSとTのブロックをマッチングする。
・いずれかの2つのマッチするブロックb1およびb2は、それから出て行くエッジ(out−edge)を同数有さなければならない。これらの出て行くエッジを、ブロック中のそれらの位置によって順序付ける。2つのブロックc1およびc2が、何らかのiに対して前述の順序付けに従ってそれぞれb1およびb2のi番目の子である場合、この2つのブロックをb1およびb2の対応子と呼ぶ。例示的なデルタジェネレータは、以下の規則を用いてマッチングをより精密にする。すなわち、マッチするブロックが、内容ラベルにおいてマッチする(ただしおそらくdラベルにおいてはマッチしない)対応子を有する場合、これらの子をマッチングする。
【0110】
タスク2(図10の812):プロシージャのマッチング
このタスク(図10の812)は、上で計算した事前マッチングを用いてプロシージャをマッチングする。
・例示的なデルタジェネレータは、Ts中の各プロシージャPtを反復し、S中の各プロシージャPsについて、Ps中のブロックにマッチするPt中のブロックの数mstを計算する。
・例示的なデルタジェネレータは、プロシージャの対をそれらのmstの値に基づいてマッチングする。mstの値は、プロシージャマッチ基準と呼ぶこともできる。mstの値を用いてプロシージャをマッチングするこの技法については、後で考察する。
・例示的なデルタジェネレータは、マッチするプロシージャに同じ固有の識別子を割り当てる。例示的なデルタジェネレータは、他のすべてのプロシージャにも固有の識別子を割り当てる。
【0111】
プロシージャをマッチングするための例示的なデルタジェネレータは、次の条件を満たす。すなわち、任意のPsと任意の2つPt1およびPt2があるとして、PsをPt1にマッチングする場合はmst1≧mst2であり、あるいはPt2をPsにマッチングするのでmst2≧mst2である。以下の技法がこの条件を満たす。
・(Pt,Ps,mst)トリプレット∀s,tを生み出し、これらをmstに関してソートする。
・ソートしたトリプレットリストを降順で反復する。いずれかの反復でPtとPsが両方ともマッチしない場合は、それらをマッチングする。
【0112】
タスク3(図10の814):基本ブロックの局所マッチング
このタスク(図10の814)は、前のタスクで得られたプロシージャマッチング情報を用いて、ブロックの局所マッチングを計算する(すなわち、マッチするプロシージャ間だけでブロックをマッチングする)。
【0113】
マッチするブロックがない状態から始める。例示的なデルタジェネレータは、SならびにT中の各ブロックごとにComputeLabelを呼び出し、それに内容ラベルを割り当てる。ComputeLabelを呼び出すとき、Immediate、OpcodeString、およびProcIdのパラメータは真である。
【0114】
例示的なデルタジェネレータは、計算した内容ラベルに基づいてSのブロックをTのブロックとマッチングする。S中の重複ブロック(すなわち同じハッシュ値を有するブロック)は、同じラベルを有するT中のブロックのいずれかとマッチングする。2つのブロックをマッチングするときは常に、後で参照するために各ブロックに固有のMatchIdを割り当てる。ブロックが前に割り当てたMatchIdをすでに有する場合は、それを再度割り当てる。このタスクの後でマッチしないブロックは、アウトライアとして指定する。
【0115】
d=3、2、1として、例示的なデルタジェネレータは以下のことを行う。 各ブロックについて、このブロックから開始する幅優先走査を行うことによってd近傍を計算する。d近傍はランダム成分も有する。ランダム成分は、元のノードから固定長の一様なランダムウォークを行う間に遭遇するブロックの集合である。ランダムウォークは、実際の制御フローエッジだけを見て、一様な確率でそれらを選択する。プロシージャ境界(例えば別のプロシージャの呼出しまたはそれへの分岐)に遭遇したときに停止する。
上で計算した不良ノードをフィルタリングして、すべてのd近傍から除去する。
各ブロックごとにComputeDLabelを呼び出し、それにdラベルを割り当てる。
同一のdラベルを有するSとTのブロックをマッチングする。T中の2つのブロックがS中の同じブロックにマッチする場合は、それらのうちの一方だけを実際にマッチングする。タイは任意に断つことができる。
以下のガイドラインに従ってマッチングを向上させる。すなわち、マッチするブロックが、内容ラベルにおいてマッチする(ただしおそらくdラベルにおいてはマッチしない)対応子を有する場合、これらの子をマッチングする。
【0116】
いずれの段階でも、前にマッチしたブロックが再度マッチすること、またはマッチしないことはない。
【0117】
例示的なデルタジェネレータは、マッチするブロックの対にそれぞれ固有のMatchIdを割り当てる。以後これを、この2つのブロックに対する内容ラベルとして使用する。
【0118】
タスク4(図10の816):レジスタ名変更の問題の解決
このタスク(図10の816)は、レジスタ名変更の問題を解決する(すなわち、レジスタ名変更の可能性があってもマッチするブロックを検出する)。例示的なデルタジェネレータは、SおよびT中のすべてのレジスタフロー連鎖を計算し、それぞれに識別子を割り当てる。マッチするブロックの場合は、対応するレジスタフローに同じ識別子を割り当てる。
【0119】
例示的なデルタジェネレータは、RegisterChainを真としてComputeLabelを呼び出し、各ブロックに内容ラベルを割り当てる。例示的なデルタジェネレータは、これらのラベルおよびd近傍(d=2)に基づいて、マッチしていないブロックをマッチングする。例示的なデルタジェネレータは、マッチがそれ以上見つからなくなるまでこのタスクを繰り返す。こうするのは、新しいマッチするブロックによってさらにいくつかのレジスタ連鎖に同じ識別子が割り当てられ、さらにマッチが見つかることがあるからである。
【0120】
これについては後で、「レジスタ名変更の問題の解決」という題のセクションでより詳細に論じる。
【0121】
タスク5(図10の818):最終パス
最後のマッチングタスク(図10の818)で、同一の内容ラベル(前のタスクで計算したもの)を有するブロックの対があればそれらをマッチングする。
【0122】
レジスタ名変更の問題の解決
例示的なデルタジェネレータは、各プロシージャについてそのuse−def連鎖、def−use連鎖、およびドミネータ情報を計算する。use−def連鎖は、レジスタuseから開始して、このuseに到達するそのレジスタのすべての定義(def)を通るリストである。同様に、def−use連鎖は、レジスタdefから開始して、このdefにより到達する同じレジスタの各useを通るリストである。ブロックdを、別のブロックbのドミネータと呼ぶ。bはdから到達可能であり、プロシージャの入口点からbへのどんなパスも最初にdを通過しなければならない。通常、ドミネータ情報の計算は、プロシージャ中のあらゆるブロックのすべてのドミネータを計算することを意味する。
【0123】
例示的なデルタジェネレータは、各プロシージャ中の各基本ブロックごとに、ブロック中のすべてのレジスタdefを見て、def idと呼ぶ各ブロック固有のIDをそれぞれに割り当てる。例示的なデルタジェネレータは、そのブロック中のすべてのレジスタuseを見て、いずれかのuseが同じブロック中で唯一のdefを有する場合に、そのuseにdef識別子を割り当てる。したがってこの段階では、すべてのdefおよびいくつかのuseにIDが関連付けられている。未定義のIDを有するレジスタuseがいくつかある場合もある。ComputeLabel(上で定義した)がRegisterChain=trueを伴って呼び出されたとき、IDが定義されていない場合はそれらの名前を使用する。
【0124】
例示的なデルタジェネレータは、SおよびT中のマッチしない各ブロックごとにComputeLabel(RegisterChain=trueを伴う)を呼び出し、返されるラベルをその内容ラベルに割り当てる。例示的なデルタジェネレータは、マッチしない各ブロックについてd近傍(d=2)を計算する。
例示的なデルタジェネレータは、ComputeDLabelを呼び出してそれにdラベルを割当て、新たに計算したdラベルに基づいてSとTをマッチングする。
【0125】
コードブロックの現在マッチングしているある対(bs、bt)に対して、例示的なデルタジェネレータは以下のことを行う。
【0126】
2つのブロック中の対応する(同じ場所にある)レジスタdefを反復する。
【0127】
プロシージャ全体で固有の固有識別子(正)を、現在検査中の2つのdefそれぞれに割り当てる。
【0128】
これらの識別子は、そのdefが有することのある、前に割り当てたどんなdef識別子にも置き換わる。2つのdefがマッチすることを記録し、これらの両方に単一の識別子を関連付ける。
【0129】
次に、例示的なデルタジェネレータは、新たに割り当てたdef識別子に基づいてレジスタuseをマッチングする。例示的なデルタジェネレータは、SとTの両方に対して各基本ブロック中のすべてのレジスタuseを反復する。このような各useについて、それに到達しそれに支配されないすべてのdefを検査する。例示的なデルタジェネレータは、それらのdef識別子を合計し、合計を現在のuseの識別子に割り当てる。したがって、各レジスタオペランド、defまたはuseに識別子が関連付けられる。マッチするブロックは、対応するレジスタオペランドに関連するマッチング識別子を有する。より具体的には、正確にマッチするdefを有する2つのレジスタオペランドは、レジスタ名が異なる場合があっても、マッチング識別子も有することができる。
【0130】
例示的なデルタジェネレータがRegisterChain=trueを伴ってComputeLabelを呼び出すこと(前述)を一番最近に実行した際に新しいマッチが発見された場合、プロセスはそこにループバックする。
【0131】
例示的なデルタジェネレータの編集段階の方法論的な実施形態に関する追加の詳細
例示的なデルタジェネレータは、binと呼ぶ新しいダミーCFGを生み出すが、このbinは、Tのすべての追加ブロックのためのコンテナとして働くことのできる単一プロシージャを有する。これらのブロックは、例えばリンクリストの形で維持する。
【0132】
例示的なデルタジェネレータは、T中の各ブロックを順次走査し、マッチしない各ブロックに連続した識別子(0で始まる)を割り当てる。例示的なデルタジェネレータはまた、マッチしないブロックをbinにダンプして、コードブロック中のアドレスオペランドおよびデータブロック中のポインタが、これらのポインタを含むブロックを参照する「ダミー」アドレスに確実に修正されるようにする。
【0133】
例示的なデルタジェネレータは、S中の各ブロックを順次走査し、マッチする各ブロックに連続した識別子を割り当てる。同じ識別子を、T中のマッチするブロックに割り当てる。このときおよび前のタスクで割り当てる識別子をNew_Node_Idと呼ぶ。
【0134】
例示的なデルタジェネレータは、ソースグラフ中のマッチするブロックを検査する。S中のブロックxがT中のブロックyとマッチする場合、それぞれから出るエッジをチェックする。各エッジx→z1につき、対応するy→z2がなければならない。
ケースi z2がz1とマッチする:何もしない。
ケースii z2がz3≠z2とマッチする:リンクx→z3を記録する。
ケースiii z2がマッチしない:リンクx→z2を記録する。
【0135】
エッジは次のように記録する。TargetId、OperandIndex、およびSourceProcFirstBlockという名前の3つのリストを生み出す。エッジx→yを記録する場合、yのNew_Node_IdをTargetIdに挿入する。このエッジが現プロシージャのi番目のエッジであった場合、iをリストOperandIndexにプッシュする。最後に、S中のいずれかのプロシージャPsのエッジが少なくとも1つ記録されている場合、その最初のブロックのNew_Node_IdをSourceProcFirstBlockにプッシュする。
【0136】
例示的なデルタジェネレータは、ターゲットグラフ中のマッチしないブロックすべてを検査する。例示的なデルタジェネレータは、それぞれから出るエッジx→yを見る。yもまたマッチしないブロックである場合は、xからyに行くエッジをbin中に生み出す。yがソースグラフのzとマッチする場合は、zのNew_Node_IdをTargetOperandTargetsと呼ぶリストにプッシュすることにより、リンクx→zを記録する。
【0137】
例示的なデルタジェネレータは、T中のマッチするプロシージャPtを有するS中の各プロシージャPsごとに、Ptのブロックのリンクリストを走査する。
走査のいずれかの時点で、ptr1およびptr2がT中の現ノードおよび次のノードを指す場合、mptr1およびmptr2をこれらの「マッチング」ポインタとする。ptriがT中のブロックxを指す場合、そのマッチングポインタmptriは、S中にマッチするブロックがあればそれを指すか、あるいはbin中にダンプしたxのコピーを指す。走査のいずれかの段階で、mptr1およびmptr2がリスト中で(この順序で)隣接しないノードを指す場合、エッジmptr1→mptr2を記録する。これは、これらに対応するブロックのNew_Node_IdをLinkedListsLeftおよびLinkedListsRightと呼ぶ別々のリストにプッシュすることによって行う。さらに、Ptの最初のブロックのNew_Node_Idを、後の部分のサイズ(ブロック数で表す)およびPt中の記録済みリンクの数と共に、ProcedureInfoと呼ぶ別個のリストに記録する。
【0138】
例示的なデルタジェネレータは、上で計算した編集情報をSと共に用いてTを再構築する。
【0139】
別法として、例示的なデルタジェネレータは、元バージョンのTと再構築バージョンのTとで異なるレジスタ名、即値、および操作コードを検出し、これらの差異をMinorDifferencesと呼ぶ別個のリストに出力することもできる。
【0140】
小さな差異
デルタジェネレータの例示的な一実施形態では、これらのリストすべてがbinと共に、計算されたΔを構成する。
【0141】
デルタ圧縮
以上のセクションは、SおよびΔがある場合に例示的なデルタジェネレータを使用してどのようにTのコピーを再構築するかを十分に述べている。図2に示すように、生成したΔはサーバ212からクライアント222に送信することができる。
【0142】
このΔは、ネットワーク215上で利用可能な帯域幅をより効率的に使用するために圧縮することができる。したがって例示的なデルタジェネレータは、パッチをよく圧縮できる方式でフォーマットすることができる。パッチはいくつかの部分に分割するが、それぞれの部分は異なる種類の情報を保持し、したがって各部分は別々に圧縮することができる。この手法は、異なるタイプのデータ(例えばコードに対して整数リスト)は異なる圧縮アルゴリズム(すなわちエンジン)で最もよく圧縮できるという観測結果に基づく。
【0143】
この手法は、先に「追加の実施形態の詳細」セクションで述べたステップと組み合わせることができる。例示的なデルタジェネレータにおいて、本明細書でいう「いくつかの部分」とは、前述の編集段階で言及した異なるいくつかのリスト、およびそこで言及したダミー「bin」である。一実施形態では、これらの各リスト(およびbin)を別々のファイルにストアし、したがって別々に圧縮する。使用できる圧縮アルゴリズムの一例は、LZWである。
【0144】
これは、大きな実行可能ファイル(約数百キロバイト)の場合によりよく機能すると思われ、我々の最初の実験では、このような大きな実行可能ファイルの場合に、例示的なデルタジェネレータは平均して、我々の知る利用可能な他のどんなパッチングツールよりも小さなパッチを作成することが示されている。
【0145】
例示的な実施形態に対する適用例
例示的なデルタジェネレータの実施形態に対して考えられる適用例には、帯域幅の制約のある媒体を介してソフトウェアのアップグレードまたはパッチを送信するためのツールとしての適用例がある。インターネット上でソフトウェアを入手できることが日々ますます一般的になりつつある中で、このようなパッチングツールはソフトウェアの使用にとって有益であろう。
【0146】
例示的なデルタジェネレータの実施形態に対して考えられる別の適用例は、ソフトウェアの海賊行為防止の分野にある。例示的なデルタジェネレータの一実施形態を用いれば、海賊行為防止ツールがプログラムの類似性を検出することができる。考えられる別の適用例は、ソフトウェアの異なるバージョン間の変更の性質を分析することにあろう。
【0147】
例示的なコンピューティング環境
図11に、例示的なデルタジェネレータを例えば実装できる、好適なコンピューティング環境920の一例を示す。
【0148】
例示的なコンピューティング環境920は、好適なコンピューティング環境の一例でしかなく、例示的なデルタジェネレータの使用または機能の範囲に関するいかなる制限も示すものではない。コンピューティング環境920は、例示的なコンピューティング環境920中に示すコンポーネントのいずれか1つまたは組合せに関して、いかなる依存または要件も有すると解釈すべきではない。
【0149】
例示的なデルタジェネレータは、他の多くの汎用または専用コンピューティングシステム環境または構成で動作可能である。例えば例示的なデルタジェネレータと共に使用するのに適した、周知のコンピューティングシステム、環境、および/または構成の例としては、パーソナルコンピュータ、サーバコンピュータ、シン(thin)クライアント、シック(thick)クライアント、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な消費者電子機器、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、前述のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが挙げられるが、これらに限定されない。
【0150】
例示的なデルタジェネレータは、例えば、コンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的なコンテキストで述べる。一般にプログラムモジュールは、特定のタスクを実行するか特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。例示的なデルタジェネレータはまた、通信ネットワークを介してリンクされたリモート処理装置によってタスクが実行される分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールは例えば、メモリ記憶装置を含めたローカルとリモートの両方の記憶媒体中にある。
【0151】
図11に示すように、コンピューティング環境920は、コンピュータ930の形をとる汎用コンピューティングデバイスを含む。コンピュータ930のコンポーネントには、1つまたは複数のプロセッサまたはプロセッシングユニット932と、システムメモリ934と、システムメモリ934を含めた種々のシステムコンポーネントをプロセッサ932に結合するバス936を含めることができるが、これらに限定しない。
【0152】
バス936は、メモリバスまたはメモリコントローラ、周辺バス、AGP(accelerated graphics port)、および種々のバスアーキテクチャのいずれかを使用するプロセッサバスまたはローカルバスを含めた、いくつかのタイプのバス構造のうちのいずれか1つまたは複数を表す。限定ではなく例として、このようなアーキテクチャには、ISA(Industry Standard Archtecture)バス、MCA(Micro Channel Archtecture)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Association)ローカルバス、およびメザニンバスとも呼ばれるPCI(Peripheral Component Interconnects)バスが含まれる。
【0153】
コンピュータ930は通常、種々のコンピュータ可読媒体を備える。このような媒体は、例えばコンピュータ930からアクセス可能な任意の利用可能媒体であり、揮発性媒体と不揮発性媒体、取外し可能媒体と取外し不可能媒体の両方がこれに含まれる。
【0154】
図11では、システムメモリは、ランダムアクセスメモリ(RAM)940などの揮発性メモリ、および/または、読出し専用メモリ(ROM)938などの不揮発性メモリの形をとるコンピュータ可読媒体を含む。ROM938には、起動中などにコンピュータ930内の要素間で情報を転送するのを補助する基本ルーチンを含むBIOS(basic input/output system)942がストアされる。RAM940は通常、プロセッサ932からすぐにアクセス可能な、かつ/またはプロセッサ932が現在作用している、データおよび/またはプログラムモジュールを含む。
【0155】
コンピュータ930はさらに、その他の取外し可能/取外し不可能、かつ揮発性/不揮発性のコンピュータ記憶媒体を備えることもできる。例として示すだけだが、図11には、取外し不可能かつ不揮発性の磁気媒体(図示していないが通常「ハードドライブ」と呼ばれる)に対して読み書きするためのハードディスクドライブ944と、取外し可能かつ不揮発性の磁気ディスク948(例えば「フロッピー(登録商標)ディスク」)に対して読み書きするための磁気ディスクドライブ946と、CD−ROM、DVD−ROM、またはその他の光学媒体など取外し可能かつ不揮発性の光ディスク952に対して読み書きするための光ディスクドライブ950とが示されている。ハードディスクドライブ944、磁気ディスクドライブ946、および光ディスクドライブ950はそれぞれ、1つまたは複数のインタフェース954によってバス936に接続される。
【0156】
ドライブおよびそれらに関連するコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピュータ930に対するその他のデータの、不揮発性記憶域を提供する。本明細書に述べる例示的な環境は、ハードディスク、取外し可能磁気ディスク948、および取外し可能光ディスク952を採用するが、磁気カセット、フラッシュメモリカード、ディジタルビデオディスク、ランダムアクセスメモリ(RAM)、読出し専用メモリ(ROM)など、コンピュータからアクセス可能なデータをストアすることのできる他のタイプのコンピュータ可読媒体をこの例示的な動作環境で使用することもできることを、当業者は理解されたい。
【0157】
ハードディスク、磁気ディスク948、光ディスク952、ROM938、またはRAM940には、いくつかのプログラムモジュールが例えばストアされるが、これらのプログラムモジュールには、限定ではなく例として、オペレーティングシステム958、1つまたは複数のアプリケーションプログラム960、その他のプログラムモジュール962、およびプログラムデータ964が含まれる。
【0158】
このようなオペレーティングシステム958、1つまたは複数のアプリケーションプログラム960、その他のプログラムモジュール962、およびプログラムデータ964(またはこれらの何らかの組合せ)はそれぞれ、例示的なデルタジェネレータの一実施形態を含むことができる。より具体的には、これらはそれぞれ、デルタジェネレータシステム、コンパレータ、編集操作決定機構、および出力サブシステムの一実施形態を含むことができる。
【0159】
ユーザは、キーボード966やポインティングデバイス(「マウス」など)968などの入力デバイスを介してコンピュータ930にコマンドおよび情報を入力することができる。その他の入力デバイス(図示せず)には、マイクロホン、ジョイスティック、ゲームパッド、衛星受信アンテナ、シリアルポート、スキャナなどを含めることができる。これらおよび他の入力デバイスは、バス936に結合されたユーザ入力インタフェース970を介してプロセッシングユニット932に接続されるが、例えばパラレルポート、ゲームポート、ユニバーサルシリアルバス(USB)など、他のインタフェースおよびバス構造でも接続される。
【0160】
モニタ972または他のタイプの表示装置もまた、ビデオアダプタ974などのインタフェースを介してバス936に接続される。モニタに加え、パーソナルコンピュータは通常、スピーカやプリンタなど他の周辺出力デバイス(図示せず)も備え、これらは出力周辺インタフェース975を介して接続される。
【0161】
コンピュータ930は、リモートコンピュータ982など1つまたは複数のリモートコンピュータへの論理接続を用いて、ネットワーク化された環境で動作することができる。リモートコンピュータ982は、コンピュータ930に関して本明細書に述べた要素および機構の多くまたはすべてを備えることができる。
【0162】
図11に示す論理接続は、ローカルエリアネットワーク(LAN)977および一般的なワイドエリアネットワーク(WAN)979である。このようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネット、およびインターネットによくあるものである。
【0163】
LANネットワーキング環境でコンピュータ930を使用するときは、ネットワークインタフェースまたはアダプタ986を介してコンピュータ930をLAN977に接続する。WANネットワーキング環境で使用するときは、コンピュータは通常、モデム978を備えるか、あるいはWAN979を介して通信を確立するための他の手段を備える。モデム978は、例えば内蔵または外付けであり、例えばユーザ入力インタフェース970または適した他の機構を介してシステムバス936に接続される。
【0164】
図11には、インターネットを介したWANの具体的な実施形態が示されている。コンピュータ930は通常、モデム978を備えるか、あるいはインターネット980を介して接続を確立するための他の手段を備える。モデム978は、例えば内蔵または外付けであり、インタフェース970を介してバス936に接続される。
【0165】
ネットワーク化された環境では、パーソナルコンピュータ930に関して示したプログラムモジュールまたはこれらの一部が、リモートメモリ記憶装置に例えばストアされる。図11には、限定ではなく例として、リモートコンピュータ982のメモリ装置上にあるリモートアプリケーションプログラム989が示されている。図示および記述したネットワーク接続は例示的なものであり、コンピュータ間に通信リンクを確立する他の手段も例えば使用されることを理解されたい。
【0166】
例示的な動作環境
図11には、例示的なデルタジェネレータを実装できる、適した動作環境920の一例が示されている。具体的には、図11中のいずれかのプログラムモジュール960〜962および/またはオペレーティングシステム958、あるいはこれらの一部により、本明細書に述べた例示的なデルタジェネレータが(全体的または部分的に)実装される。
【0167】
この動作環境は、適した動作環境の一例でしかなく、本明細書に述べる例示的なデルタジェネレータの機能の範囲または使用に関するいかなる制限も示すものではない。例示的なデルタジェネレータとともに使用するのに適した他の周知のコンピューティングシステム、環境、および/または構成には、パーソナルコンピュータ(PC)、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、プログラム可能な消費者電子機器、無線電話機および無線機器、汎用および専用アプライアンス、特定用途向けIC(ASIC)、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、以上のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが挙げられるが、これらに限定しない。
【0168】
コンピュータ実行可能命令
例示的なデルタジェネレータの一実施形態は、1つまたは複数のコンピュータまたはその他のデバイスによって実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的なコンテキストで述べることができる。一般にプログラムモジュールは、特定のタスクを実行するか特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。通常、プログラムモジュールの機能は、所望の種々の実施形態で組み合わせることも分散させることもできる。
【0169】
コンピュータ可読媒体
例示的なデルタジェネレータの一実施形態は、何らかの形のコンピュータ可読媒体上にストアすることもでき、それを介して伝送することもできる。コンピュータ可読媒体は、コンピュータからアクセス可能な任意の利用可能媒体とすることができる。限定ではなく例として、コンピュータ可読媒体には、「コンピュータ記憶媒体」および「通信媒体」を含めることができる。
【0170】
「コンピュータ記憶媒体」には、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータなどの情報をストアするために任意の方法または技術で実装される、揮発性および不揮発性、取外し可能および取外し不可能媒体が含まれる。コンピュータ記憶媒体には、RAM、ROM、EEPROM、フラッシュメモリ、またはその他のメモリ技術や、CD−ROM、DVD(digital versatile disk)、またはその他の光学記憶装置や、磁気カセット、磁気テープ、磁気ディスク記憶装置、またはその他の磁気記憶装置や、所望の情報をストアするのに使用できコンピュータからアクセスできるその他の任意の媒体が含まれるが、これらに限定しない。
【0171】
「通信媒体」は通常、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータを、搬送波やその他の搬送機構など変調されたデータ信号に具現化する。通信媒体にはまた、任意の情報送達媒体も含まれる。
【0172】
用語「変調されたデータ信号」は、情報が信号に符号化される形でその1つまたは複数の特徴が設定または変更された信号を意味する。限定ではなく例として、通信媒体には、有線のネットワークや直接有線接続などの有線媒体と、音波、RF、赤外線などの無線媒体と、その他の無線媒体が含まれる。これらの任意の組合せもまた、コンピュータ可読媒体の範囲に含まれる。
【0173】
結び
プログラムバイナリに対する最小デルタジェネレータについて、構造上の特徴および/または方法論的ステップに特定した言葉で述べたが、頭記の特許請求の範囲に定義するプログラムバイナリに対する最小デルタジェネレータは、上述した特定の特徴またはステップに必ずしも限定しない。むしろ、これらの特定の特徴およびステップは、特許請求する本発明の実施の好ましい形として開示するものである。
【図面の簡単な説明】
【図1】プログラムバイナリに対する最小デルタジェネレータの一実施形態を示す概略ブロック図である。
【図2】プログラムバイナリに対する最小デルタジェネレータの別の実施形態を示す概略ブロック図である。
【図3】プログラムバイナリに対する最小デルタジェネレータの一実施形態の単純化した適用例を示す図である。
【図4】プログラムバイナリに対する最小デルタジェネレータの一実施形態の単純化した適用例を示す図である。
【図5】プログラムバイナリに対する最小デルタジェネレータの一実施形態の単純化した適用例を示す図である。
【図6】プログラムバイナリに対する最小デルタジェネレータの実施形態の適用例を示す図である。
【図7】プログラムバイナリに対する最小デルタジェネレータの実施形態の適用例を示す図である。
【図8】プログラムバイナリに対する最小デルタジェネレータの方法論的な一実施形態を示す流れ図である。
【図9】プログラムバイナリに対する最小デルタジェネレータの別の方法論的な実施形態を示す流れ図である。
【図10】プログラムバイナリに対する最小デルタジェネレータの別の方法論的な実施形態を示す流れ図である。
【図11】プログラムバイナリに対する最小デルタジェネレータの一実施形態を実装できるコンピューティング動作環境の一例を示す図である。
【符号の説明】
100 Δジェネレータシステム
110 ソースCFG機構
112 ソースプログラム
120 ターゲットCFG機構
122 ターゲットプログラム
130 ブロックマッチャ
140 デルタ決定機構
142 デルタ
150 デルタパッチャ
160 再構築したターゲットプログラム
210 サーバ側
212 サーバ
215 インターネット
220 クライアント側
222 クライアント
920 コンピューティング環境
930 コンピュータ
932 プロセッサまたはプロセッシングユニット
934 システムメモリ
936 バス
938 ROM
940 RAM
942 BIOS
944 ハードディスクドライブ
946 磁気ディスクドライブ
948 磁気ディスク
950 光ディスクドライブ
952 光ディスク
954 データ媒体インタフェース
958 オペレーティングシステム
960 アプリケーションプログラム
964 プログラムデータ
966 キーボード
968 ポインティングデバイス
970 ユーザ入力インタフェース
972 モニタ
974 ビデオアダプタ
975 出力周辺インタフェース
977 LAN
978 モデム
979 WAN
980 インターネット
982 リモートコンピュータ
986 ネットワーク
989 リモートアプリケーション
Claims (6)
- 第1のプログラムバイナリと第2のプログラムバイナリとの間でデルタを生成するコンピュータが実施するデルタ生成方法であって、
コンピュータのプロセッサが、コンピュータ記憶媒体に記憶された第1のプログラムバイナリの第1の制御フローグラフ(CFG)表現を作成し、前記コンピュータ記憶媒体に記憶された第2のプログラムバイナリの第2のCFG表現を作成するステップであって、前記第1のCFG表現および前記第2のCFG表現は、それぞれ、前記第1のプログラムバイナリおよび前記第2のプログラムバイナリの各ブロックをノードで表し、各ノード間の制御フローをエッジで表した有向グラフであって、前記ブロックを表すノードには、当該ブロックの内容が同一であれば、第1のCFG表現及び第2のCFG表現に共通して同一のノード情報が付与され、当該ブロックの内容が同一でなければ、それぞれ異なるノード情報が付与された有向グラフを作成する前記ステップと、
前記コンピュータのプロセッサが、前記第1のCFG表現および前記第2のCFG表現の間でブロックを比較して、前記第1のCFG表現中および前記第2のCFG表現中でマッチするブロック(マッチするブロック)を識別し、それにより、前記第1のCFG表現中でマッチしない前記第2のCFG表現中のブロック(マッチしないブロック)を識別するステップであって、前記比較は、比較されるブロックを表すノードに対するノード情報と、比較されるブロックの周囲のブロックの拡張された局所近傍のブロックを表すノードに対するノード情報を前記第1のCFG表現および前記第2のCFG表現の間で比較することにより行われ、各ブロックの局所近傍は、CFG表現中の前記ブロックの近傍であるが前記CFG表現中の全てのブロックより少ないブロックからなり、前記ブロックの拡張された局所近傍は、前記ブロックの局所近傍と、前記ブロックの局所近傍より大きい近傍において該ブロックから固定長の一様なランダムウォークを行う間に遭遇するブロックの集合とからなり、CFG表現中の拡張された局所近傍は、前記CFG表現中の全てのブロックより少ないブロックからなる、識別するステップと、
前記コンピュータのプロセッサが、パッチを当てた前記第1のプログラムバイナリから作成される新たな第1のCFG表現が前記第2のCFG表現と同一になるように、パッチを当てた前記第1のプログラムバイナリが前記第2のプログラムバイナリと同一になるように、マッチしないブロックを前記第1のプログラムバイナリにパッチする編集操作を決定するステップと、
前記コンピュータのプロセッサが、前記マッチしないブロックと前記編集操作とを含むデルタを作成するステップと
を備えることを特徴とするデルタ生成方法。 - 前記プロセッサが、第1のプログラムバイナリを有するコンピュータに前記デルタを伝送するステップ
をさらに備えることを特徴とする請求項1に記載のデルタ生成方法。 - 前記プロセッサが、前記第1のプログラムバイナリのコピーが前記第2のプログラムバイナリと同一になるように前記コピーをパッチするステップであって、前記デルタはこのようなパッチングを導くステップ
をさらに備えることを特徴とする請求項1に記載のデルタ生成方法。 - 前記ブロックの局所近傍は、前記ブロックに隣接するブロックからなることを特徴とする請求項1に記載のデルタ生成方法。
- 請求項1に記載のデルタ生成方法をコンピュータに実行させるためのコンピュータ実行可能命令からなるプログラムを有することを特徴とするコンピュータ記憶媒体。
- 記憶媒体に記憶された第1のプログラムバイナリの第1の制御フローグラフ(CFG)表現と、前記記憶媒体に記憶された第2のプログラムバイナリの第2のCFG表現の間でブロックを比較して、前記第1のCFG表現中と前記第2のCFG表現中とでマッチするブロック(マッチするブロック)を識別し、それにより、前記第1のCFG表現中でマッチしない前記第2のCFG表現中のブロック(マッチしないブロック)を識別するように構成されたコンパレータであって、前記第1のCFG表現および前記第2のCFG表現は、それぞれ、前記第1のプログラムバイナリおよび前記第2のプログラムバイナリの各ブロックをノードで表し、各ノード間の制御フローをエッジで表した有向グラフであって、前記ブロックを表すノードには、当該ブロックの内容が同一であれば、第1のCFG表現及び第2のCFG表現に共通して同一のノード情報が付与され、当該ブロックの内容が同一でなければ、それぞれ異なるノード情報が付与された有向グラフであり、前記比較は、比較されるブロックを表すノードに対するノード情報と、比較されるブロックの周囲のブロックの拡張された局所近傍のブロックを表すノードに対するノード情報を前記第1のCFG表現および前記第2のCFG表現の間で比較することにより行われ、各ブロックの局所近傍は、CFG表現中の前記ブロックの近傍であるが前記CFG表現中の全てのブロックより少ないブロックからなり、前記ブロックの拡張された局所近傍は、前記ブロックの局所近傍と、前記ブロックの局所近傍より大きい近傍において該ブロックから固定長の一様なランダムウォークを行う間に遭遇するブロックの集合とからなり、CFG表現中の拡張された局所近傍は、前記CFG表現中の全てのブロックより少ないブロックからなる、コンパレータと、
パッチを当てた前記第1のプログラムバイナリから作成される新たな第1のCFG表現が前記第2のCFG表現と同一になるように、パッチを当てた前記第1のプログラムバイナリが前記第2のプログラムバイナリと同一になるように、マッチしないブロックを前記第1のプログラムバイナリにパッチする編集操作を決定するように構成された編集操作決定機構と、
前記マッチしないブロックと前記編集操作とを含むデルタを作成するように構成された出力サブシステムと
を備えたことを特徴とするデルタジェネレータシステム。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US09/713,633 | 2000-11-14 | ||
| US09/713,633 US7058941B1 (en) | 2000-11-14 | 2000-11-14 | Minimum delta generator for program binaries |
Related Child Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2007121230A Division JP4676456B2 (ja) | 2000-11-14 | 2007-05-01 | プログラムバイナリに対する最小デルタジェネレータ |
Publications (3)
| Publication Number | Publication Date |
|---|---|
| JP2002169702A JP2002169702A (ja) | 2002-06-14 |
| JP2002169702A5 JP2002169702A5 (ja) | 2005-08-04 |
| JP4615795B2 true JP4615795B2 (ja) | 2011-01-19 |
Family
ID=24866875
Family Applications (3)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2001349299A Expired - Fee Related JP4615795B2 (ja) | 2000-11-14 | 2001-11-14 | プログラムバイナリに対する最小デルタジェネレータ |
| JP2007121230A Expired - Fee Related JP4676456B2 (ja) | 2000-11-14 | 2007-05-01 | プログラムバイナリに対する最小デルタジェネレータ |
| JP2008043553A Expired - Fee Related JP4796596B2 (ja) | 2000-11-14 | 2008-02-25 | デルタを生成する方法 |
Family Applications After (2)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2007121230A Expired - Fee Related JP4676456B2 (ja) | 2000-11-14 | 2007-05-01 | プログラムバイナリに対する最小デルタジェネレータ |
| JP2008043553A Expired - Fee Related JP4796596B2 (ja) | 2000-11-14 | 2008-02-25 | デルタを生成する方法 |
Country Status (3)
| Country | Link |
|---|---|
| US (4) | US7058941B1 (ja) |
| EP (1) | EP1205842A3 (ja) |
| JP (3) | JP4615795B2 (ja) |
Families Citing this family (92)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7219332B2 (en) * | 2000-07-07 | 2007-05-15 | Microsoft Corporation | Configuring software components(merge) with transformation component using configurable and non-configurable data elements |
| US7058941B1 (en) * | 2000-11-14 | 2006-06-06 | Microsoft Corporation | Minimum delta generator for program binaries |
| US7072908B2 (en) * | 2001-03-26 | 2006-07-04 | Microsoft Corporation | Methods and systems for synchronizing visualizations with audio streams |
| US6925467B2 (en) * | 2002-05-13 | 2005-08-02 | Innopath Software, Inc. | Byte-level file differencing and updating algorithms |
| US7096311B2 (en) * | 2002-09-30 | 2006-08-22 | Innopath Software, Inc. | Updating electronic files using byte-level file differencing and updating algorithms |
| US6836657B2 (en) * | 2002-11-12 | 2004-12-28 | Innopath Software, Inc. | Upgrading of electronic files including automatic recovery from failures and errors occurring during the upgrade |
| US7984435B2 (en) * | 2002-11-13 | 2011-07-19 | Hewlett-Packard Development Company, L.P. | Update system employing reference software to reduce number of update packages |
| US7320010B2 (en) | 2002-11-18 | 2008-01-15 | Innopath Software, Inc. | Controlling updates of electronic files |
| US20040098421A1 (en) * | 2002-11-18 | 2004-05-20 | Luosheng Peng | Scheduling updates of electronic files |
| US7003534B2 (en) * | 2002-11-18 | 2006-02-21 | Innopath Software, Inc. | Generating difference files using module information of embedded software components |
| US7844734B2 (en) | 2002-11-18 | 2010-11-30 | Innopath Software, Inc. | Dynamic addressing (DA) using a centralized DA manager |
| US7007049B2 (en) * | 2002-11-18 | 2006-02-28 | Innopath Software, Inc. | Device memory management during electronic file updating |
| US7275244B1 (en) * | 2003-03-18 | 2007-09-25 | Microsoft Corporation | System and method for incrementally saving web files to a web server using file hash values |
| US7210124B2 (en) * | 2003-06-16 | 2007-04-24 | Microsoft Corporation | Reformulating resources with nodes reachable from defined entry points |
| US7308684B2 (en) * | 2003-06-16 | 2007-12-11 | Microsoft Corporation | Classifying software and reformulating resources according to classifications |
| US7676506B2 (en) * | 2003-06-20 | 2010-03-09 | Innopath Software, Inc. | Differential file compression of software image versions |
| US20040268302A1 (en) * | 2003-06-26 | 2004-12-30 | Microsoft Corporation | Framework for determining and exposing binary dependencies |
| US7496904B2 (en) * | 2003-06-26 | 2009-02-24 | Microsoft Corporation | Mining dependencies for testing and risk management |
| US7031972B2 (en) | 2003-07-21 | 2006-04-18 | Innopath Software, Inc. | Algorithms for block-level code alignment of software binary files |
| US7079946B2 (en) * | 2003-08-29 | 2006-07-18 | Denso Corporation | Iterative logical renewal of navigable map database |
| JP2007511816A (ja) * | 2003-10-23 | 2007-05-10 | イノパス・ソフトウェアー・インコーポレーテッド | 集中daマネージャを用いた動的アドレシング(da) |
| US7290174B1 (en) * | 2003-12-03 | 2007-10-30 | Altera Corporation | Methods and apparatus for generating test instruction sequences |
| US7555531B2 (en) * | 2004-04-15 | 2009-06-30 | Microsoft Corporation | Efficient algorithm and protocol for remote differential compression |
| US20060047855A1 (en) * | 2004-05-13 | 2006-03-02 | Microsoft Corporation | Efficient chunking algorithm |
| 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 |
| US8526940B1 (en) | 2004-08-17 | 2013-09-03 | Palm, Inc. | Centralized rules repository for smart phone customer care |
| US7516451B2 (en) | 2004-08-31 | 2009-04-07 | Innopath Software, Inc. | Maintaining mobile device electronic files including using difference files when upgrading |
| US7613787B2 (en) * | 2004-09-24 | 2009-11-03 | Microsoft Corporation | Efficient algorithm for finding candidate objects for remote differential compression |
| WO2006052242A1 (en) * | 2004-11-08 | 2006-05-18 | Seirad, Inc. | Methods and systems for compressing and comparing genomic data |
| US8073926B2 (en) * | 2005-01-07 | 2011-12-06 | Microsoft Corporation | Virtual machine image server |
| US20070094348A1 (en) * | 2005-01-07 | 2007-04-26 | Microsoft Corporation | BITS/RDC integration and BITS enhancements |
| US7849462B2 (en) * | 2005-01-07 | 2010-12-07 | Microsoft Corporation | Image server |
| US8719786B2 (en) * | 2005-03-30 | 2014-05-06 | Alcatel Lucent | Method for performing conditionalized N-way merging of source code |
| US8775974B2 (en) | 2005-12-21 | 2014-07-08 | International Business Machines Corporation | Multi-contextual delta navigation in a compare view |
| US9292822B2 (en) | 2006-01-03 | 2016-03-22 | Motio, Inc. | Supplemental system for business intelligence systems |
| KR100772399B1 (ko) * | 2006-02-28 | 2007-11-01 | 삼성전자주식회사 | 패치 파일 생성 방법 및 그 방법을 수행하는 프로그램을기록한 컴퓨터 판독 가능한 기록매체 |
| US20070239993A1 (en) * | 2006-03-17 | 2007-10-11 | The Trustees Of The University Of Pennsylvania | System and method for comparing similarity of computer programs |
| US7509298B2 (en) * | 2006-03-31 | 2009-03-24 | International Business Machines Corporation | System and method for a logical-model based application understanding and transformation |
| WO2007133559A2 (en) * | 2006-05-10 | 2007-11-22 | Innopath Software | Processing of compact functional differences |
| EP1855194B1 (en) * | 2006-05-11 | 2018-07-04 | ABB Schweiz AG | Synchronization of a graphical program and a robot program |
| US8209676B2 (en) | 2006-06-08 | 2012-06-26 | Hewlett-Packard Development Company, L.P. | Device management in a network |
| KR101417759B1 (ko) * | 2006-06-19 | 2014-07-14 | 삼성전자주식회사 | 시스템 정보 갱신 장치 및 방법 |
| US7861224B2 (en) | 2006-06-22 | 2010-12-28 | Microsoft Corporation | Delta compression using multiple pointers |
| KR101426710B1 (ko) * | 2006-07-14 | 2014-09-23 | 삼성전자주식회사 | 휴대단말기의 버전정보 갱신 장치 및 방법 |
| US8752044B2 (en) | 2006-07-27 | 2014-06-10 | Qualcomm Incorporated | User experience and dependency management in a mobile device |
| US7984375B1 (en) * | 2006-10-10 | 2011-07-19 | Adobe Systems Incorporated | Automated detection and implementation of state and object modifications |
| US8122443B2 (en) * | 2006-12-14 | 2012-02-21 | International Business Machines Corporation | Dynamic multi-context delta view for merging structured data in a visual merge tool |
| US8418149B2 (en) * | 2006-12-28 | 2013-04-09 | International Business Machines Corporation | Differential comparison system and method |
| KR101254247B1 (ko) * | 2007-01-18 | 2013-04-12 | 중앙대학교 산학협력단 | 메모리 액세스 로그 분석을 통한 프로그램 표절 검출 장치및 방법 |
| US20080180445A1 (en) * | 2007-01-29 | 2008-07-31 | Mark Peskin | Output Management Systems And Methods |
| US8837721B2 (en) * | 2007-03-22 | 2014-09-16 | Microsoft Corporation | Optical DNA based on non-deterministic errors |
| US8788848B2 (en) * | 2007-03-22 | 2014-07-22 | Microsoft Corporation | Optical DNA |
| US8095914B1 (en) * | 2007-04-03 | 2012-01-10 | Altera Corporation | Methods for instruction trace decomposition |
| US8087006B2 (en) * | 2007-05-31 | 2011-12-27 | Microsoft Corporation | Static performance analysis of software |
| US8166466B2 (en) * | 2007-06-22 | 2012-04-24 | Microsoft Corporation | Function matching in binaries |
| US8166469B2 (en) * | 2007-08-20 | 2012-04-24 | Red Hat, Inc. | Method and an apparatus to conduct software release |
| US20100115502A1 (en) * | 2008-11-06 | 2010-05-06 | Jiva Azeem S | Post Processing of Dynamically Generated Code |
| JP4839424B2 (ja) * | 2008-12-15 | 2011-12-21 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムの解析を支援するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム |
| US8359340B2 (en) | 2008-12-23 | 2013-01-22 | At&T Intellectual Property I, L.P. | System and method for representing media assets |
| US20100214894A1 (en) * | 2009-02-20 | 2010-08-26 | Microsoft Corporation | Optical Medium with Added Descriptor to Reduce Counterfeiting |
| US9135948B2 (en) * | 2009-07-03 | 2015-09-15 | Microsoft Technology Licensing, Llc | Optical medium with added descriptor to reduce counterfeiting |
| US9292266B2 (en) * | 2010-04-30 | 2016-03-22 | Qualcomm Incorporate | Preprocessor for file updating |
| US9195810B2 (en) | 2010-12-28 | 2015-11-24 | Microsoft Technology Licensing, Llc | Identifying factorable code |
| CN102023870B (zh) * | 2010-12-31 | 2013-07-24 | 深圳市普联技术有限公司 | 一种软件修改的检测方法、装置及电子设备 |
| JP2012257041A (ja) * | 2011-06-08 | 2012-12-27 | Sony Corp | 通信装置、通信システム、通信方法及びプログラム |
| US8726255B2 (en) | 2012-05-01 | 2014-05-13 | Concurix Corporation | Recompiling with generic to specific replacement |
| US20120324454A1 (en) * | 2012-05-04 | 2012-12-20 | Concurix Corporation | Control Flow Graph Driven Operating System |
| US8970613B2 (en) * | 2012-06-06 | 2015-03-03 | Apple Inc. | Render tree caching |
| US8793669B2 (en) | 2012-07-17 | 2014-07-29 | Concurix Corporation | Pattern extraction from executable code in message passing environments |
| US9575813B2 (en) | 2012-07-17 | 2017-02-21 | Microsoft Technology Licensing, Llc | Pattern matching process scheduler with upstream optimization |
| KR20140077435A (ko) * | 2012-12-14 | 2014-06-24 | 삼성전자주식회사 | 모바일 단말의 소프트웨어 업데이트 서비스 방법 및 장치 |
| US8984495B2 (en) * | 2013-01-03 | 2015-03-17 | International Business Machines Corporation | Enhanced string analysis that improves accuracy of static analysis |
| US8910134B2 (en) * | 2013-01-03 | 2014-12-09 | Oracle International Corporation | System for applying transformation to improve graph analysis |
| US9659050B2 (en) * | 2013-08-06 | 2017-05-23 | Sybase, Inc. | Delta store giving row-level versioning semantics to a non-row-level versioning underlying store |
| EP2924522B1 (de) * | 2014-03-28 | 2016-05-25 | dSPACE digital signal processing and control engineering GmbH | Verfahren zur Beeinflussung eines Steuerprogramms |
| US8997256B1 (en) | 2014-03-31 | 2015-03-31 | Terbium Labs LLC | Systems and methods for detecting copied computer code using fingerprints |
| US9459861B1 (en) | 2014-03-31 | 2016-10-04 | Terbium Labs, Inc. | Systems and methods for detecting copied computer code using fingerprints |
| US9378001B2 (en) * | 2014-05-02 | 2016-06-28 | Microsoft Technology Licensing, Llc | Matching program sections through feature extraction |
| US10152406B2 (en) * | 2015-08-25 | 2018-12-11 | Fujistu Limited | Software program repair |
| US9971570B2 (en) | 2015-12-15 | 2018-05-15 | Oracle International Corporation | Automated generation of memory consumption aware code |
| US20170277517A1 (en) * | 2016-03-22 | 2017-09-28 | M2Communication Inc. | Method Of Updating Program Code And Electronic Device Using The Same |
| EP3299956A1 (de) * | 2016-09-26 | 2018-03-28 | Siemens Aktiengesellschaft | Verfahren und anordnung zur aktualisierung eines computerprogramms |
| US10318250B1 (en) * | 2017-03-17 | 2019-06-11 | Symantec Corporation | Systems and methods for locating functions for later interception |
| US10732963B2 (en) * | 2017-04-05 | 2020-08-04 | Dell Products, Lp | System and method for automatically managing updated UEFI variables |
| US10387139B2 (en) | 2017-07-25 | 2019-08-20 | Aurora Labs Ltd. | Opportunistic software updates during select operational modes |
| US11144893B2 (en) * | 2017-10-30 | 2021-10-12 | Nec Corporation | Method and system for securing smart contracts in blockchains |
| US10509642B2 (en) * | 2018-03-30 | 2019-12-17 | International Business Machines Corporation | Intelligent discovery and application of API changes for application migration |
| US11307962B2 (en) * | 2018-07-09 | 2022-04-19 | United States Of America As Represented By The Secretary Of The Navy | Method for semantic preserving transform mutation discovery and vetting |
| US10896038B2 (en) | 2019-03-25 | 2021-01-19 | Aurora Labs Ltd. | Generating and signing a line-of-code behavior and relation model |
| EP3742240A1 (de) * | 2019-05-22 | 2020-11-25 | Siemens Aktiengesellschaft | Verfahren und engineering-system zur änderung eines programms einer industriellen automatisierungskomponente |
| US20240427592A1 (en) * | 2023-06-21 | 2024-12-26 | Red Hat, Inc. | Dual software version capability through qubit storage |
| US20250021348A1 (en) * | 2023-07-13 | 2025-01-16 | Cisco Technology, Inc. | Hash value filtering for control flow integrity |
Family Cites Families (21)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS63208941A (ja) | 1987-02-25 | 1988-08-30 | Fujitsu Ltd | プログラムパス更新履歴管理方式 |
| EP0528617B1 (en) * | 1991-08-19 | 1999-12-22 | Sun Microsystems, Inc. | Method and apparatus for change control in multiple development environments. |
| US5379422A (en) * | 1992-01-16 | 1995-01-03 | Digital Equipment Corporation | Simple random sampling on pseudo-ranked hierarchical data structures in a data processing system |
| US5579223A (en) * | 1992-12-24 | 1996-11-26 | Microsoft Corporation | Method and system for incorporating modifications made to a computer program into a translated version of the computer program |
| US5710916A (en) * | 1994-05-24 | 1998-01-20 | Panasonic Technologies, Inc. | Method and apparatus for similarity matching of handwritten data objects |
| JPH0916389A (ja) | 1995-07-03 | 1997-01-17 | Nippon Telegr & Teleph Corp <Ntt> | プログラム部品自動生成方法及び装置 |
| US5774730A (en) * | 1995-07-31 | 1998-06-30 | International Business Machines Corporation | Method and apparatus for improving colorability of constrained nodes in an interference graph within a computer system |
| US5974254A (en) * | 1997-06-06 | 1999-10-26 | National Instruments Corporation | Method for detecting differences between graphical programs |
| US6526574B1 (en) * | 1997-07-15 | 2003-02-25 | Pocket Soft, Inc. | System for finding differences between two computer files and updating the computer files |
| US6314562B1 (en) * | 1997-09-12 | 2001-11-06 | Microsoft Corporation | Method and system for anticipatory optimization of computer programs |
| US6205444B1 (en) * | 1997-10-17 | 2001-03-20 | International Business Machines Corporation | Multiple sequence alignment system and method |
| US6018747A (en) * | 1997-11-26 | 2000-01-25 | International Business Machines Corporation | Method for generating and reconstructing in-place delta files |
| US6189116B1 (en) * | 1998-07-14 | 2001-02-13 | Autodesk, Inc. | Complete, randomly ordered traversal of cyclic directed graphs |
| IL125846A0 (en) | 1998-08-19 | 1999-04-11 | Emony | Incremental program update |
| US6594822B1 (en) * | 1999-02-19 | 2003-07-15 | Nortel Networks Limited | Method and apparatus for creating a software patch by comparing object files |
| US7058941B1 (en) | 2000-11-14 | 2006-06-06 | Microsoft Corporation | Minimum delta generator for program binaries |
| US6559068B2 (en) * | 2001-06-28 | 2003-05-06 | Koninklijke Philips Electronics N.V. | Method for improving inversion layer mobility in a silicon carbide metal-oxide semiconductor field-effect transistor |
| US6904588B2 (en) * | 2001-07-26 | 2005-06-07 | Tat Consultancy Services Limited | Pattern-based comparison and merging of model versions |
| US6860422B2 (en) * | 2002-09-03 | 2005-03-01 | Ricoh Company, Ltd. | Method and apparatus for tracking documents in a workflow |
| WO2004097627A2 (en) * | 2003-05-01 | 2004-11-11 | Maz Laboratory | A method of representing data flow between programming objects in a hierarchical display |
| JP2006243838A (ja) * | 2005-02-28 | 2006-09-14 | Toshiba Corp | プログラム開発装置 |
-
2000
- 2000-11-14 US US09/713,633 patent/US7058941B1/en not_active Expired - Fee Related
-
2001
- 2001-11-13 EP EP01126979A patent/EP1205842A3/en not_active Withdrawn
- 2001-11-14 JP JP2001349299A patent/JP4615795B2/ja not_active Expired - Fee Related
-
2004
- 2004-06-07 US US10/862,554 patent/US7263531B2/en not_active Expired - Fee Related
-
2006
- 2006-03-15 US US11/276,815 patent/US7685590B2/en not_active Expired - Fee Related
- 2006-03-15 US US11/276,814 patent/US7681190B2/en not_active Expired - Fee Related
-
2007
- 2007-05-01 JP JP2007121230A patent/JP4676456B2/ja not_active Expired - Fee Related
-
2008
- 2008-02-25 JP JP2008043553A patent/JP4796596B2/ja not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| US7263531B2 (en) | 2007-08-28 |
| US7685590B2 (en) | 2010-03-23 |
| US7058941B1 (en) | 2006-06-06 |
| US7681190B2 (en) | 2010-03-16 |
| US20040225996A1 (en) | 2004-11-11 |
| US20060145895A1 (en) | 2006-07-06 |
| EP1205842A2 (en) | 2002-05-15 |
| JP4676456B2 (ja) | 2011-04-27 |
| JP2002169702A (ja) | 2002-06-14 |
| JP4796596B2 (ja) | 2011-10-19 |
| EP1205842A3 (en) | 2004-08-04 |
| JP2008165825A (ja) | 2008-07-17 |
| JP2007234043A (ja) | 2007-09-13 |
| US20060145896A1 (en) | 2006-07-06 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP4615795B2 (ja) | プログラムバイナリに対する最小デルタジェネレータ | |
| US10203968B1 (en) | Recovering source code structure from program binaries | |
| US8307351B2 (en) | System and method for performing code provenance review in a software due diligence system | |
| US5313616A (en) | Method for analyzing calls of application program by inserting monitoring routines into the executable version and redirecting calls to the monitoring routines | |
| JP5208350B2 (ja) | 自己記述型ソフトウェアイメージ更新コンポーネント | |
| US6662354B1 (en) | Determining destinations of a dynamic branch | |
| KR100311585B1 (ko) | 템플릿오브젝트파일들을최적화하기위한시스템과방법 | |
| US8225276B1 (en) | Shared code management | |
| Selim et al. | Enhancing source-based clone detection using intermediate representation | |
| US7765520B2 (en) | System and method for managing cross project dependencies at development time | |
| US6993744B2 (en) | Method for enabling a compiler or interpreter to use identifiers found at run time in a map container object in a manner similar or identical to identifiers declared at compile time | |
| EP2771788B1 (en) | Methods and apparatuses for computing checksums for effective caching in continuous distributed builds | |
| EP1376342A2 (en) | Single pass intermediate language verification algorithm | |
| US20060048119A1 (en) | Method and system for auto parallelization of zero-trip loops through induction variable substitution | |
| CN112099880A (zh) | 场景驱动的应用程序约减方法和系统 | |
| US20060123016A1 (en) | Metadata driven method and apparatus to configure heterogenous distributed systems | |
| CN1454338A (zh) | 确认动态可连接可执行镜像的可靠性的系统和方法 | |
| Palmer et al. | Higher-order demand-driven program analysis | |
| Liu et al. | Functional Pearl: Short and Mechanized Logical Relation for Dependent Type Theories | |
| Atterer | Automatic test data generation from VDM-SL specifications | |
| Rain | Avoiding trickle‐down recompilation in the Mary2 implementation | |
| Donnelly et al. | Combining higher-order abstract syntax with first-order abstract syntax in ATS | |
| Coetzee et al. | A model and framework for reliable build systems | |
| CN118535217A (zh) | 一种补丁文件的生成方法、系统及存储介质 | |
| CN121187708A (zh) | 一种基于混合二进制翻译的操作系统容器化内核兼容方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041115 |
|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041115 |
|
| RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20041115 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050105 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20061031 |
|
| A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20070131 |
|
| A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20070207 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070501 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20070525 |
|
| RD13 | Notification of appointment of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7433 Effective date: 20070824 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20070824 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070925 |
|
| A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20070928 |
|
| A912 | Re-examination (zenchi) completed and case transferred to appeal board |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20071026 |
|
| RD13 | Notification of appointment of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7433 Effective date: 20100519 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20100519 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100922 |
|
| 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: 20101021 |
|
| R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131029 Year of fee payment: 3 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| LAPS | Cancellation because of no payment of annual fees | ||
| 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 |
