JP2006236327A - コードモーフィング - Google Patents

コードモーフィング Download PDF

Info

Publication number
JP2006236327A
JP2006236327A JP2006015454A JP2006015454A JP2006236327A JP 2006236327 A JP2006236327 A JP 2006236327A JP 2006015454 A JP2006015454 A JP 2006015454A JP 2006015454 A JP2006015454 A JP 2006015454A JP 2006236327 A JP2006236327 A JP 2006236327A
Authority
JP
Japan
Prior art keywords
code
morphing
morphed
local
instructions
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2006015454A
Other languages
English (en)
Inventor
Scott Wadsworth Brandon
スコット ウォズワース ブランドン
Stephen C Schertz
クレイグ シェルツ ステファン
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 JP2006236327A publication Critical patent/JP2006236327A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • BPERFORMING OPERATIONS; TRANSPORTING
    • B24GRINDING; POLISHING
    • B24CABRASIVE OR RELATED BLASTING WITH PARTICULATE MATERIAL
    • B24C9/00Appurtenances of abrasive blasting machines or devices, e.g. working chambers, arrangements for handling used abrasive material
    • B24C9/003Removing abrasive powder out of the blasting machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B24GRINDING; POLISHING
    • B24CABRASIVE OR RELATED BLASTING WITH PARTICULATE MATERIAL
    • B24C7/00Equipment for feeding abrasive material; Controlling the flowability, constitution, or other physical characteristics of abrasive blasts
    • B24C7/0046Equipment for feeding abrasive material; Controlling the flowability, constitution, or other physical characteristics of abrasive blasts the abrasive material being fed in a gaseous carrier
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B24GRINDING; POLISHING
    • B24CABRASIVE OR RELATED BLASTING WITH PARTICULATE MATERIAL
    • B24C9/00Appurtenances of abrasive blasting machines or devices, e.g. working chambers, arrangements for handling used abrasive material
    • B24C9/006Treatment of used abrasive material
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mechanical Engineering (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)
  • Investigating Strength Of Materials By Application Of Mechanical Stress (AREA)
  • Special Wing (AREA)
  • Medicines Containing Antibodies Or Antigens For Use As Internal Diagnostic Agents (AREA)
  • Devices For Executing Special Programs (AREA)
  • Measuring Or Testing Involving Enzymes Or Micro-Organisms (AREA)
  • Storage Device Security (AREA)

Abstract

【課題】コンテキストを維持したコードモーフィングを提供すること。
【解決手段】コードモーフィングは、既知のコードの意図されたコンテキストに影響を及ぼさずに、このコードの少なくとも1つの基礎的な制御構造を書き換えることを含む。
【選択図】図2

Description

本発明は、コードモーフィングに関し、より詳細には、プロセッサに対するコードを変換するコードモーフィングに関する。
従来、コードモーフィングは、アプリケーションソフトウェアの少なくとも1つの基礎的な制御構造を書き換えて、アプリケーションソフトウェアのコードの元のセマンティックなコンテキストまたは意味を維持するコードを生成することが知られている。例えば、使用可能な命令の集合が異なるプロセッサに対して、コードモーフィングにより、アプリケーションソフトウェアを動作させている。
しかしながら、コンテキストを維持したコードモーフィングを提供する方法がないという問題があった。
本発明は、このような問題に鑑みてなされたもので、その目的とするところは、コンテキストを維持したコードモーフィングを提供することにある。
本発明は、このような目的を達成するために、請求項1に記載の発明は、方法において、コードをサンプリングするステップと、コードを穏やかな方法でモーフィングするステップと、モーフィングされたコードを処理するステップと、コードに関する既知の処理結果を、モーフィングされたコードに関する処理結果と比較するステップとを備えたことを特徴とする。
請求項2に記載の発明は、請求項1に記載のコードが、アプリケーションと、プログラムと、メソッドと、関数と、実行可能コードの集合とのうちの1つの一部を少なくとも含むことを特徴とする。
請求項3に記載の発明は、請求項1に記載のサンプリングするステップが、コードに属する構文の特質および構成の特性のうち少なくとも1つを解読するステップを含むことを特徴とする。
請求項4に記載の発明は、請求項1に記載のモーフィングするステップが、コードのコンテキストを維持しながらコードの少なくとも1つの基礎的な構成を書き換えるステップを含むことを特徴とする。
請求項5に記載の発明は、請求項1に記載のコードをモーフィングするステップが、パラメータを追加するステップと、プリミティブ型の幅を拡張するステップと、パラメータの順序を変更するステップと、ローカル変数の順序を変更するステップと、ローカル変数を追加するステップと、外部変数を余分に使用するステップと、余分なループを追加するステップと、制御フロー中でステッチングするステップと、定数を展開するステップと、メソッドを定数と置き換えるステップと、偽のスタック深度を導入するステップと、定数を畳み込むステップと、ループをロールアップするステップと、共通の部分式を導入するステップと、型ローカルを介して変換するステップと、ローカルを別の記憶空間に変換するステップとのうちの少なくとも1つを含むことを特徴とする。
請求項6に記載の発明は、請求項1に記載のモーフィングするステップが、マネージ実行環境において実行されることを特徴とする。
請求項7に記載の発明は、請求項1に記載の処理するステップが、コードをコンパイルするステップを含むことを特徴とする。
請求項8に記載の発明は、コンピュータ読取可能な媒体において、読み込まれると、1つまたは複数のプロセッサに、既知のコードをモーフィングしてモーフィングされたコードを作成するステップと、モーフィングが穏やかかどうかテストするステップとを行わせる1つまたは複数の実行可能命令を有することを特徴とする。
請求項9に記載の発明は、請求項8に記載の既知のコードをモーフィングするステップを行わせる1つまたは複数の命令が、既知のコードの少なくとも一部を構文的と構造的との少なくとも一方で書き換えるステップを1つまたは複数のプロセッサに行わせることを特徴とする。
請求項10に記載の発明は、請求項8に記載の既知のコードをモーフィングするステップを行わせる1つまたは複数の命令が、既知のコードに対して、パラメータを追加するステップと、プリミティブ型の幅を拡張するステップと、パラメータの順序を変更するステップと、ローカル変数の順序を変更するステップと、ローカル変数を追加するステップと、外部変数を余分に使用するステップと、余分なループを追加するステップと、制御フロー中でステッチングするステップと、定数を展開するステップと、メソッドを定数と置き換えるステップと、偽のスタック深度を導入するステップと、定数を畳み込むステップと、ループをロールアップするステップと、共通の部分式を導入するステップと、型ローカルを介して変換するステップと、ローカルを別の記憶空間に変換するステップとのうちの少なくとも1つを、1つまたは複数のプロセッサに行わせることを特徴とする。
請求項11に記載の発明は、請求項8に記載のモーフィングが穏やかかどうかテストするステップを行わせる1つまたは複数の命令が、モーフィングされたコードをコンパイルするステップと、モーフィングされたコードをコンパイルすることに関する結果を、既知のコードをコンパイルすることに関する既知の結果と比較するステップとを含むことを特徴とする。
請求項12に記載の発明は、請求項8に記載のモーフィングが穏やかかどうかテストするステップを行わせる1つまたは複数の命令が、モーフィングされたコードと既知のコードとを処理するターゲットオブジェクトが同じ結果を生じることになるかどうか判定するステップを含むことを特徴とする。
請求項13に記載の発明は、請求項8に記載の1つまたは複数のプロセッサが、1つまたは複数の命令をマネージ実行環境において実行することを特徴とする。
請求項14に記載の発明は、システムにおいて、入力されたコードの基礎的な制御構造をサンプリングするサンプラと、基礎的な制御構造の少なくとも1つを書き換えるモーファと、モーファが基礎的な制御構造を穏やかな方法で書き換えたかどうか検証するためのオブジェクトとを備えたことを特徴とする。
請求項15に記載の発明は、請求項14に記載の入力されたコードが、アプリケーションと、プログラムと、メソッドと、関数と、実行可能コードの集合とのうちの1つの一部を少なくとも含むことを特徴とする。
請求項16に記載の発明は、請求項14に記載のサンプラが、入力されたコードの元のコンテキストをなお維持しながらも構文的と構造的との少なくとも一方で書き換えることのできる、入力されたコードの部分の識別を可能にすることを特徴とする。
請求項17に記載の発明は、請求項14に記載のモーファが、入力されたコードの元のコンテキストをなお維持しながらも入力されたコードを構文的に変換することを特徴とする。
請求項18に記載の発明は、請求項14に記載のモーファが、入力されたコードに関する処理結果に影響を及ぼさずに、入力されたコードを構造的に変換することを特徴とする。
これらの構成によれば、コンテキストを維持したコードモーフィングを提供することが可能となる。
詳細な記述では、図面を参照する。
コンテキストを維持したコードモーフィングについて本明細書に述べる。
図1は、コンテキストを維持したコードモーフィングを実施することのできる例示的なネットワーク環境を示す。より具体的には、クライアント装置105、サーバ装置110、「他」の装置115、データソース130のいずれか1つは、本明細書に述べるようにコードモーフィング120を可能とすることができる。さらに、装置105、110、115、130は、ネットワーク125を介して相互に通信可能に結合することができる。したがって、コードモーフィング120は、ローカルに生成された、または装置105、110、115、130のうち他のいずれかで生成された、少なくとも1つのアプリケーション、プログラム、メソッド、関数、または他のプログラム可能で実行可能なコードの集合を利用して、装置105、110、115、130のいずれかによって実施することができる。
クライアント装置105は、デスクトップパーソナルコンピュータ(PC)、ワークステーション、メインフレームコンピュータ、インターネットアプライアンス、セットトップボックス、およびメディアデバイスを含むがこれらに限定されない、様々な従来型コンピューティング装置の少なくとも1つであってよい。さらに、クライアント装置105は、パーソナルデジタルアシスタント(PDA)、ラップトップコンピュータ、セルラー電話機などを含むがこれらに限定されない、有線および/または無線リンクでネットワーク125に関連付けることのできるあらゆる装置の少なくとも1つであってもよい。さらに、クライアント装置105は、前述の各クライアント装置を様々な数量および/または組合せで表すことができる。「他」の装置115もまた、上述したクライアント装置105の例のいずれかによって具体化することができる。
サーバ装置110は、コードモーフィング120のためのものを含めた様々なデータおよび/または機能のいずれかを、クライアント装置105または「他」の装置115に提供することができる。コードモーフィング120のためのデータまたは機能は、公衆に入手可能であってもよく、あるいは制限されてもよい。例えば、特定のユーザだけに制限するか、適切な加入料金またはライセンス料金が支払われた場合だけに制限することができる。サーバ装置110は、ネットワークサーバ、アプリケーションサーバ、ウェブブレードサーバ、またはこれらのあらゆる組合せの、少なくとも1つであってよい。典型的には、サーバ装置110は、コンテンツのソースであるあらゆる装置とすることができ、クライアント装置105は、ネットワーク125またはオフライン媒体を介してそのようなコンテンツを受け取るあらゆる装置とすることができる。しかし、本明細書で述べる例示的な実装形態によれば、サーバ装置110およびクライアント装置105は、交換可能に送信側ホストまたは受信側ホストであってよい。「他」の装置115もまた、上述したサーバ装置110の例のいずれかによって具体化することができる。
「他」の装置115はさらに、本明細書で述べる実施例の1つまたは複数に従ってマネージ実行環境とテスト環境とのいずれかにおいてコードモーフィング120を可能なあらゆる装置とすることができる。すなわち、「他」の装置115は、コードが対応するアプリケーション、プログラム、メソッド、関数、または他のプログラム可能で実行可能なコードの集合のコンテキストを維持しながら、コードをモーフィングすることのできる、あらゆるソフトウェア対応コンピューティング装置または処理装置とすることができる。したがって、「他」の装置115は、オペレーティングシステム、インタープリタ、コンバータ、コンパイラ、マネージ実行環境のうちの少なくとも1つを実装された、コンピューティング装置または処理装置とすることができる。これらの例は決して限定するものではなく、したがってそのようにして解釈されるべきではない。
ネットワーク125は、様々な従来型ネットワークトポロジのいずれかを表すことができ、これらはあらゆる有線および/または無線ネットワークを含むことができる。ネットワーク125はさらに、公開および/または独自仕様のプロトコルを含めた様々な従来型ネットワークプロトコルのいずれかを利用することができる。例えばネットワーク125は、インターネットまたはイントラネットを、あるいは1つまたは複数のローカルエリアネットワーク(LAN)の少なくとも一部を含むことができる。
データソース130は、デスクトップパーソナルコンピュータ(PC)を含めた様々な従来型コンピューティング装置のいずれか1つを表すことができ、この装置は、オブジェクト指向コードで書かれている場合もありそうでない場合もあるアプリケーション、プログラム、メソッド、関数、または他のプログラム可能で実行可能なコードの集合に関して、コードモーフィング120を可能であるとすることができる。あるいは、データソース130はまた、アプリケーション、プログラム、メソッド、または関数の少なくとも一部を別のワークステーションに送信することのできる、ワークステーション、メインフレームコンピュータ、インターネットアプライアンス、セットトップボックス、メディアデバイス、パーソナルデジタルアシスタント(PDA)、ラップトップコンピュータ、セルラー電話機などのいずれか1つであってもよい。さらに、データソース130は、コードモーフィング120を予測できる対象であるアプリケーション、プログラム、メソッド、または関数に関するコードのソースとすることができるが、データソース130はさらに、少なくとも、コードモーフィング120を実施することによって得られるコードのソースと見なすこともできる。実装形態にかかわらず、コードモーフィング120のための基礎としての働きをすることのできる既知のアプリケーション、プログラム、メソッド、または関数を、ネットワーク125を介したオンライン通知の一部として、またはオフライン通知の一部として、データソース130から装置105、110、115のいずれかに送信することができる。
コードモーフィング120は、実世界のコード(以下、代替的に「顧客アプリケーション」とも呼ぶ)の少なくとも1つの基礎的な制御構造を書き換えて、構文的には実世界のコードと異なるものの、実世界のコードの元のセマンティックなコンテキストまたは意味を維持するコードを生成することを含むことができる。この結果、例えばテスト環境で、実際の顧客アプリケーションと構文的には異なるもののコンテキスト的には一貫したモーフィングされたコードを受領および/または実行することによって、処理コンポーネントをテストすることができ、それにより、現実的なテストシナリオをコンポーネントに提供することができる。すなわち、顧客アプリケーションの処理結果がすでにわかっており、したがってモーフィングされたコードの処理結果に対する比較基準としての働きをすることができるので、処理コンポーネントは、現実的で理解可能なテスト結果を生み出すことができる。テスト環境に加えて、コードモーフィング120は、アンマネージの実行環境またはマネージ実行環境において実施されたときにも、さらに妥当性を有することができる。
コードモーフィングは、前述のように、顧客アプリケーションの意図されたコンテキストを維持しながら、顧客アプリケーションの少なくとも1つの基礎的な制御構造を書き換えることによって、実施することができる。より具体的には、このような書換えは、1つまたは複数の「モーフ(morph)」を含むことができ、これらのモーフは顧客アプリケーションの構文と構造との少なくとも一方を対象とすることができる。このようなモーフの例には、メソッド外部構造モーフ、メソッド内部構造モーフ、コード削減モーフ、最適化をターゲットとしたモーフ、記憶変異モーフが含まれるが、決してこれらに限定されない。
図2は、コードモーフィング120(図1参照)の例示的な一実装形態としての処理フロー200を示す。
コード205は、少なくとも、1つまたは複数のアプリケーション、プログラム、メソッド、関数、または他のプログラム可能で実行可能なコードの集合を指すことができる。コードモーフィング120の少なくとも1つの例によれば、コード205は、中間言語(以下「IL」)またはアセンブリ言語で書かれた実世界のコードであってよい。ILもアセンブリ言語も両方とも、高水準ソースコードとターゲット(すなわち機械読取可能な)コードとの間の仲介として使用することができる。
しかし、コード205は、ILおよびアセンブリ言語の例に限定されない。そうではなく、コードモーフィング120の実施では、コード205は、複数の構文の特質(characeristic)および構成(construct)の特性(property)のうち少なくとも1つをサンプリングできる対象である様々な既知の言語のいずれか1つで書かれていてよい。
ジェネレータ210は、コードモーフィング120の少なくとも一部をその内部で実施できるコンポーネントまたはモジュールと見なすことができる。ジェネレータ210に関連する様々な動作は、サンプラ215およびモーファ220によって、単独でまたは同時に実施することができる。別法として、ジェネレータ210に関連する動作は、コンポーネントまたはモジュール自体によって実施されてもよく、あるいは、モジュールが含まれているか関連付けられているネットワークノードと協働して(すなわちジェネレータ210が含まれているか関連付けられている1つまたは複数のプロセッサによって)、コンポーネントまたはモジュールによって実施されてもよい。他の実装形態では、サンプラ215およびモーファ220の動作を含めたジェネレータ210の動作は、ハードウェア、ファームウェア、またはハードウェアとファームウェアとソフトウェアの何らかの組合せとして、単独でまたは組合せで実施することができる。
さらに、ジェネレータ210のコンポーネントまたはモジュールは、図2に示すように、共通の環境で別々のコンポーネントとして提供することができる。しかし、ジェネレータ210の少なくとも1つの代替実施形態では、対応するコンポーネントまたはモジュールを別々の処理環境に配置することもできる。さらに、ジェネレータ210のコンポーネントまたはモジュールは、単一のコンポーネントまたはモジュールとして提供することもできる。
サンプラ215は、例えばサーバ装置110またはデータソース130(図1参照)から、コード205を受け取ることができる。前述のように、コード205は、例えばILやアセンブリ言語コードで提供することができる。典型的には、次いでサンプラ215は、コード205が書かれている言語に属する構文の特質および構成の特性をサンプリングおよび/または解読できるものとすることができる。したがって、コード205のどの1つまたは複数の部分を、コード205の部分のその部分の元のコンテキストまたは意図をなお維持しながらも構文的と構造的との少なくとも一方でモーフィングできるかを決定することができる。さらに、コード205のモーフがどのように実施されることになるかも決定することができる。
例えば、コード205またはその一部は、サンプラ215によって読み取れるデータを含むことができる。このようなデータは、コード205のどの1つまたは複数の部分を、構文的または構造的にあるいはこの両方でモーフィングできるかを示すことができる。あるいは、サンプラ215は、コード205またはその一部をそのコンテキストについて調べることができ、このようなコンテキストはコーディングパターンである場合があるが、このようなコンテキストを、モーフィングの候補として決定することができる。このようなコンテキストまたはパターンの例については、図3の実施例に関して後述する。
モーファ220は、コード205のどの部分がモーフィングされるか、およびどのようにしてモーフが実施されるかに関する前述の決定を利用して、コード205の少なくとも1つの基礎的な制御構造を書き換えてモーフィングされたコードを生成することができ、このモーフィングされたコードは、前にジェネレータ210に入力されたコード205と構文的には異なるものの、コンテキスト的には一貫している。コード205のモーフィングされたバージョンは、例えばテスト環境で利用することができるが、このようなシナリオは例として提供するだけであり、決して限定するものではない。
「モーフ」は、アプリケーション、プログラム、メソッド、関数、または他のプログラム可能で実行可能なコードの集合の少なくとも一部に対応する構文と構造(すなわち構成)との少なくとも一方の、穏やかな(benign)操作と見なすことができる。より具体的には、コード205の少なくとも1つの部分を再コーディング、置換え、または他の方法で再構築することによって、モーフィングされたコードの複数の並べ替えを生成することができる。したがって、テスト環境では、顧客アプリケーションを利用して、現実のコンポーネントまたはモジュールの難しい使用を対象とした複雑なテストケースを生成することができる。
ターゲットコンポーネント225は、モーフィングされたコード(すなわち、ジェネレータ210、特にモーファ220で、1つまたは複数の部分が再コーディング、置換え、または他の方法で再構築されたコード)の1つまたは複数の変形を受け取ることになるコンポーネントまたはモジュールとすることができる。ターゲットコンポーネント225は、テスト環境で、モーフィングされたコードを受け取ることによって利益を得ることができる。すなわち、モーファ220は、ジェネレータ210でコード205として受け取られたアプリケーション、プログラム、メソッド、関数、または他のプログラム可能で実行可能なコードの集合のボリュームに応じて、およそ何百万さらには何十億ものモーフィングされたコードを生成することができる。ジェネレータ210で生成されるモーフィングされたコードの変形の数に影響する場合のある別の因子には、コード205とターゲットコンポーネント225とのどちらかに対してテストされることになるモーフ自体のボリュームを含めることができる。したがって、ターゲットコンポーネント225を、結果がわかっているかなりの量のテストコードにかけることができ、それにより、コード205および/またはターゲットコンポーネント225に対するモーフに伴うバグおよび他の問題を素早く識別することができる。
図3は、コードモーフィング120(図1参照)の一実施例を示す。より詳細には、この実施例は、モーファ220(図2参照)によって実施される、コード205からモーフィングされたコード325への変換を示す。したがって、図3の実施例は、図2に示した様々な機構に関して述べる。
コード205は、モーフィングを実施できる対象であるプログラム、メソッド、操作、アプリケーション、関数、または他のプログラム可能で実行可能なコードの集合の、少なくとも一部を含むことができる。図3の実施例では、コード205は、DownloadData310、ReadData315、およびWriteData320のメソッドを含むことができる。
少なくとも1つの実施例によれば、コード205をサンプラ215でサンプリングして、コード205の元のコンテキストまたは意図をなお維持しながらもコード205のどの1つまたは複数の部分を構文または構造あるいは両方に関してモーフィングできるか、さらに、どの1つまたは複数のモーフを実施できるかを決定することができる。代替実施例によれば、コード205のどこをどのようにモーフィングするかに関する決定は、サンプラ215によらずに行うことができ、したがってコード205を直接モーファ220に入力することができる。
モーフィングされたコード325は、少なくとも1つの基礎的な制御構造が穏やかな方法(benign manner)で書き換えられたコード205を含むことができ、それにより、モーフィングされたコード325とコード205とは、同じセマンティックな意味を有するが、異なる構文および/または構造を有する。Morph1 330およびMorph2 335は、構文的または構造的モーフ、あるいは両方の組合せであってよく、これらをコード205に注入してモーフィングされたコード325を作成することができる。すなわち、Morph1 330およびMorph2 335は、単独でまたは組合せで、コード205として入力された1つまたは複数の操作、アプリケーション、メソッド、関数、または他のプログラム可能で実行可能なコードの集合の、穏やかな変換としての働きをすることができる。さらに、コード205は2つのモーフに限定されないことに留意されたい。Morph1 330およびMorph2 335は、例として提供されているだけである。
図3のMorph1 330およびMorph2 335として単独でまたは様々な組合せで実施することのできるモーフの非限定的な例には、以下のものが含まれる。
メソッド外部構造モーフ:コード205は、メソッドにパラメータを追加すること、プリミティブ型の幅を拡張すること、またはパラメータの順序を変更することによって、モーフィング(すなわち元の意図されたコンテキストを維持しながらその少なくとも1つの基礎的な制御構造を書き換える)することができる。例えば、メソッドに追加されるパラメータには、単純オブジェクト型、単純型、ガベージコレクション型(マネージ実行環境で)、配列、値型を含めることができる。
メソッド内部構造モーフ:コード205は、ローカル変数の使用順序を変更すること、ローカル変数を追加すること、外部変数を余分に使用すること(例えば外部静的フィールドを使用するか外部メソッドを使用する(両方ともネイティブおよび副作用なしマネージド))、余分なループを追加すること、例外処理を介して制御フロー中でステッチングすること(マネージ実行環境で)、1つまたは複数の定数を展開すること、定数をメソッドで置き換えること、および、偽のスタック深度を導入することによって、モーフィングすることができる。
コード削減モーフ:コード205は、1つまたは複数の定数を畳み込むこと、およびコードをループ中にローリングすることによって、モーフィングすることができる。
最適化をターゲットとしたモーフ:コード205は、1つまたは複数のループをロールアップすること、および1つまたは複数の共通の部分式を導入することによって、モーフィングすることができる。最適化をターゲットとしたモーフの効果は、コード205またはその一部の内の最適化に逆らうことである場合がある。
記憶変異モーフ:コード205は、型ローカルを介して変換すること、およびローカルを別の記憶空間に変換することによって、モーフィングすることができる。
前述のモーフは、例として提供しただけであり、決してコードモーフィング120の実装形態を限定するものではない。さらに、モーフのこれらおよび他の例は、コード205の少なくとも1つの基礎的な制御構造を穏やかな方法で書き換えるものとする。すなわち、モーフは、ターゲットコンポーネント225に対するコード205の処理結果に影響を及ぼさずに、少なくとも構文または構造あるいは両方を変更するものとする。したがって、コードモーフィング120のために実施される特定のモーフは、穏やかであると仮定することができ、あるいは、モーフの特定の1つが実際に穏やかかどうかをテストしようとして実施することができる。
ターゲットコンポーネント225は、モーフィングされたコード325(すなわち前述の1つまたは複数のモーフによってモーフィングされたコード205)を受け取ることになるコンポーネントまたはモジュールとすることができる。ターゲットコンポーネント225は、ジェネレータ210中、特にモーファ220中にコード205として受け取られたメソッド、プリケーション、プログラム、関数、または他のプログラム可能で実行可能なコードの集合のボリュームに応じて、およそ何百万さらには何十億ものコード205のモーフィングされた変形を生成するモーファ220から、利益を得ることができる。すなわち、ターゲットコンポーネント225に対するコード205の処理結果がわかっていると仮定することができるので、ターゲットコンポーネント225を、予想される結果がわかっている多量のテストコードにかけることができる。したがって、少なくともターゲットコンポーネント225に関しては、モーフに関するバグおよび/または他の欠陥を容易に検出することができる。
図4は、コードモーフィング120(図1参照)を実施することのできる例示的なシステム400を示す。より具体的には、システム400は、マネージ実行環境415でどのようにコードモーフィング120を実施することができるかを示す。以下、図2と3の両方の要素を参照することによってシステム400を述べる。しかし、システム400のこのような構造および構成は、例として提供するだけであり、決して限定として推論すべきではない。
アプリケーション、プログラム、メソッド、関数、または他のプログラム可能で実行可能なコードの集合は、実行されるために別のソフトウェアシステムを必要とする場合があるので、マネージ実行環境415は、アプリケーションプログラムがオペレーティングシステム中で適切に動作するための1つまたは複数のルーチンを提供することができる。したがって、このようなコードは、アプリケーションプログラムとオペレーティングシステムとの間に存在することのできる1つまたは複数のマネージ実行環境ルーチンを呼び出すことができ、マネージ実行環境ルーチンは、適切なオペレーティングシステムルーチンを呼び出すことができる。
マネージ実行環境は、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、および、モバイル処理装置のホストを含めた、ますます広範にわたる処理装置上でのソフトウェア実行の信頼性を高めるために開発された。マネージ実行環境は、処理装置(例えば図1に関して上述した装置105、110、115、130)上で実行されるアプリケーションに、抽象化の層およびサービスを提供することができる。マネージ実行環境はさらに、このようなアプリケーションに、エラー処理および自動メモリ管理を含む機能を提供することもできる。マネージ実行環境の例は、Visual Basicランタイム実行環境と、例えばJava(登録商標)ルーチンを実行するのに使用されるJava(登録商標)Virtual Machineランタイム実行環境と、例えば呼出しルーチンの実行前に本願発明の特許出願人の.NET(商標)アプリケーションを機械語にコンパイルするためのCommon Language Runtime(CLR)とを含むことができる。
コード205は、図2および3に関して上述したように、例えばILやアセンブリ言語で書かれた少なくともアプリケーション、プログラム、メソッド、関数、または他のプログラム可能で実行可能なコードの集合の、1つまたは複数を参照することができる。
ジェネレータ210は、図2に関して上述したように、コードモーフィング120の少なくとも一部を実施するために1つまたは複数のコンポーネントを参照することができる。少なくとも1つの例示的な実装形態によれば、ジェネレータ210は、アンマネージの実行環境では、データソースを呼び出してコード205を受け取ることができる。あるいは、マネージ実行環境での少なくとも1つの実施例は、ジェネレータ210が実行エンジン420を呼び出してコード205を受け取ることを含むことができる。
実行エンジン420は、少なくともマネージ実行環境では、どのようにコード205が管理および操作されることになるかを示すコード205の部分を参照することができる。
どのようにジェネレータ210がコード205を受け取るかにかかわらず、ジェネレータ210は、モーフィングされたコード325(図3参照)が作成されるための例示的なプロセス200(図2参照)を実施することができる。すなわち、ジェネレータ210は、コード205の前の形と構文的には異なるもののコンテキスト的には一貫するようにして、コード205の1つまたは複数の基礎的な制御構造(例えば構文、構造、または両方)を書き換えることができる。さらに、ジェネレータ210は、テストされたまたはすでに証明されたモーフを利用して、モーフィングされたコード325の複数の並べ替えを生成することができる。
テスト環境の少なくとも1つの実施例によれば、次いでジェネレータ210は、マネージ実行環境415において、モーフィングされたコード325をコンパイラ425に送ることができる。したがって、モーフィングされたコード325の多くの並べ替えにかけられることにより、コードのことなる組合せを処理しおよびコーディングバグを明るみにするコンパイラ425の能力をテストすることができる。
コンパイラ425は、ジェネレータ210によって生成することのできるモーフィングされたコード325の並べ替えのスコアに対するターゲットオブジェクトのほんの一例と見なすことができる。しかし、目的のあるコードモーフィングは、テスト目的に向けられる可能性が高い(ただしこれに限定されない)。したがって、図4の少なくとも1つの代替実施例によれば、ランダムに生成されたコードのターゲットは、予想される結果がわかっているモーフィングされたコードのスコア(およそ少なくとも数百万もの)を受け取ることによって目的のあるテストを達成することのできる、マネージ実行環境415内のあらゆるコンポーネントまたはモジュールとすることができる。
テスタ430は、アンマネージの実行環境において、またはマネージ実行環境415内で、コンパイラ425のテスト用データ、またはモーフィングされたコードの代替ターゲットオブジェクトのテスト用データを収集するコンポーネントまたはモジュールを参照することができる。
したがって、アンマネージとマネージの両方の実行環境でのテストは、少なくとも1つの基礎的な制御構造(例えば構文の特質や構造の特性)が書き換えられたコードであって、予想される処理結果がわかっているコードによって、より目的があり効果的であるものにすることができる。
図1〜4に関する前述の実施例は、1つまたは複数のプロセッサと、システムメモリと、様々なシステムコンポーネントを結合するシステムバスとを含むがこれらに限定されないコンポーネントを有するコンピューティング環境で実施することができる。さらに、このコンピューティング環境は、様々なコンポーネントのいずれかによってアクセス可能な様々なコンピュータ読取可能な媒体を含むことができ、揮発性と不揮発性の媒体、取外し可能と固定の媒体の両方を含む。
本明細書では、プログラムモジュールなど、1つまたは複数のコンピュータまたは他の装置によって実行されるコンピュータ実行可能命令の一般的なコンテキストで、様々なモジュールおよび技法を述べることができる。一般に、プログラムモジュールは、特定のタスクを実施するか特定の抽象データ型を実装するためのルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。通常、プログラムモジュールの機能は、様々な実施形態で望まれるように結合または分散させることができる。
これらのモジュールおよび技法の実装形態は、何らかの形のコンピュータ読取可能な媒体に記憶することができ、あるいは何らかの形のコンピュータ読取可能な媒体を介して伝送することができる。コンピュータ読取可能な媒体は、コンピュータによってアクセスできるあらゆる利用可能な媒体とすることができる。限定ではなく例として、コンピュータ読取可能な媒体は、「コンピュータ記憶媒体」および「通信媒体」を含むことができる。
「コンピュータ記憶媒体」は、コンピュータ読取可能な命令、データ構造、プログラムモジュール、または他のデータなどの情報を記憶するためのあらゆる方法または技術で実現された、揮発性と不揮発性、取外し可能と固定の媒体を含む。コンピュータ記憶媒体は、限定しないがRAM、ROM、EEPROM、フラッシュメモリ、または他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)、または他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、または他の磁気記憶装置を含み、あるいは、所望の情報を記憶するのに使用できコンピュータによってアクセスできる他のあらゆる媒体を含む。
「通信媒体」は通常、コンピュータ読取可能な命令、データ構造、プログラムモジュール、または他のデータを、搬送波や他の転送機構などの被変調データ信号に組み入れる。通信媒体はまた、あらゆる情報送達媒体も含む。用語「被変調データ信号」は、信号中の情報が符号化されるようにして1つまたは複数の特質が設定または変更される信号を意味する。非限定的な例にすぎないが、通信媒体は、有線ネットワークや直接有線接続などの有線媒体と、音響、無線周波数、赤外線などの無線媒体、および他の無線媒体とを含む。以上のいずれかの組合せも、コンピュータ読取可能な媒体の範囲に含まれる。
本明細書全体にわたり、「一実施形態」「実施形態」または「例示的な実施形態」を参照したが、これは、述べた特定の特徴、構造、または特質が本発明の少なくとも1つの実施形態に含まれることを意味する。したがって、このような語句の使用は、単なる1つの実施形態以上を指す場合がある。さらに、述べた特徴、構造、または特質は、1つまたは複数の実施形態で、あらゆる適した方法で組み合わせることができる。
しかし、本発明はこれらの具体的な詳細の1つまたは複数がなくても実施できること、あるいは他の方法、リソース、材料などでも実施できることは、当業者なら認識するであろう。他の場合では、単に本発明の態様を曖昧にするのを避けるため、周知の構造、リソース、または動作については、詳細に図示も記述もしていない。
本発明の例示的な実施形態および適用例を例示および記述したが、本発明は、上述した正確な構成およびリソースに限定されないことを理解されたい。特許請求する本発明の範囲を逸脱することなく、当業者に明らかな様々な修正、変更、および変形を、本明細書に開示した本発明の方法およびシステムの構成、動作、および詳細に加えることができる。
コードモーフィングの実施例を実施することのできるネットワーク環境を示す図である。 コードモーフィングの少なくとも1つの例示的な実装形態に関する処理フローを示す図である。 コードモーフィングの少なくとも1つの例示的な実装形態によるコードからモーフィングされたコードへの例示的な変換を示す図である。 コードモーフィングの少なくとも1つの実施例を実施することのできるシステムの例を示す図である。
符号の説明
200 処理フロー
205 コード
210 ジェネレータ
215 サンプラ
220 モーファ
225 ターゲットコンポーネント

Claims (18)

  1. コードをサンプリングするステップと、
    前記コードを穏やかな方法でモーフィングするステップと、
    前記モーフィングされたコードを処理するステップと、
    前記コードに関する既知の処理結果を、前記モーフィングされたコードに関する処理結果と比較するステップと
    を備えたことを特徴とする方法。
  2. 前記コードは、アプリケーションと、プログラムと、メソッドと、関数と、実行可能コードの集合とのうちの1つの一部を少なくとも含むことを特徴とする請求項1に記載の方法。
  3. 前記サンプリングするステップは、前記コードに属する構文の特質および構成の特性のうち少なくとも1つを解読するステップを含むことを特徴とする請求項1に記載の方法。
  4. 前記モーフィングするステップは、前記コードのコンテキストを維持しながら前記コードの少なくとも1つの基礎的な構成を書き換えるステップを含むことを特徴とする請求項1に記載の方法。
  5. 前記コードをモーフィングするステップは、パラメータを追加するステップと、プリミティブ型の幅を拡張するステップと、パラメータの順序を変更するステップと、ローカル変数の順序を変更するステップと、ローカル変数を追加するステップと、外部変数を余分に使用するステップと、余分なループを追加するステップと、制御フロー中でステッチングするステップと、定数を展開するステップと、メソッドを定数と置き換えるステップと、偽のスタック深度を導入するステップと、定数を畳み込むステップと、ループをロールアップするステップと、共通の部分式を導入するステップと、型ローカルを介して変換するステップと、ローカルを別の記憶空間に変換するステップとのうちの少なくとも1つを含むことを特徴とする請求項1に記載の方法。
  6. 前記モーフィングするステップは、マネージ実行環境において実行されることを特徴とする請求項1に記載の方法。
  7. 前記処理するステップは、前記コードをコンパイルするステップを含むことを特徴とする請求項1に記載の方法。
  8. 読み込まれると、1つまたは複数のプロセッサに、
    既知のコードをモーフィングしてモーフィングされたコードを作成するステップと、
    前記モーフィングが穏やかかどうかテストするステップと
    を行わせる1つまたは複数の実行可能命令を有するコンピュータ読取可能な媒体。
  9. 前記既知のコードをモーフィングするステップを行わせる1つまたは複数の命令は、前記既知のコードの少なくとも一部を構文的と構造的との少なくとも一方で書き換えるステップを前記1つまたは複数のプロセッサに行わせることを特徴とする請求項8に記載のコンピュータ読取可能な媒体。
  10. 前記既知のコードをモーフィングするステップを行わせる1つまたは複数の命令は、前記既知のコードに対して、パラメータを追加するステップと、プリミティブ型の幅を拡張するステップと、パラメータの順序を変更するステップと、ローカル変数の順序を変更するステップと、ローカル変数を追加するステップと、外部変数を余分に使用するステップと、余分なループを追加するステップと、制御フロー中でステッチングするステップと、定数を展開するステップと、メソッドを定数と置き換えるステップと、偽のスタック深度を導入するステップと、定数を畳み込むステップと、ループをロールアップするステップと、共通の部分式を導入するステップと、型ローカルを介して変換するステップと、ローカルを別の記憶空間に変換するステップとのうちの少なくとも1つを、前記1つまたは複数のプロセッサに行わせることを特徴とする請求項8に記載のコンピュータ読取可能な媒体。
  11. 前記モーフィングが穏やかかどうかテストするステップを行わせる1つまたは複数の命令は、
    前記モーフィングされたコードをコンパイルするステップと、
    前記モーフィングされたコードをコンパイルすることに関する結果を、前記既知のコードをコンパイルすることに関する既知の結果と比較するステップと
    を含むことを特徴とする請求項8に記載のコンピュータ読取可能な媒体。
  12. 前記モーフィングが穏やかかどうかテストするステップを行わせる1つまたは複数の命令は、前記モーフィングされたコードと前記既知のコードとを処理するターゲットオブジェクトが同じ結果を生じることになるかどうか判定するステップを含むことを特徴とする請求項8に記載のコンピュータ読取可能な媒体。
  13. 前記1つまたは複数のプロセッサは、前記1つまたは複数の命令をマネージ実行環境において実行することを特徴とする請求項8に記載のコンピュータ読取可能な媒体。
  14. 入力されたコードの基礎的な制御構造をサンプリングするサンプラと、
    前記基礎的な制御構造の少なくとも1つを書き換えるモーファと、
    前記モーファが前記基礎的な制御構造を穏やかな方法で書き換えたかどうか検証するためのオブジェクトと
    を備えたことを特徴とするシステム。
  15. 前記入力されたコードは、アプリケーションと、プログラムと、メソッドと、関数と、実行可能コードの集合とのうちの1つの一部を少なくとも含むことを特徴とする請求項14に記載のシステム。
  16. 前記サンプラは、前記入力されたコードの元のコンテキストをなお維持しながらも構文的と構造的との少なくとも一方で書き換えることのできる、前記入力されたコードの部分の識別を可能にすることを特徴とする請求項14に記載のシステム。
  17. 前記モーファは、前記入力されたコードの元のコンテキストをなお維持しながらも前記入力されたコードを構文的に変換することを特徴とする請求項14に記載のシステム。
  18. 前記モーファは、前記入力されたコードに関する処理結果に影響を及ぼさずに、前記入力されたコードを構造的に変換することを特徴とする請求項14に記載のシステム。
JP2006015454A 2005-02-24 2006-01-24 コードモーフィング Pending JP2006236327A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US11/064,865 US8020152B2 (en) 2005-02-24 2005-02-24 Code morphing

Publications (1)

Publication Number Publication Date
JP2006236327A true JP2006236327A (ja) 2006-09-07

Family

ID=36693571

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006015454A Pending JP2006236327A (ja) 2005-02-24 2006-01-24 コードモーフィング

Country Status (5)

Country Link
US (1) US8020152B2 (ja)
EP (1) EP1696316B1 (ja)
JP (1) JP2006236327A (ja)
KR (1) KR101219874B1 (ja)
CN (1) CN1825277B (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012012861A1 (en) * 2010-07-29 2012-02-02 Irdeto Canada Corporation System and method for efficiently deploying massively diverse program instances to resist differential attacks
US8683452B1 (en) * 2010-12-21 2014-03-25 Emc Corporation Dynamically obfuscated javascript
US10459717B2 (en) * 2013-08-07 2019-10-29 Sap Se Observing evolution of software development artifacts
CN105677318A (zh) * 2015-12-28 2016-06-15 心动网络股份有限公司 一种防止游戏被内存修改器修改的方法
US10248545B2 (en) * 2016-02-17 2019-04-02 Parasoft Corporation Method for tracking high-level source attribution of generated assembly language code
US11200151B1 (en) 2021-03-12 2021-12-14 Sas Institute Inc. Graphical user interface and debugger system for selecting and testing alterations to source code for software applications

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4739465B2 (ja) * 1997-06-09 2011-08-03 インタートラスト テクノロジーズ コーポレイション ソフトウェアセキュリティを増強するための混乱化技術
EP0991994A4 (en) * 1997-06-25 2001-11-28 Transmeta Corp IMPROVED MICROPROCESSOR
US5903761A (en) * 1997-10-31 1999-05-11 Preemptive Solutions, Inc. Method of reducing the number of instructions in a program code sequence
US7089541B2 (en) * 2001-11-30 2006-08-08 Sun Microsystems, Inc. Modular parser architecture with mini parsers
US20030145190A1 (en) * 2001-12-07 2003-07-31 Paolo Faraboschi Compiler algorithm to implement speculative stores
EP1347373A3 (en) 2002-03-20 2005-02-02 Seiko Epson Corporation Apparatus for processing instructions of different instruction set architectures
US7228426B2 (en) * 2002-04-03 2007-06-05 Microsoft Corporation Integrity ordainment and ascertainment of computer-executable instructions with consideration for execution context
US20040172637A1 (en) * 2003-02-28 2004-09-02 Sap Ag Code morphing manager
US7669188B2 (en) * 2004-12-03 2010-02-23 Palo Alto Research Center Incorporated System and method for identifying viable refactorings of program code using a comprehensive test suite

Also Published As

Publication number Publication date
EP1696316A3 (en) 2006-10-04
EP1696316A2 (en) 2006-08-30
US20060190937A1 (en) 2006-08-24
CN1825277A (zh) 2006-08-30
US8020152B2 (en) 2011-09-13
KR20060094457A (ko) 2006-08-29
CN1825277B (zh) 2012-10-10
KR101219874B1 (ko) 2013-01-09
EP1696316B1 (en) 2019-08-07

Similar Documents

Publication Publication Date Title
Sridharan et al. F4F: taint analysis of framework-based web applications
Arzt et al. Stubdroid: automatic inference of precise data-flow summaries for the android framework
US8615750B1 (en) Optimizing application compiling
Heizmann et al. Termination analysis by learning terminating programs
US10528363B2 (en) Conservative class preloading for real time java execution
US10209968B2 (en) Application compiling
WO2014062950A1 (en) Code dependency calculation
US9645800B2 (en) System and method for facilitating static analysis of software applications
EP1899859B1 (en) Translating expressions in a computing environment
JP2006236327A (ja) コードモーフィング
Vasilakis et al. Supply-chain vulnerability elimination via active learning and regeneration
Kim et al. Reuse-oriented reverse engineering of functional components from x86 binaries
Binkley et al. Tree-oriented vs. line-oriented observation-based slicing
US20060193342A1 (en) System and method for testing a protocol using targeted variant input
KR20210045122A (ko) 기호 실행을 사용하는 소프트웨어 테스트 입력 생성 장치 및 방법
US11537372B2 (en) Generating compilable machine code programs from dynamic language code
US20230052827A1 (en) Automated synthesis of reference policies for runtime microservice protection
Schippers et al. An implementation substrate for languages composing modularized crosscutting concerns
Schiffl et al. Formal analysis of smart contracts: applying the KeY system
Strickland et al. Contracts for domain-specific languages in Ruby
Schippers et al. A graph-based operational semantics for context-oriented programming
Sun et al. Model-based testing of web service with EFSM
Kim et al. Static dalvik bytecode optimization for Android applications
KR101029334B1 (ko) Api 로깅 장치 및 방법
Hai et al. Multi-threaded on-the-fly model generation of malware with hash compaction

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090107

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110830

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111130

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111220

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120319

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120410