(57)【要約】  実行時のアプリケーションメソッドを置き換えるためのコンピュータ実装方法は、ソースメソッドで実行時に置き換えるように、標的メソッドを含む、実行時のアプリケーションを識別することと、標的クラスによって参照される実行時のメモリ内の標的メソッドデータ構造（標的メソッドのメソッドコードへの標的コードポインタを含む）の標的アドレスを位置決定することと、ソースメソッドを記載する実行時のメモリ内のソースメソッドデータ構造（ソースメソッドのメソッドコードへのソースコードポインタを含む）のソースアドレスを判定することと、ソースメソッドデータ構造をソースアドレスから標的アドレスにコピーし、それにより、標的コードポインタをソースコードポインタで置き換えることによって、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、実行時にアプリケーションを修正することと、を含むことができる。種々の他の方法及びシステムもまた、開示する。
2016515748.tif 000002
【特許請求の範囲】
【請求項１】
実行時のアプリケーションメソッドを置き換えるためのコンピュータ実装方法であって、前記方法の少なくとも一部分が、少なくとも１つのプロセッサを含むコンピューティングデバイスによって実施され、前記方法が、
ソースメソッドで実行時に置き換えるように、標的メソッドを含む実行時のクラスベースのオブジェクト指向のアプリケーションを識別することと、
前記標的メソッドを記載し、前記アプリケーション内の標的クラスによって参照される、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定することであって、前記標的メソッドデータ構造が、前記標的メソッドのメソッドコードへの標的コードポインタを含む、位置決定することと、
前記ソースメソッドを記載する実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定することであって、前記ソースメソッドデータ構造が、前記ソースメソッドのメソッドコードへのソースコードポインタを含む、判定することと、
前記ソースメソッドデータ構造の少なくとも一部分を、前記ソースメソッドデータ構造の前記ソースアドレスから、前記標的メソッドデータ構造の前記標的アドレスにコピーし、それにより、前記標的コードポインタを前記ソースコードポインタで置き換えることによって、前記標的クラスに、前記標的メソッドの代わりに、前記ソースメソッドを参照させるように、実行時の前記アプリケーションを修正することと、を含む、方法。
【請求項２】
前記ソースメソッドを記載する前記ソースメソッドデータ構造を参照するソースクラスを識別することと、
前記ソースクラスが、私的な非ネイティブのプレースホルダメソッドを記載する、プレースホルダメソッドデータ構造を参照すると判定することと、
前記ソースメソッドデータ構造の前記一部分を、前記標的アドレスにコピーする前に、前記標的メソッドデータ構造の少なくとも一部分を、前記標的メソッドデータ構造の前記標的アドレスから、前記プレースホルダメソッドデータ構造のプレースホルダアドレスにコピーし、それにより、前記ソースメソッドにおける使用のために、前記標的コードポインタを保存することと、を更に含む、請求項１に記載のコンピュータ実装方法。
【請求項３】
前記ソースメソッドが、前記プレースホルダメソッドを呼び出すことによって、前記標的メソッドを実行させるための少なくとも１つの命令を含む、請求項２に記載のコンピュータ実装方法。
【請求項４】
前記標的メソッドが、信頼できないものであり、
前記ソースメソッドが、前記標的メソッドの安全でない使用を防止するように、少なくとも１つの命令を伴うラッパーメソッドを含む、請求項３に記載のコンピュータ実装方法。
【請求項５】
前記標的クラスが初期化されていないと判定することと、
前記ソースメソッドデータ構造の前記一部分をコピーする前に、前記標的クラスを初期化することと、を更に含む、請求項１に記載のコンピュータ実装方法。
【請求項６】
前記ソースメソッドデータ構造をコピーする前に、前記標的クラスにおいて前記標的メソッドを解決することを更に含む、請求項１に記載のコンピュータ実装方法。
【請求項７】
前記標的クラスにおいて前記標的メソッドを解決することが、
前記標的クラスの参照テーブルのための前記標的メソッドのインデックスを識別することと、
前記標的メソッドデータ構造の前記標的アドレスを、前記インデックスにおいて、解決されたメソッドテーブルに記憶することと、を含む、請求項６に記載のコンピュータ実装方法。
【請求項８】
前記ソースメソッドの名前が、前記標的メソッドの名前に合致し、
前記ソースメソッドのパラメータセットが、前記標的メソッドのパラメータセットに合致する、請求項１に記載のコンピュータ実装方法。
【請求項９】
前記標的クラスに、前記標的メソッドの代わりに、前記ソースメソッドを参照させるように、実行時の前記アプリケーションを修正することが、前記ソースクラスを再コンパイルすることなく、かつ前記標的クラスを再コンパイルすることなく、実行時の前記アプリケーションを修正することを含む、請求項１に記載のコンピュータ実装方法。
【請求項１０】
実行時のアプリケーションメソッドを置き換えるためのシステムであって、
実行時にソースメソッドで置き換えるように、標的メソッドを含む、実行時のクラスベースのオブジェクト指向のアプリケーションを識別する、識別モジュールと、
前記標的メソッドを記載し、前記アプリケーション内の標的クラスによって参照される、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定する、位置決定モジュールであって、前記標的メソッドデータ構造が、前記標的メソッドのメソッドコードへの標的コードポインタを含む、位置決定モジュールと、
前記ソースメソッドを記載する実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定する、判定モジュールであって、前記ソースメソッドデータ構造が、前記ソースメソッドのメソッドコードへのソースコードポインタを含む、判定モジュールと、
前記ソースメソッドデータ構造の少なくとも一部分を、前記ソースメソッドデータ構造の前記ソースアドレスから、前記標的メソッドデータ構造の前記標的アドレスにコピーし、それにより、前記標的コードポインタを前記ソースコードポインタで置き換えることによって、前記標的クラスに、前記標的メソッドの代わりに、前記ソースメソッドを参照させるように、実行時の前記アプリケーションを修正する、修正モジュールと、
前記識別モジュール、前記位置決定モジュール、前記判定モジュール、及び前記修正モジュールを実行させるように構成される、少なくとも１つのプロセッサと、を含む、システム。
【請求項１１】
前記修正モジュールがまた、
前記ソースメソッドを記載する、前記ソースメソッドデータ構造を参照する、ソースクラスを識別し、
前記ソースクラスが、私的な非ネイティブのプレースホルダメソッドを記載する、プレースホルダメソッドデータ構造を参照すると判定し、
前記ソースメソッドデータ構造の前記一部分を、前記標的アドレスにコピーする前に、前記標的メソッドデータ構造の少なくとも一部分を、前記標的メソッドデータ構造の前記標的アドレスから、前記プレースホルダメソッドデータ構造のプレースホルダアドレスにコピーし、それにより、前記ソースメソッドにおける使用のために、前記標的コードポインタを保存する、請求項１０に記載のシステム。
【請求項１２】
前記ソースメソッドが、前記プレースホルダメソッドを呼び出すことによって、前記標的メソッドを実行させるように、少なくとも１つの命令を含む、請求項１１に記載のシステム。
【請求項１３】
前記標的メソッドが、信頼できないものであり、
前記ソースメソッドが、前記標的メソッドの安全でない使用を防止するように、少なくとも１つの命令を伴うラッパーメソッドを含む、請求項１２に記載のシステム。
【請求項１４】
前記位置決定モジュールがまた、
前記標的クラスが初期化されていないと判定し、
前記ソースメソッドデータ構造の前記一部分をコピーする前に、前記標的クラスを初期化する、請求項１０に記載のシステム。
【請求項１５】
前記位置決定モジュールがまた、前記ソースメソッドデータ構造をコピーする前に、前記標的クラスにおける前記標的メソッドを解決する、請求項１０に記載のシステム。
【請求項１６】
前記位置決定モジュールが、
前記標的クラスの参照テーブルのための前記標的メソッドのインデックスを識別することと、
前記標的メソッドデータ構造の前記標的アドレスを、前記インデックスにおいて、解決されたメソッドテーブルに記憶することと、によって、前記標的クラス内の前記標的方法を解決する、請求項１５に記載のシステム。
【請求項１７】
前記ソースメソッドの名前が、前記標的メソッドの名前に合致し、
前記ソースメソッドのパラメータセットが、前記標的メソッドのパラメータセットに合致する、請求項１０に記載のシステム。
【請求項１８】
前記修正モジュールが、前記ソースクラスを再コンパイルすることなく、かつ前記標的クラスを再コンパイルすることなく、前記標的クラスに、前記標的メソッドの代わりに、前記ソースメソッドを参照させるように、実行時の前記アプリケーションを修正する、請求項１０に記載のシステム。
【請求項１９】
コンピューティングデバイスの少なくとも１つのプロセッサによって実行される時、前記コンピューティングデバイスに、
実行時にソースメソッドで置き換えるように、標的メソッドを含む、実行時のクラスベースのオブジェクト指向のアプリケーションを識別することと、
前記標的メソッドを記載し、前記アプリケーション内の標的クラスによって参照される、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定することであって、前記標的メソッドデータ構造が、前記標的メソッドのメソッドコードへの標的コードポインタを含む、位置決定することと、
前記ソースメソッドを記載する、実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定することであって、前記ソースメソッドデータ構造が、前記ソースメソッドのメソッドコードへのソースコードポインタを含む、判定することと、
前記ソースメソッドデータ構造の少なくとも一部分を、前記ソースメソッドデータ構造の前記ソースアドレスから、前記標的メソッドデータ構造の前記標的アドレスにコピーし、それにより、前記標的コードポインタを前記ソースコードポインタで置き換えることによって、前記標的クラスに、前記標的メソッドの代わりに、前記ソースメソッドを参照させるように、実行時の前記アプリケーションを修正することと、を行わせる、１つ以上のコンピュータ可読命令を含む、非一時的コンピュータ可読記憶媒体。
【請求項２０】
前記１つ以上のコンピュータ可読命令が、前記コンピューティングデバイスに、
前記ソースメソッドを記載する、前記ソースメソッドデータ構造を参照する、ソースクラスを識別することと、
前記ソースクラスが、私的な非ネイティブのプレースホルダメソッドを記載する、プレースホルダメソッドデータ構造を参照すると判定することと、
前記ソースメソッドデータ構造の前記一部分を、前記標的アドレスにコピーする前に、前記標的メソッドデータ構造の少なくとも一部分を、前記標的メソッドデータ構造の前記標的アドレスから、前記プレースホルダメソッドデータ構造のプレースホルダアドレスにコピーし、それにより、前記ソースメソッドにおける使用のために、前記標的コードポインタを保存することと、を更に行わせる、請求項１９に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
情報時代において、多数のソフトウェアアプリケーションが、事業体及び消費者に対して、それらが多様なタスクを実施することを支援するために、利用可能である。残念ながら、全てのアプリケーションが、信頼性があるか、又はエクスプロイト若しくはセキュリティリークに対して難攻不落であるわけではない場合がある。例えば、攻撃者は、アプリケーションを活用して、マルウェアをインストールする、又はデバイスへのルートアクセスを得る場合がある。
【０００２】
一部のアプリケーションセキュリティリスクは、メソッドレベルで対処され得る。例えば、セキュリティベンダは、アプリケーション内のメソッドにラッパーを追加することができ、そのため、ラッパーは、メソッドへの呼び出しを妨害し、メソッドが呼び出されたコンテキストを検査する、及び／又はメソッドに渡されるパラメータをサニタイズすることができる。一部のプラットフォームは、アプリケーションにおいてラッパーメソッドをプロビジョニングするためのアプリケーションプログラミングインターフェースを提供することができるが、セキュリティベンダが保護を提供することを望み得る他のプラットフォームは、かかるアプリケーションプログラミングインターフェースを提供しない場合がある。アプリケーションを修正するための一部の従来の技術は、実行可能なファイル及び／又はバイトコードの部分を逆コンパイル並びに再コンパイルすることを伴い得る。残念ながら、これらの技術は、コンピューティングリソースの望ましくない消費を伴い得る、及び／又は実行中にアプリケーションを修正する上で、不十分な柔軟性を提供し得る。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
したがって、本開示は、実行時のアプリケーションメソッドを置き換えるための追加の、及び改善されたシステム及び方法に対する必要性を識別し、それに対処する。
【課題を解決するための手段】
【０００４】
以下で更に詳細に説明されるように、本開示は、概して、メモリにおいて、標的メソッドの実行可能なコードへのコードポインタを含む、標的メソッドデータ構造（標的クラスによって参照される）を、ソースメソッドの実行可能なコードへのコードポインタを含む、ソースメソッドデータ構造（例えば、ソースクラスによって参照される）で置き換えることによって、実行時のアプリケーションメソッドを置き換えるためのシステム及び方法に関する。一部の実施例において、これらのシステム及び方法はまた、必要に応じて、ソースメソッドが、ラッパーメソッドとして作用し、標的メソッドを呼び出すことを可能にするように、最初に、標的メソッドデータ構造をダミーメソッドデータ構造（例えば、ソースクラスによっても参照される）にコピーすることができる。一部の実施例において、これらのシステム及び方法は、特定のプログラミング言語で書かれたアプリケーションを実行させるために使用される仮想機械の内側で実行するアプリケーションのメソッドを置き換えることができる。例えば、これらのシステム及び方法は、ＪＡＶＡ言語（「ＪＡＶＡ」は登録商標、以下同じ）で書かれたアプリケーションを実行させるＤＡＬＶＩＫ仮想機械の内側で実行するアプリケーションのメソッドを置き換えることができる。
【０００５】
一実施例において、実行時のアプリケーションメソッドを置き換えるためのコンピュータ実装方法は、（１）実行時にソースメソッドで置換するように、標的メソッドを含み得る、実行時のクラスベースのオブジェクト指向のアプリケーションを識別することと、（２）標的メソッドを記載し、アプリケーション内の標的クラスによって参照され得る、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定することであって、標的メソッドデータ構造が、標的メソッドのメソッドコードへの標的コードポインタを含む、位置決定することと、（３）ソースメソッドを記載する、実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定することであって、ソースメソッドデータ構造が、ソースメソッドのメソッドコードへのソースコードポインタを含む、判定することと、（４）ソースメソッドデータ構造の少なくとも一部分を、ソースメソッドデータ構造のソースアドレスから、標的メソッドデータ構造の標的アドレスにコピーし、それにより、標的コードポインタをソースコードポインタで置き換えることによって、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、実行時のアプリケーションを修正することと、を含むことができる。
【０００６】
実施形態において、コンピュータ実装方法は、（１）ソースメソッドを記載するソースメソッドデータ構造を参照するソースクラスを識別することと、（２）ソースクラスが、私的な非ネイティブのプレースホルダメソッドを記載する、プレースホルダメソッドデータ構造を参照すると判定することと、（３）ソースメソッドデータ構造の一部分を、標的アドレスにコピーする前に、標的メソッドデータ構造の少なくとも一部分を、標的メソッドデータ構造の標的アドレスから、プレースホルダメソッドデータ構造のプレースホルダアドレスにコピーし、それにより、ソースメソッドにおける使用のために、標的コードポインタを保存することと、を更に含むことができる。
【０００７】
実施形態において、ソースメソッドは、プレースホルダメソッドを呼び出すことによって、標的メソッドを実行させるための少なくとも１つの命令を含むことができる。
【０００８】
実施形態において、標的メソッドは、信頼できないものであり得、ソースメソッドは、標的メソッドの安全でない使用を防止するように、少なくとも１つの命令を伴うラッパーメソッドを含むことができる。
【０００９】
実施形態において、コンピュータ実装方法は、（１）標的クラスが初期化されていない可能性があると判定することと、（２）ソースメソッドデータ構造の一部分をコピーする前に、標的クラスを初期化することと、を更に含むことができる。
【００１０】
一部の実施例において、コンピュータ実装方法は、ソースメソッドデータ構造をコピーする前に、標的クラスにおける標的メソッドを解決することを更に含むことができる。
【００１１】
一部の実施例において、標的クラスにおける標的メソッドを解決することは、（１）標的クラスの参照テーブルのための標的メソッドのインデックスを識別することと、（２）標的メソッドデータ構造の標的アドレスを、インデックスにおいて、解決されたメソッドテーブルに記憶することと、を含むことができる。
【００１２】
実施形態において、（１）ソースメソッドの名前が、標的メソッドの名前に合致し得、（２）ソースメソッドのパラメータセットが、標的メソッドのパラメータセットに合致し得る。
【００１３】
実施形態において、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、実行時のアプリケーションを修正することは、ソースクラスを再コンパイルすることなく、かつ標的クラスを再コンパイルすることなく、実行時のアプリケーションを修正することを含むことができる。
【００１４】
実施形態において、上で説明される方法を実装するためのシステムは、（１）実行時にソースメソッドで置き換えるように、標的メソッドを含み得る、実行時のクラスベースのオブジェクト指向のアプリケーションを識別する、識別モジュールと、（２）標的メソッドを記載し、アプリケーション内の標的クラスによって参照され得る、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定する、位置決定モジュールであって、標的メソッドデータ構造が、標的メソッドのメソッドコードへの標的コードポインタを含む、位置決定モジュールと、（３）ソースメソッドを記載する実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定し得る、判定モジュールであって、ソースメソッドデータ構造が、ソースメソッドのメソッドコードへのソースコードポインタを含む、判定モジュールと、（４）ソースメソッドデータ構造の少なくとも一部分を、ソースメソッドデータ構造のソースアドレスから、標的メソッドデータ構造の標的アドレスにコピーし、それにより、標的コードポインタをソースコードポインタで置き換えることによって、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、実行時のアプリケーションを修正する、修正モジュールと、（５）識別モジュール、位置決定モジュール、判定モジュール、及び修正モジュールを実行させるように構成される、少なくとも１つのプロセッサを含むことができる。
【００１５】
一部の実施例において、上で説明される方法は、コンピュータ可読記憶媒体上のコンピュータ可読命令としてコード化され得る。例えば、コンピュータ可読記憶媒体は、コンピューティングデバイスの少なくとも１つのプロセッサによって実行される時、コンピューティングデバイスに、（１）実行時にソースメソッドで置き換えるように、標的メソッドを含み得る、実行時のクラスベースのオブジェクト指向のアプリケーションを識別することと、（２）標的メソッドを記載し、アプリケーション内の標的クラスによって参照され得る、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定することであって、標的メソッドデータ構造が、標的メソッドのメソッドコードへの標的コードポインタを含む、位置決定することと、（３）ソースメソッドを記載する、実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定することであって、ソースメソッドデータ構造が、ソースメソッドのメソッドコードへのソースコードポインタを含む、判定することと、（４）ソースメソッドデータ構造の少なくとも一部分を、ソースメソッドデータ構造のソースアドレスから、標的メソッドデータ構造の標的アドレスにコピーし、それにより、標的コードポインタをソースコードポインタで置き換えることによって、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、実行時のアプリケーションを修正することと、を行わせることができる、１つ以上のコンピュータで実行可能な命令を含むことができる。
【００１６】
上記の実施形態のうちのいずれかからの特性は、本明細書で説明される一般原理に従い、互いに組み合わせて使用することができる。これらの及び他の実施形態、特性、及び利点は、添付の図面及び特許請求の範囲等と併せて以下の詳細な説明を一読すればより完全に理解されよう。
【図面の簡単な説明】
【００１７】
添付の図面は、いくつかの例示的な実施形態を例解し、本明細書の一部である。以下の説明とともに、これらの図面は、本開示の種々の原理を実証及び説明する。
【図１】実行時のアプリケーションメソッドを置き換えるための例示的なシステムのブロック図である。
【図２】実行時のアプリケーションメソッドを置き換えるための例示的なシステムのブロック図である。
【図３】実行時のアプリケーションメソッドを置き換えるための例示的な方法の流れ図である。
【図４】実行時のアプリケーションメソッドを置き換える前の例示的なアプリケーション状態の図である。
【図５】実行時のアプリケーションメソッドを置き換えた後の例示的なアプリケーション状態の図である。
【図６】本明細書で説明及び／又は例解される実施形態のうちの１つ以上を実装することが可能な例示的なコンピューティングシステムのブロック図である。
【図７】本明細書で説明及び／又は例解される実施形態のうちの１つ以上を実装することが可能な例示的なコンピューティングネットワークのブロック図である。
【００１８】
図面を通して、同一の参照文字及び説明は、同様だが、必ずしも同一ではない要素を示す。本明細書で説明される例示的な実施形態は、種々の修正及び代替的な形態が可能であるが、具体的な実施形態が、図面において例として示されており、本明細書において詳細に説明される。しかしながら、本明細書で説明される例示的な実施形態は、開示される特定の形態に限定されることを意図しない。むしろ、本開示は、添付の請求項の範囲にある全ての修正形態、均等形態、及び代替形態を網羅する。
【発明を実施するための形態】
【００１９】
本開示は、概して、実行時のアプリケーションメソッドを置き換えるためのシステム及び方法を対象とする。以下で更に詳細に説明されるように、メモリにおいて、標的メソッドの実行可能なコードへのコードポインタを含む、標的メソッドデータ構造（標的クラスによって参照される）を、ソースメソッドの実行可能なコードへのコードポインタを含む、ソースメソッドデータ構造（例えば、ソースクラスによって参照される）で置き換えることによって、本明細書で説明されるシステム及び方法は、アプリケーションがメモリにロードされる間に、アプリケーションの１つのメソッドを別のもので置き換えることを容易にすることができる。一部の実施例において、これは、メソッドの安全な実行を確実にするように、セキュリティ対策を実装するメソッドのために、あるメソッドをラッパーメソッドで置き換えることを可能にすることができる。一部の実施例において、このアプローチは、アプリケーションのいずれの部分の逆コンパイル及び／又は再コンパイルも必要とすることなく、アプリケーションメソッドの置き換えを達成することができる。一部の実施例において、このアプローチは、モバイルコンピューティングデバイス上のプロセス仮想機械などのアプリケーションメソッドの置き換えを元々サポートしないプラットフォーム上のアプリケーションメソッドの置き換えを達成することができる。一部の実施例において、これらのシステム及び方法は、仮想機械への変更を行うことなく（しかし、仮想機械によって提供されるデータ構造及び方法を使用することによって）、仮想機械内で実行するアプリケーションを置き換えることができる。
【００２０】
以下は、図１〜２を参照して、実行時のアプリケーションメソッドを置き換えるための例示的なシステムの詳細な説明を提供する。対応するコンピュータ実装方法の詳細な説明もまた、図３に関連して提供される。例示的なアプリケーション状態の詳細な説明は、図４〜５に関連して提供される。加えて、本明細書で説明される実施形態のうちの１つ以上を実装することが可能な例示的なコンピューティングシステム及びネットワークアーキテクチャの詳細な説明は、図６及び７に関連してそれぞれ提供される。
【００２１】
図１は、実行時のアプリケーションメソッドを置き換えるための例示的なシステム１００のブロック図である。この図で例解されるように、例示的なシステム１００は、１つ以上のタスクを実施するための１つ以上のモジュール１０２を含むことができる。例えば、かつ以下で詳細に説明されるように、例示的なシステム１００はまた、実行時にソースメソッドで置き換えるように、標的メソッドを含み得る、実行時のクラスベースのオブジェクト指向のアプリケーションを識別することができる、識別モジュール１０４を含むことができる。例示的なシステム１００は、標的メソッドを記載し、アプリケーション内の標的クラスによって参照され得る、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを含み得る、位置決定モジュール１０６を更に含むことができ、標的メソッドデータ構造は、標的メソッドのメソッドコードへの標的コードポインタを含む。例示的なシステム１００はまた、ソースメソッドを記載する、実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定することができる、判定モジュール１０８を含むことができ、ソースメソッドデータ構造は、ソースメソッドのメソッドコードへのソースコードポインタを含む。例示的なシステム１００は、ソースメソッドデータ構造の少なくとも一部分を、ソースメソッドデータ構造のソースアドレスから、標的メソッドデータ構造の標的アドレスにコピーし、それにより、標的コードポインタをソースコードポインタで置き換えることによって、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、実行時のアプリケーションを修正することができる、修正モジュール１１０を更に含むことができる。別個の要素として例解されるが、図１のモジュール１０２のうちの１つ以上は、単一のモジュール又はアプリケーションの部分を表し得る。
【００２２】
ある実施形態において、図１のモジュール１０２のうちの１つ以上は、コンピューティングデバイスによって実行される時、コンピューティングデバイスに、１つ以上のタスクを実施させることができる、１つ以上のソフトウェアアプリケーション又はプログラムを表し得る。例えば、かつ以下で更に詳細に説明されるように、モジュール１０２のうちの１つ以上は、図２に例解されるコンピューティングデバイス２０２、図６のコンピューティングシステム６１０、及び／又は図７の例示的なネットワークアーキテクチャ７００の部分などの１つ以上のコンピューティングデバイス上に記憶され、かつその上で実行するように構成される、ソフトウェアモジュールを表し得る。図１のモジュール１０２のうちの１つ以上はまた、１つ以上のタスクを実施するように構成される１つ以上の特殊目的のコンピュータの全て又は部分を表し得る。
【００２３】
図１の例示的なシステム１００は、多様な方法で実装されてもよい。例えば、例示的なシステム１００の全て又は部分は、図２の例示的なシステム２００の部分を表し得る。図２に示されるように、システム２００は、アプリケーション２１０を実行するコンピューティングデバイス２０２を含むことができる。コンピューティングデバイス２０２は、モジュール１０２のうちの１つ以上でプログラムされてもよい。
【００２４】
一実施形態において、図１からのモジュール１０２のうちの１つ以上は、コンピューティングデバイス２０２の少なくとも１つのプロセッサによって実行される時、コンピューティングデバイス２０２が、実行時のアプリケーションメソッドを置き換えることを容易にすることができる。例えば、かつ以降で更に詳細に説明されるように、モジュール１０２のうちの１つ以上は、コンピューティングデバイス２０２に、標的クラス２１２の標的メソッド２１６を、ソースメソッド２３６（例えば、ソースクラス２３２の）で置き換えさせることができる。例えば、かつ以降で更に詳細に説明されるように、識別モジュール１０４は、実行時にソースメソッド２３６で置き換えるように、標的メソッド２１６を含み得る、実行時のクラスベースのオブジェクト指向のアプリケーション２１０を識別するようにプログラムすることができる。位置決定モジュール１０６は、標的メソッド２１６を記載し、アプリケーション２１０内の標的クラス２１２によって参照され得る、実行時のメモリ内の標的メソッドデータ構造２１８の標的アドレスを位置決定するようにプログラムすることができ、標的メソッドデータ構造２１８は、標的メソッド２１６の標的メソッドコード２２２への標的コードポインタ２２０を含む。判定モジュール１０８は、ソースメソッド２３６を記載する、実行時のメモリ内のソースメソッドデータ構造２３８のソースアドレスを判定するようにプログラムすることができ、ソースメソッドデータ構造２３８は、ソースメソッド２３６のソースメソッドコード２４２へのソースコードポインタ２４０を含む。修正モジュール１１０は、ソースメソッドデータ構造２３８の少なくとも一部分を、ソースメソッドデータ構造２３８のソースアドレスから、標的メソッドデータ構造２１８の標的アドレスにコピーし、それにより、標的コードポインタ２２０をソースコードポインタ２４０で置き換えることによって、標的クラス２１２に、標的メソッド２１６の代わりに、ソースメソッド２３６を参照させるように、実行時のアプリケーション２１０を修正するようにプログラムすることができる。
【００２５】
コンピューティングデバイス２０２は、概して、コンピュータで実行可能な命令を読み取ることが可能な任意のタイプ又は形態のコンピューティングデバイスを表す。コンピューティングデバイス２０２の例としては、限定することなく、ラップトップ、タブレット、デスクトップ、サーバ、セルラ電話、個人用デジタル補助装置（ＰＤＡ）、マルチメディアプレーヤ、埋め込みシステム、その１つ以上の組み合わせ、図６の例示的なコンピューティングシステム６１０、又は任意の他の好適なコンピューティングデバイスが挙げられる。
【００２６】
図３は、実行時のアプリケーションメソッドを置き換えるための例示的なコンピュータ実装方法３００の流れ図である。図３に示される工程は、任意の好適なコンピュータで実行可能なコード及び／又はコンピューティングシステムによって実施されてもよい。一部の実施形態において、図３に示される工程は、図１のシステム１００、図２のシステム２００、図６のコンピューティングシステム６１０、及び／又は図７の例示的なネットワークアーキテクチャ７００の部分の構成要素の１つ以上によって実施されてもよい。
【００２７】
図３に例解されるように、工程３０２において、本明細書で説明されるシステムのうちの１つ以上は、実行時にソースメソッドで置き換えるように、標的メソッドを含み得る、実行時のクラスベースのオブジェクト指向のアプリケーションを識別することができる。例えば、工程３０２において、識別モジュール１０４は、図２のコンピューティングデバイス２０２の一部として、実行時にソースメソッド２３６で置き換えるように、標的メソッド２１６を含み得る、実行時のクラスベースのオブジェクト指向のアプリケーション２１０を識別することができる。
【００２８】
本明細書で使用される際、「アプリケーション」という用語は、任意のプロセス及び／又はプログラムを指し得る。一部の実施例において、アプリケーションは、プロセス仮想機械において実行することができる。例えば、アプリケーションは、ＧＯＯＧＬＥ  ＡＮＤＲＯＩＤ（「ＡＮＤＲＯＩＤ」は登録商標、以下同じ）プラットフォーム（例えば、モバイルコンピューティングデバイス）上で実行することができる、ＤＡＬＶＩＫ上で実行することができる。
【００２９】
本明細書で使用される際、「メソッド］という用語は、クラスベースのオブジェクト指向のアプリケーションにおいて定義されるクラスと関連付けられる任意のメソッド、サブルーチン、及び／又は手順を指し得る。
【００３０】
識別モジュール１０４は、任意の好適な様態で、実行時のアプリケーションを識別することができる。例えば、識別モジュール１０４は、アプリケーションの一部として、及び／又はそれと通信して実行することにより、アプリケーションを識別することができる。一部の実施例において、識別モジュール１０４は、アプリケーションにおいて定義される１つ以上の構築物を参照することによって、アプリケーションを識別することができる。
【００３１】
一部の実施例において、識別モジュール１０４は、ソースメソッドを含む、ソースクラスを識別することができる。一部の実施例において、以降で更に詳細に説明されるように、ソースクラスはまた、本明細書で説明されるシステムのうちの１つ以上が、標的メソッドをソースメソッドで置き換える前に、標的メソッドを保存するために使用することができる、プレースホルダメソッドを含むことができる。一部の実施例において、識別モジュール１０４は、アプリケーションを実行するために使用されるフレームワークによって消費可能ではないフォーマットのソースクラス（例えば、オブジェクト）のインスタンスを識別することができる。例えば、識別モジュール１０４は、ＪＡＶＡ  ＮＡＴＩＶＥ  ＩＮＴＥＲＦＡＣＥフレームワークに対するｊｏｂｊｅｃｔを識別することができる。これらの実施例において、識別モジュール１０４は、アプリケーションが実行するフレームワークにおける使用のためのオブジェクトを復号することができる。例えば、識別モジュール１０４は、ｊｏｂｊｅｃｔを、ＤＡＬＶＩＫによって消費可能なオブジェクト構造に復号することができる。例えば、識別モジュール１０４は、以下の例示的なコードを実行することができる：
Ｏｂｊｅｃｔ  ＊ｏｂｊＴＭ＝ｄｖｍＤｅｃｏｄｅＩｎｄｉｒｅｃｔＲｅｆ（ｅｎｖ，ｊｎｉＴＭ）；
Ｏｂｊｅｃｔ  ＊ｏｂｊＷＭ＝ｄｖｍＤｅｃｏｄｅＩｎｄｉｒｅｃｔＲｅｆ（ｅｎｖ，ｊｎｉＷＭ）；
Ｏｂｊｅｃｔ  ＊ｏｂｊＦＭ＝ｄｖｍＤｅｃｏｄｅＩｎｄｉｒｅｃｔＲｅｆ（ｅｎｖ，ｊｎｉＦＭ）；
【００３２】
上の実施例において、「ＴＭ」は、標的メソッドを指し得、「ＷＭ」は、ラッパーメソッド（即ち、ソースメソッド）を指し得、「ＦＭ」は、プレースホルダメソッドを指し得る。一部の実施例において、「ｄｖｍＤｅｃｏｄｅＩｎｄｉｒｅｃｔＲｅｆ」は、ＤＡＬＶＩＫアプリケーションプログラミングインターフェース（「ＡＰＩ」）の関数を指し得る。
【００３３】
一部の実施例において、識別モジュール１０４はまた、１つ以上のＡＰＩ関数のためのポインタを取得する。例えば、１つ以上のＡＰＩメソッドの内部名は、開発キットのバージョン（例えば、ＡＮＤＲＯＩＤ  ＮＡＴＩＶＥ  ＤＥＶＥＬＯＰＭＥＮＴ  ＫＩＴ）にわたって変化し得る。したがって、識別モジュール１０４は、関数に対する既知の名前のリストを識別し、名前がリスト上の名前と合致する関数を見出すことができる。以下で更に詳細に説明されるように、一部の実施例において、識別モジュール１０４は、本明細書で説明されるシステム及び方法が、標的メソッドをソースメソッドで置き換える過程で使用することができる、追加のＡＰＩ関数に対するポインタを識別することができる。
【００３４】
一部の実施例において、ソースメソッドの名前は、標的メソッドの名前に合致し得、ソースメソッドのパラメータセット（例えば、パラメータタイプ、パラメータの数、及び／又はパラメータ名）は、標的メソッドのパラメータセットに合致し得る。一部の実施例において、ソースメソッドの例外処理もまた、標的メソッドの例外処理と合致し得る。
【００３５】
図４は、アプリケーションの例示的な状態４００を例解する。図４に示されるように、アプリケーションは、置き換えられるべきメソッド４１２及びメソッド４１４を含むクラス４１０を含み得る。アプリケーションはまた、メソッド４３２、メソッド４１４を置き換えるためのメソッド４３４、及びメソッド４３６を含む、クラス４３０を含み得る。図４を例として使用すると、工程３０２において、識別モジュール１０４は、状態４００にあるアプリケーションを識別することができる（例えば、メソッド４１４がメソッド４３４で置き換えられる前に）。
【００３６】
図３を参照すると、工程３０４において、本明細書で説明されるシステムのうちの１つ以上は、標的メソッドを記載し、アプリケーション内の標的クラスによって参照される、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定することができ、標的メソッドデータ構造は、標的メソッドのメソッドコードへの標的コードポインタを含む。例えば、工程３０４において、位置決定モジュール１０６は、図２のコンピューティングデバイス２０２の一部として、標的メソッド２１６を記載し、アプリケーション２１０内の標的クラス２１２によって参照され得る、実行時のメモリ内の標的メソッドデータ構造２１８の標的アドレスを位置決定することができ、標的メソッドデータ構造２１８は、標的メソッド２１６の標的メソッドコード２２２への標的コードポインタ２２０を含む。
【００３７】
本明細書で使用される際、「メソッドデータ構造」という語句は、メソッドを記載するメタデータを含み得る任意のデータ構造を指し得る。例えば、メソッドデータ構造は、メソッドに対する実行可能なコード（例えば、バイトコード）へのメソッドコードポインタを含む、１つ以上のフィールドを含むことができる。一部の実施例において、クラス内のメソッドは、対応するメソッドデータ構造を指し示すことができ、そのため、メソッドデータ構造のメソッドコードポインタによって参照されるコードは、クラスのメソッドが呼び出される時に実行される。
【００３８】
位置決定モジュール１０６は、任意の好適な様態で標的アドレスの位置を識別することができる。例えば、位置決定モジュール１０６は、ＡＰＩ関数を呼び出すことによって、標的アドレスの位置を識別することができる。例えば、位置決定モジュール１０６は、以下の例示的なコードを実行することができる：
Ｍｅｔｈｏｄ  ＊ｔｍ＝ｄｖｍＧｅｔＭｅｔｈｏｄＦｒｏｍＲｅｆｌｅｃｔＯｂｊ（ｏｂｊＴＭ）。
【００３９】
先で言及されるように、本明細書で説明されるシステムのうちの１つ以上は、文書化されていない関数に対する既知の名前のリストを識別すること、及び名前がリスト上の名前と合致する関数を見出すことによって、「ｄｖｍＧｅｔＭｅｔｈｏｄＦｒｏｍＲｅｆｌｅｃｔＯｂｊ」を位置決定することができる。
【００４０】
図４を例として使用すると、工程３０４において、位置決定モジュール１０６は、メモリ内のメソッド構造４２０のアドレスを識別することができる。メソッド構造４２０は、メソッド４１４を記載するフィールド４２２、及びメソッド４１４のメソッドコード４２６を指し示すメソッドコードポインタ４２４を含むことができる。
【００４１】
図３に戻ると、工程３０６において、本明細書で説明されるシステムのうちの１つ以上は、ソースメソッドを記載する、実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定することができ、ソースメソッドデータ構造は、ソースメソッドのメソッドコードへのソースコードポインタを含む。例えば、工程３０６において、判定モジュール１０８は、図２のコンピューティングデバイス２０２の一部として、ソースメソッド２３６を記載する、実行時のメモリ内のソースメソッドデータ構造２３８のソースアドレスを判定することができ、ソースメソッドデータ構造２３８は、ソースメソッド２３６のソースメソッドコード２４２へのソースコードポインタ２４０を含む。
【００４２】
判定モジュール１０８は、任意の好適な様態でソースアドレスの位置を識別することができる。例えば、判定モジュール１０８は、文書化されていないＡＰＩ関数を呼び出すことによって、ソースアドレスの位置を識別することができる。例えば、判定モジュール１０８は、以下の例示的なコードを実行することができる：
Ｍｅｔｈｏｄ  ＊ｗｍ＝ｄｖｍＧｅｔＭｅｔｈｏｄＦｒｏｍＲｅｆｌｅｃｔＯｂｊ（ｏｂｊＷＭ）。
【００４３】
同様に、一部の実施例において、判定モジュール１０８は、プレースホルダメソッドデータ構造のプレースホルダアドレスの位置を識別することができる。例えば、判定モジュール１０８は、以下の例示的なコードを実行することができる：
Ｍｅｔｈｏｄ  ＊ｆｍ＝ｄｖｍＧｅｔＭｅｔｈｏｄＦｒｏｍＲｅｆｌｅｃｔＯｂｊ（ｏｂｊＦＭ）。
【００４４】
図４を例として使用すると、工程３０６において、判定モジュール１０８は、メモリ内のメソッド構造４４０のアドレスを識別することができる。メソッド構造４４０は、メソッド４３４を記載するフィールド４４２、及びメソッド４３４のメソッドコード４４６を指し示すメソッドコードポインタ４４４を含むことができる。
【００４５】
図３に戻ると、工程３０８において、本明細書で説明されるシステムのうちの１つ以上は、ソースメソッドデータ構造の少なくとも一部分を、ソースメソッドデータ構造のソースアドレスから、標的メソッドデータ構造の標的アドレスにコピーし、それにより、標的コードポインタをソースコードポインタで置き換えることによって、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、実行時のアプリケーションを修正することができる。例えば、工程３０８において、修正モジュール１１０は、図２のコンピューティングデバイス２０２の一部として、ソースメソッドデータ構造２３８の少なくとも一部分を、ソースメソッドデータ構造２３８のソースアドレスから、標的メソッドデータ構造２１８の標的アドレスにコピーし、それにより、標的コードポインタ２２０をソースコードポインタ２４０で置き換えることによって、標的クラス２１２に、標的メソッド２１６の代わりに、ソースメソッド２３６を参照させるように、実行時のアプリケーション２１０を修正することができる。
【００４６】
修正モジュール１１０は、任意の好適な様態で、標的クラスに、標的メソッドの代わりに、ソースメソッドを参照させるように、アプリケーションを修正することができる。一部の実施例において、修正モジュール１１０は、ソースメソッドデータ構造を標的アドレスにコピーする前に、クラス及び／又はメソッドを準備するように、１つ以上の工程を実施することができる。
【００４７】
一部の実施例において、修正モジュール１１０は、標的クラスが初期化されていないと判定することができる。これらの実施例において、修正モジュール１１０は、ソースメソッドデータ構造の部分をコピーする前に、標的クラスを初期化することができる。同様に、修正モジュール１１０は、ソースメソッドデータ構造の部分を標的アドレスにコピーする前に、ソースクラスを初期化することができる。例えば、修正モジュール１１０は、以下の例示的なコードを実行することができる：
ｉｆ（ｏｂｊＴＭ−＞ｃｌａｚｚ−＞ｓｔａｔｕｓ  ！＝ＣＬＡＳＳ＿ＩＮＩＴＩＡＬＩＺＥＤ）｛
ｄｖｍＩｎｉｔＣｌａｓｓ（ｏｂｊＴＭ−＞ｃｌａｚｚ）；／／標的クラスを初期化する
｝
ｉｆ（ｏｂｊＷＭ−＞ｃｌａｚｚ−＞ｓｔａｔｕｓ  ！＝ＣＬＡＳＳ＿ＩＮＩＴＩＡＬＩＺＥＤ）｛
ｄｖｍＩｎｉｔＣｌａｓｓ（ｏｂｊＷＭ−＞ｃｌａｚｚ）；／／ラッパークラスを初期化する
｝
【００４８】
上の実施例において、先で言及されるように、本明細書で説明されるシステムのうちの１つ以上は、文書化されていない関数に対する既知の名前のリストを識別すること、及び名前がリスト上の名前と合致する関数を見出すことによって、「ｄｖｍＩｎｉｔＣｌａｓｓ」を位置決定することができる。
【００４９】
一部の実施例において、修正モジュール１１０はまた、それらのそれぞれのクラス内の標的メソッド、ソースメソッド、及び／又はプレースホルダメソッドを解決することができる。例えば、一部のプラットフォーム上で、メソッドは、典型的に、それらの最初の使用で解決されるのみであり得る。しかしながら、修正モジュール１１０は、標的クラスの参照テーブルに対する標的メソッドのインデックスを識別し、標的メソッドデータ構造の標的アドレスを、インデックスにおいて、解決されたメソッドテーブルに保存することによって、ソースメソッドデータ構造を標的アドレスにコピーする前に、標的クラス内の標的メソッドを解決することができる。例えば、修正モジュール１１０は、以下の例示的なコードを実行することができる：
ｍｅｔｈｏｄ２ｒｅｆ（ｆａｋＭｅｔｈｏｄ−＞ｃｌａｚｚ−＞ｐＤｖｍＤｅｘ，ｆａｋＭｅｔｈｏｄ，＆ｒｅｆ）；
ｆａｋＭｅｔｈｏｄ−＞ｃｌａｚｚ−＞ｐＤｖｍＤｅｘ−＞ｐＲｅｓＭｅｔｈｏｄｓ［ｒｅｆ］＝ｆａｋＭｅｔｈｏｄ；
ｍｅｔｈｏｄ２ｒｅｆ（ｔｒｇＭｅｔｈｏｄ−＞ｃｌａｚｚ−＞ｐＤｖｍＤｅｘ，ｔｒｇＭｅｔｈｏｄ，＆ｒｅｆ）；
ｔｒｇＭｅｔｈｏｄ−＞ｃｌａｚｚ−＞ｐＤｖｍＤｅｘ−＞ｐＲｅｓＭｅｔｈｏｄｓ［ｒｅｆ］＝ｔｒｇＭｅｔｈｏｄ；
ｍｅｔｈｏｄ２ｒｅｆ（ｗｒｐＭｅｔｈｏｄ−＞ｃｌａｚｚ−＞ｐＤｖｍＤｅｘ，ｗｒｐＭｅｔｈｏｄ，＆ｒｅｆ）；
ｗｒｐＭｅｔｈｏｄ−＞ｃｌａｚｚ−＞ｐＤｖｍＤｅｘ−＞ｐＲｅｓＭｅｔｈｏｄｓ［ｒｅｆ］＝ｗｒｐＭｅｔｈｏｄ
【００５０】
上の実施例において、「ｆａｋＭｅｔｈｏｄ」は、プレースホルダメソッドを指し得、「ｔｒｇＭｅｔｈｏｄ」は、標的メソッドを指し得、「ｗｒｐＭｅｔｈｏｄ」は、ソースメソッドを指し得る。メソッド「ｍｅｔｈｏｄ２ｒｅｆ」は、提供されたメソッドの参照テーブル（例えば、ＤＡＬＶＩＫ  ＤＥＸファイルに対する）のメソッドインデックス（この実施例では、「ｒｅｆ」に保存）を見出す、修正モジュール１１０の一部分を含むことができる。
【００５１】
一部の実施例において、修正モジュール１１０は、標的メソッドデータ構造をソースメソッドデータ構造で上書きする前に、標的メソッドデータ構造を最初に保存することができる。例えば、修正モジュール１１０は、ソースメソッドを記載するソースメソッドデータ構造を参照するソースクラスを識別することができる。次いで、修正モジュール１１０は、ソースクラスが、私的な非ネイティブのプレースホルダメソッドを記載する、プレースホルダメソッドデータ構造を参照すると判定することができる。次いで、修正モジュール１１０は、ソースメソッドデータ構造の部分を、標的アドレスにコピーする前に、標的メソッドデータ構造の少なくとも一部分を、標的メソッドデータ構造の標的アドレスから、プレースホルダメソッドデータ構造のプレースホルダアドレスにコピーし、それにより、ソースメソッドにおける使用のために標的コードポインタを保存することができる。私的な非ネイティブのプレースホルダメソッドを使用することによって、本明細書で説明されるシステムは、実行時環境が、プレースホルダメソッドのクラス名を、それが標的メソッドのクラスと合致することを確認するために、チェックしないことを確実にすることができる。
【００５２】
例えば、ソースメソッドは、ソースクラスのプレースホルダメソッドへの呼び出しを含むことができる。したがって、ソースメソッドは、プレースホルダメソッドを呼び出すことによって、標的メソッドを実行するための少なくとも１つの命令を含むことができる。一部の実施例において、標的メソッドは、信頼できないものであり得る。例えば、本明細書で説明されるシステムのうちの１つ以上（例えば、識別モジュール１０４）は、アプリケーションを信頼できないアプリケーションとして識別している場合がある。更に、又は代替的に、本明細書で説明されるシステムのうちの１つ以上は、標的メソッドを信頼できないメソッド（例えば、第３者によって作成された）として識別し得る。したがって、ソースメソッドは、標的メソッドの安全でない使用を防止するように、少なくとも１つの命令で、標的メソッドに対するラッパーメソッドとして動作することができる。例えば、ソースメソッドは、サニタイズされたデータを引数として標的メソッドに渡す前に、それが呼び出された時に受信した、引数からのデータをサニタイズすることができる。別の実施例として、ソースメソッドは、それが呼び出されたコンテキスト及び／又はそれが標的メソッドを呼び出すために安全かどうかを判定するように呼び出された引数のうちの１つ以上を分析することができる。例えば、ソースメソッドは、標的メソッドの可能なエクスプロイト（例えば、バッファオーバフロー）、標的メソッドの不正使用（例えば、アクセスポリシー、データ損失防止ポリシー等に違反して）、及び／又はセキュリティの問題をもたらし得る標的メソッドの任意の他の使用を防止することができる。
【００５３】
修正モジュール１１０は、任意の好適な様態で、プレースホルダメソッドデータ構造の場所に、標的メソッドデータ構造を保存することができる。例えば、修正モジュール１１０は、以下の例示的なコードを実行することができる：
ｍｅｍｃｐｙ（ｆａｋＭｅｔｈｏｄ，ｔｒｇＭｅｔｈｏｄ，ｓｉｚｅ）；
【００５４】
同様に、修正モジュール１１０は、任意の好適な様態で、標的メソッドデータ構造の場所に、ソースメソッドデータ構造を保存することができる。例えば、修正モジュール１１０は、以下の例示的なコードを実行することができる：
ｍｅｍｃｐｙ（ｔｒｇＭｅｔｈｏｄ，ｗｒｐＭｅｔｈｏｄ，ｓｉｚｅ）；
【００５５】
一部の実施例において、修正モジュール１１０は、標的メソッドデータ構造の場所に、ソースメソッドデータ構造の１つ以上の部分をコピーするのみであり得る。例えば、修正モジュール１１０は、標的メソッドデータ構造の位置における、ソースメソッドの正しい動作を確実にするために必要なソースメソッドデータ構造のそれらのフィールドのみ（例えば、ソースメソッドデータ構造と標的メソッドデータ構造との間で異なったフィールドのみ）をコピーすることができる。
【００５６】
一部の実施例において、修正モジュール１１０は、ソースクラスを再コンパイルすることなく、かつ標的クラスを再コンパイルすることなく、実行時のアプリケーションを修正することができる。
【００５７】
図４を例として使用すると、メソッド４３６は、クラス４３０内のプレースホルダメソッドを表し得る。クラス４３０内のメソッド４３６は、フィールド４５２、並びにダミーコード４５６（例えば、コンテンツなし及び／又は重要なコンテンツなし）を指し示すメソッドコードポインタ４５４を含む、メソッド構造４５０によって記載され得る。修正モジュール１１０は、メソッド構造４２０を、メソッド構造４５０の位置にコピーし、メソッドコード４２６を実行させるように、クラス４３０のメソッド４３６の将来の呼び出しを引き起こす（例えば、メソッド４１４へのラッパーメソッドとして作用するメソッド４３４によって）ことができる。次いで、修正モジュール１１０は、メソッド構造４４０を、メソッド構造４２０の位置にコピーし、メソッドコード４４６を実行させるように、クラス４１０のメソッド４１４の将来の呼び出しを引き起こすことができる（例えば、メソッド４１４に対するラッパーメソッドが、メソッド４１４が直接呼び出される代わりに、呼び出されるように）。
【００５８】
図５は、メソッドを置き換えた後のアプリケーションの例示的な状態５００を例解する。図５を例として使用すると、メソッド４１４は、ここでは、メソッドコード４４６（例えば、ラッパーメソッドコード）を指し示し続けるメソッドコードポインタ４４４を含む、メソッド構造４４０のコンテンツを指し示すことができる。メソッド４３６は、ここでは、メソッドコード４２６（例えば、元の標的メソッドコード）を指し示し続けるメソッドコードポインタ４５４を含む、メソッド構造４２０のコンテンツを指し示すことができる。したがって、クラス４１０のメソッド４１４が呼び出される時、メソッドコード４４６が実行され得、これは、元の標的関数をどのように呼び出すか及び／又は呼び出すかどうかを決定するように、一部のセキュリティ工程を実施することができる。次いで、メソッドコード４４６は、メソッド４３６（プレースホルダメソッド）を呼び出すことによって、元の標的関数を呼び出し、メソッドコード４２６の実行をもたらすことができる。
【００５９】
図６は、本明細書で説明及び／又は例解される実施形態のうちの１つ以上を実装することが可能な例示的なコンピューティングシステム６１０のブロック図である。例えば、コンピューティングシステム６１０の全て又は一部分は、単独で、若しくは他の要素と組み合わせて、本明細書で説明される工程のうちの１つ以上（図３に例解される工程のうちの１つ以上など）を実施し得る、及び／又は実施するための手段であり得る。コンピューティングシステム６１０の全て又は一部分はまた、本明細書で説明及び／若しくは例解される任意の他の工程、方法、又はプロセスを実施し得る、及び／又は実施するための手段であり得る。
【００６０】
コンピューティングシステム６１０は、コンピュータ可読命令を実行することが可能な任意のシングル又はマルチプロセッサコンピューティングデバイス又はシステムを広く表す。コンピューティングシステム６１０の例としては、限定することなく、ワークステーション、ラップトップ、クライアント側端末、サーバ、分散型コンピューティングシステム、手持ち式デバイス、又は任意の他のコンピューティングシステム若しくはデバイスが挙げられる。その最も基本的な構成では、コンピューティングシステム６１０は、少なくとも１つのプロセッサ６１４、及びシステムメモリ６１６を含むことができる。
【００６１】
プロセッサ６１４は概して、データを処理する、又は命令を解釈及び実行することが可能な任意のタイプ又は形態の処理ユニットを表す。ある実施形態において、プロセッサ６１４は、ソフトウェアアプリケーション又はモジュールから命令を受信することができる。これらの命令は、プロセッサ６１４に、本明細書で説明及び／又は例解される例示的な実施形態のうちの１つ以上の機能を実施させることができる。
【００６２】
システムメモリ６１６は概して、データ及び／又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ又は形態の揮発性又は不揮発性記憶デバイス若しくは媒体を表す。システムメモリ６１６の例としては、限定することなく、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、フラッシュメモリ、又は任意の他の好適なメモリデバイスが挙げられる。必須ではないが、ある実施形態において、コンピューティングシステム６１０は、揮発性メモリユニット（例えば、システムメモリ６１６など）、及び不揮発性記憶デバイス（例えば、以下で詳細に説明されるような主要記憶デバイス６３２など）の両方を含むことができる。一実施例において、図１のモジュール１０２のうちの１つ以上は、システムメモリ６１６にロードされ得る。
【００６３】
ある実施形態において、例示的なコンピューティングシステム６１０はまた、プロセッサ６１４及びシステムメモリ６１６に加えて、１つ以上の構成要素又は要素を含むことができる。例えば、図６に例解されるように、コンピューティングシステム６１０は、メモリコントローラ６１８、入力／出力（Ｉ／Ｏ）コントローラ６２０、通信インターフェース６２２を含むことができ、これらの各々は、通信基盤６１２を介して相互接続することができる。通信基盤６１２は概して、コンピューティングデバイスの１つ以上の構成要素間の通信を容易にすることが可能な任意のタイプ又は形態の基盤を表す。通信基盤６１２の例としては、限定することなく、通信バス（産業標準アーキテクチャ（ＩＳＡ）、周辺構成要素交互接続（ＰＣＩ）、ＰＣＩエクスプレス（ＰＣＩｅ）、又は同様のバスなど）、及びネットワークが挙げられる。
【００６４】
メモリコントローラ６１８は概して、メモリ若しくはデータを処理する、又はコンピューティングシステム６１０の１つ以上の構成要素間の通信を制御することが可能な任意のタイプ又は形態のデバイスを表す。例えば、ある実施形態において、メモリコントローラ６１８は、通信基盤６１２を介して、プロセッサ６１４、システムメモリ６１６、及びＩ／Ｏコントローラ６２０間の通信を制御することができる。
【００６５】
Ｉ／Ｏコントローラ６２０は概して、コンピューティングデバイスの入力及び出力機能を調整及び／又は制御することが可能な任意のタイプ又は形態のモジュールを表す。例えば、ある実施形態において、Ｉ／Ｏコントローラ６２０は、プロセッサ６１４、システムメモリ６１６、通信インターフェース６２２、ディスプレイアダプタ６２６、入力インターフェース６３０、及び記憶インターフェース６３４などのコンピューティングシステム６１０の１つ以上の要素間のデータの転送を制御する又は容易にすることができる。
【００６６】
通信インターフェース６２２は、例示的なコンピューティングシステム６１０と１つ以上の追加のデバイスとの間の通信を容易にすることが可能な任意のタイプ又は形態の通信デバイス又はアダプタを広く表す。例えば、ある実施形態において、通信インターフェース６２２は、コンピューティングシステム６１０と、追加のコンピューティングシステムを含む私的又は公的ネットワークとの間の通信を容易にすることができる。通信インターフェース６２２の例としては、限定することなく、有線ネットワークインターフェース（ネットワークインターフェースカードなど）、無線ネットワークインターフェース（無線ネットワークインターフェースカードなど）、モデム、及び任意の他の好適なインターフェースが挙げられる。少なくとも１つの実施形態において、通信インターフェース６２２は、インターネットなどのネットワークへの直接リンクを介してリモートサーバへの直接接続を提供することができる。通信インターフェース６２２はまた、例えば、ローカルエリアネットワーク（イーサネットネットワークなど（「イーサネット」は登録商標、以下同じ））、パーソナルエリアネットワーク、電話若しくはケーブルネットワーク、セルラ電話接続、衛星データ接続、又は任意の他の好適な接続を介するかかる接続を間接的に提供することができる。
【００６７】
ある実施形態において、通信インターフェース６２２はまた、外部バス又は通信チャネルを介して、コンピューティングシステム６１０と１つ以上の追加のネットワーク又は記憶デバイスとの間の通信を容易にするように構成されるホストアダプタを表し得る。コンピュータ可読記憶媒体の例としては、限定することなく、Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ（ＳＣＳＩ）ホストアダプタ、Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ（ＵＳＢ）ホストアダプタ、Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ（ＩＥＥＥ）１３９４ホストアダプタ、Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ（ＡＴＡ）、Ｐａｒａｌｌｅｌ  ＡＴＡ（ＰＡＴＡ）、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、及びＥｘｔｅｒｎａｌ  ＳＡＴＡ（ｅＳＡＴＡ）ホストアダプタ、ファイバチャネルインターフェースアダプタ、イーサネットアダプタ等が挙げられる。通信インターフェース６２２はまた、コンピューティングシステム６１０が、分散型又はリモートコンピューティングに関与することを可能にすることができる。例えば、通信インターフェース６２２は、リモートデバイスから命令する、又は実行のためにリモートデバイスに命令を送信することができる。
【００６８】
図６に例解されるように、コンピューティングシステム６１０はまた、ディスプレイアダプタ６２６を介して通信基盤６１２に連結される少なくとも１つのディスプレイデバイス６２４を含むことができる。ディスプレイデバイス６２４は概して、ディスプレイアダプタ６２６によって転送される情報を視覚的に表示することが可能な任意のタイプ又は形態のデバイスを表す。同様に、ディスプレイアダプタ６２６は概して、ディスプレイデバイス６２４上に表示するために、通信基盤６１２から（又は当該技術分野において既知であるようにフレームバッファから）グラフィックス、テキスト、及び他のデータを転送するように構成される、任意のタイプ又は形態のデバイスを表す。
【００６９】
図６に例解されるように、例示的なコンピューティングシステム６１０はまた、入力インターフェース６３０を介して通信基盤６１２に連結される少なくとも１つの入力デバイス６２８を含むことができる。入力デバイス６２８は概して、コンピュータ又は人間のいずれかが生成した入力を、例示的なコンピューティングシステム６１０に提供することが可能な任意のタイプ又は形態の入力デバイスを表す。入力デバイス６２８の例としては、限定することなく、キーボード、ポインティングデバイス、音声認識デバイス、又は任意の他の入力デバイスが挙げられる。
【００７０】
図６に例解されるように、例示的なコンピューティングシステム６１０はまた、記憶インターフェース６３４を介して通信基盤６１２に連結される主要記憶デバイス６３２及びバックアップ記憶デバイス６３３を含むことができる。記憶デバイス６３２及び６３３は概して、データ及び／又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ又は形態の記憶デバイス又は媒体を表す。例えば、記憶デバイス６３２及び６３３は、磁気ディスクドライブ（例えば、いわゆるハードドライブ）、ソリッドステートドライブ、フロッピーディスクドライブ（「フロッピー」は登録商標、以下同じ）、磁気テープドライブ、光ディスクドライブ、フラッシュドライブなどであり得る。記憶インターフェース６３４は概して、記憶デバイス６３２及び６３３と、コンピューティングシステム６１０の他の構成要素との間でデータを転送するための任意のタイプ又は形態のインターフェース又はデバイスを表す。
【００７１】
ある実施形態において、記憶デバイス６３２及び６３３は、コンピュータソフトウェア、データ、又は他のコンピュータ可読情報を記憶するように構成される取り外し可能な記憶ユニットから読み取る、及び／又はそれに書き込むように構成され得る。好適な取り外し可能な記憶ユニットの例としては、限定することなく、フロッピーディスク、磁気テープ、光ディスク、フラッシュメモリデバイスなどが挙げられる。記憶デバイス６３２及び６３３はまた、コンピュータソフトウェア、データ、又は他のコンピュータ可読命令が、コンピューティングシステム６１０にロードされることを可能にするための他の同様の構造又はデバイスを含むことができる。例えば、記憶デバイス６３２及び６３３は、ソフトウェア、データ、又は他のコンピュータ可読情報を読み取る、及び書き込むように構成され得る。記憶デバイス６３２及び６３３はまた、コンピューティングシステム６１０の一部であってもよく、又は他のインターフェースシステムを通じてアクセスされる別個のデバイスであってもよい。
【００７２】
多くの他のデバイス又はサブシステムが、コンピューティングシステム６１０に接続され得る。反対に、図６に例解される構成要素及びデバイスの全てが、本明細書で説明及び／又は例解される実施形態を実践するために存在する必要があるわけではない。上で言及されるデバイス及びサブシステムはまた、図６に示されるものと異なる方法で相互接続されてもよい。コンピューティングシステム６１０はまた、任意の数のソフトウェア、ファームウェア、及び／又はハードウェア構成を採用することができる。例えば、本明細書で開示される例示的な実施形態のうちの１つ以上は、コンピュータ可読記憶媒体上に、コンピュータプログラム（コンピュータソフトウェア、ソフトウェアアプリケーション、コンピュータ可読命令、又はコンピュータ制御論理とも称される）としてコード化されてもよい。「コンピュータ可読記憶媒体」という語句は概して、コンピュータ可読命令を記憶又は担持することが可能な任意の形態のデバイス、キャリア、又は媒体を指す。コンピュータ可読−記憶媒体の例としては、限定することなく、搬送波などの伝送型媒体、並びに磁気記憶媒体（例えば、ハードディスクドライブ及びフロッピーディスク）、光学記憶媒体（例えば、コンパクトディスク（ＣＤ）又はデジタルビデオディスク（ＤＶＤ））、電子記憶媒体（例えば、ソリッドステートドライブ及びフラッシュメディア）、及び他の分散システムなどの非一時型媒体が挙げられる。
【００７３】
コンピュータプログラムを含むコンピュータ可読記憶媒体は、コンピューティングシステム６１０にロードされてもよい。次いで、コンピュータ可読記憶媒体上に記憶されるコンピュータプログラムの全て又は一部分は、システムメモリ６１６、並びに／又は記憶デバイス６３２及び６３３の種々の部分に記憶されてもよい。プロセッサ６１４によって実行される時、コンピューティングシステム６１０にロードされるコンピュータプログラムは、プロセッサ６１４に、本明細書で説明及び／若しくは例解される例示的な実施形態のうちの１つ以上の機能を実施させ得る、並びに／又は実施するための手段であり得る。更に、又は代替的に、本明細書で説明及び／又は例解される例示的な実施形態のうちの１つ以上は、ファームウェア及び／又はハードウェアに実装されてもよい。例えば、コンピューティングシステム６１０は、本明細書に開示される例示的な実施形態のうちの１つ以上を実装するように適合された特定用途向け集積回路（ＡＳＩＣ）として構成されてもよい。
【００７４】
図７は、クライアントシステム７１０、７２０、及び７３０、並びにサーバ７４０及び７４５が、ネットワーク７５０に連結され得る、例示的なネットワークアーキテクチャ７００のブロック図である。上で詳述されるように、ネットワークアーキテクチャ７００の全て又は一部分は、単独で、若しくは他の要素と組み合わせて、本明細書で開示される工程のうちの１つ以上（図３に例解される工程のうちの１つ以上など）を実施し得る、及び／又は実施するための手段であり得る。ネットワークアーキテクチャ７００の全て又は一部分はまた、本開示に記載される他の工程及び特性を実施するために使用され得る、並びに／又はそれらを実施するための手段であり得る。
【００７５】
クライアントシステム７１０、７２０、及び７３０は概して、図６の例示的なコンピューティングシステム６１０などの任意のタイプ又は形態のコンピューティングデバイス又はシステムを表す。同様に、サーバ７４０及び７４５は概して、種々のデータベースサービスを提供する、及び／又はあるソフトウェアアプリケーションを実行するように構成される、アプリケーションサーバ若しくはデータベースサーバなどのコンピューティングデバイス又はシステムを表す。ネットワーク７５０は概して、イントラネット、ＷＡＮ、ＬＡＮ、ＰＡＮ、又はインターネットを含む、任意の電気通信又はコンピュータネットワークを表す。一実施例において、クライアントシステム７１０、７２０、及び／若しくは７３０、並びに／又はサーバ７４０及び／若しくは７４５は、図１からのシステム１００の全て又は一部分を含むことができる。
【００７６】
図７に例解されるように、１つ以上の記憶デバイス７６０（１）〜（Ｎ）は、サーバ７４０に直接的に取設され得る。同様に、１つ以上の記憶デバイス７７０（１）〜（Ｎ）は、サーバ７４５に直接的に取設され得る。記憶デバイス７６０（１）〜（Ｎ）及び記憶デバイス７７０（１）〜（Ｎ）は概して、データ及び／又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ又は形態の記憶デバイス又は媒体を表す。ある実施形態において、記憶デバイス７６０（１）〜（Ｎ）及び記憶デバイス７７０（１）〜（Ｎ）は、ネットワークファイルシステム（ＮＦＳ）、サーバメッセージブロック（ＳＭＢ）、又は共通インターネットファイルシステム（ＣＩＦＳ）などの種々のプロトコルを使用して、サーバ７４０及び７４５と通信するように構成される、ネットワーク取設記憶（ＮＡＳ）デバイスを表し得る。
【００７７】
サーバ７４０及び７４５はまた、記憶エリアネットワーク（ＳＡＮ）ファブリック７８０に接続されてもよい。ＳＡＮファブリック７８０は概して、複数の記憶デバイス間の通信を容易にすることが可能な任意のタイプ又は形態のコンピュータネットワーク又はアーキテクチャを表す。ＳＡＮファブリック７８０は、サーバ７４０及び７４５と、複数の記憶デバイス７９０（１）〜（Ｎ）及び／又は知的記憶アレイ７９５との間の通信を容易にすることができる。ＳＡＮファブリック７８０はまた、デバイス７９０（１）〜（Ｎ）及びアレイ７９５が、クライアントシステム７１０、７２０、及び７３０にローカルで取設されたデバイスとして現れるような様態で、ネットワーク７５０、並びにサーバ７４０及び７４５を介して、クライアントシステム７１０、７２０、及び７３０と、記憶デバイス７９０（１）〜（Ｎ）及び／又は知的記憶アレイ７９５との間の通信を容易にすることができる。記憶デバイス７６０（１）〜（Ｎ）及び記憶デバイス７７０（１）〜（Ｎ）と同様に、記憶デバイス７９０（１）〜（Ｎ）及び知的記憶アレイ７９５は概して、データ及び／又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ又は形態の記憶デバイス又は媒体を表す。
【００７８】
ある実施形態において、かつ図６の例示的なコンピューティングシステム６１０を参照すると、図６の通信インターフェース６２２などの通信インターフェースは、各クライアントシステム７１０、７２０、及び７３０、並びにネットワーク７５０間の接続性を提供するために使用することができる。クライアントシステム７１０、７２０、及び７３０は、例えば、ウェブブラウザ又は他のクライアントソフトウェアを使用して、サーバ７４０又は７４５上の情報にアクセスすることが可能であり得る。かかるソフトウェアは、クライアントシステム７１０、７２０、及び７３０が、サーバ７４０、サーバ７４５、記憶デバイス７６０（１）〜（Ｎ）、記憶デバイス７７０（１）〜（Ｎ）、記憶デバイス７９０（１）〜（Ｎ）、又は知的記憶アレイ７９５によってホストされるデータにアクセスすることを可能にすることができる。図７は、データを交換するためのネットワーク（インターネットなど）の使用を描写するが、本明細書に説明及び／又は例解される実施形態は、インターネット又は任意の特定のネットワークに基づく環境に限定されない。
【００７９】
少なくとも１つの実施形態において、本明細書に開示される例示的な実施形態のうちの１つ以上の全て又は一部分は、コンピュータプログラムとしてコード化され得、サーバ７４０、サーバ７４５、記憶デバイス７６０（１）〜（Ｎ）、記憶デバイス７７０（１）〜（Ｎ）、記憶デバイス７９０（１）〜（Ｎ）、知的記憶アレイ７９５、又はこれらの任意の組み合わせにロードされ、これらによって実行され得る。本明細書に開示される少なくとも１つの例示的な実施形態の全て又は一部分は、コンピュータプログラムとしてコード化され、サーバ７４０に記憶され、サーバ７４５によって実行され、ネットワーク７５０にわたってクライアントシステム７１０、７２０、及び７３０に分散され得る。
【００８０】
上で詳述されるように、コンピューティングシステム６１０及び／又はネットワークアーキテクチャ７００の１つ以上の構成要素は、単独で、又は他の要素と組み合わせて、実行時のアプリケーションメソッドを置き換えるための例示的な方法の１つ以上の工程を実施する、及び／又は実施するための手段であり得る。
【００８１】
先述の開示は、具体的なのブロック図、フローチャート、及び実施例を使用して種々の実施形態を記載するが、本明細書に説明及び／又は例解される各ブロック図の構成要素、フローチャートの工程、動作、及び／又は構成要素は、個別に及び／又は集合的に、広範なハードウェア、ソフトウェア、又はファームウェア（又はそれらの任意の組み合わせ）構成を使用して、実装され得る。加えて、他の構成要素内に含まれる構成要素のあらゆる開示は、多くの他のアーキテクチャが同じ機能を達成するために実装され得るため、本質的に例示的であると考慮されるべきである。
【００８２】
一部の実施例において、図１の例示的なシステム１００の全て又は一部分は、クラウドコンピューティング又はネットワークに基づく環境の部分を表し得る。クラウドコンピューティング環境は、インターネットを介して種々のサービス及びアプリケーションを提供することができる。これらのクラウドに基づくサービス（例えば、サービスとしてのソフトウェア、サービスとしてのプラットフォーム、サービスとしての基盤など）は、ウェブブラウザ又は他のリモートインターフェースを通じてアクセス可能であり得る。本明細書で説明される種々の機能は、リモートデスクトップ環境又は任意の他のクラウドに基づくコンピューティング環境を通して提供されてもよい。
【００８３】
種々の実施形態において、図１の例示的なシステム１００の全て又は一部分は、クラウドに基づくコンピューティング環境内のマルチテナンシーを容易にすることができる。換言すると、本明細書で説明されるソフトウェアモジュールは、本明細書で説明される機能のうちの１つ以上に対するマルチテナンシーを容易にするように、コンピューティングシステム（例えば、サーバ）を構成することができる。例えば、本明細書で説明されるソフトウェアモジュールのうちの１つ以上は、２つ以上のクライアント（例えば、顧客）が、サーバ上で実行しているアプリケーションを共有することを可能にするように、サーバをプログラムすることができる。このようにプログラムされたサーバは、複数の顧客（即ち、テナント）の間で、アプリケーション、オペレーティングシステム、処理システム、及び／又は記憶システムを共有することができる。本明細書で説明されるモジュールのうちの１つ以上はまた、１つの顧客が別の顧客のデータ及び／又は構成情報にアクセスすることができないように、各顧客に対して、マルチテナントアプリケーションのデータ及び／又は構成情報を分割することができる。
【００８４】
種々の実施形態によると、図１の例示的なシステム１００の全て又は一部分は、仮想環境内で実装することができる。例えば、本明細書で説明されるモジュール及び／又はデータは、仮想機械内に存在し得る、及び／又はそこで実行し得る。本明細書で使用される際、「仮想機械」という語句は、概して、仮想機械マネージャ（例えば、ハイパーバイザ）によって、コンピューティングハードウェアから抽出される任意のオペレーティングシステム環境を指す。更に、又は代替的に、本明細書で説明されるモジュール及び／又はデータは、仮想化層内に存在し得る、及び／又はそこで実行し得る。本明細書で使用される際、「仮想化層」という語句は、概して、オペレーティングシステム環境を覆う、及び／又はそこから抽出される任意のデータ層及び／又はアプリケーション層を指す。仮想化層は、根底にある基本オペレーティングシステムの一部であるかのように仮想化層を提示する、ソフトウェア仮想化ソリューション（例えば、ファイルシステムフィルタ）によって管理され得る。例えば、ソフトウェア仮想化ソリューションは、最初に基本ファイルシステム及び／又はレジストリ内の位置に方向付けられる呼び出しを、仮想化層内の位置にリダイレクトし得る。
【００８５】
一部の実施例において、図１の例示的なシステム１００の全て又は一部分は、モバイルコンピューティング環境の部分を表し得る。モバイルコンピューティング環境は、モバイル電話、タブレットコンピュータ、ｅブックリーダ、個人用デジタル補助装置、ウェアラブルコンピューティングデバイス（例えば、ヘッドマウントディスプレイを伴うコンピューティングデバイス、スマートウォッチなど）等を含む、広範なモバイルコンピューティングデバイスによって実装され得る。一部の実施例において、モバイルコンピューティング環境は、例えば、バッテリ電力への依存、任意の所与の時間での１つのみのフォアグラウンドアプリケーションの提示、リモート管理特性、タッチスクリーン特性、位置及び移動データ（例えば、グローバルポジショニングシステム、ジャイロスコープ、加速度計などによって提供される）、システムレベルの構成への修正を制限する、及び／又は第３者のソフトウェアが他のアプリケーションの挙動を検査する能力を限定する、アプリケーションのインストールを制限するように（例えば、認可されたアプリケーションストアからのみ生じるように）制御する等、制限されたプラットフォームを含む、１つ以上の個別の特性を有することができる。本明細書で説明される種々の機能は、モバイルコンピューティング環境に対して提供され得る、及び／又はモバイルコンピューティング環境と相互作用し得る。
【００８６】
加えて、図１の例示的なシステム１００の全て又は一部分は、情報管理のための１つ以上のシステムの部分を表し得る、それと相互作用し得る、それによって生成されるデータを消費し得る、及び／又はそれによって消費されるデータを生成し得る。本明細書で使用される際、「情報管理」という語句は、データの保護、組織化、及び／又は記憶を指し得る。情報管理のためのシステムの例としては、限定することなく、記憶システム、バックアップシステム、アーカイバルシステム、複製システム、高可用性システム、データ検索システム、仮想化システム等が挙げられ得る。
【００８７】
一部の実施形態において、図１の例示的なシステム１００の全て又は一部分は、情報セキュリティのための１つ以上のシステムの部分を表し得る、それによって保護されるデータを生成し得る、及び／又はそれと通信し得る。本明細書で使用される際、「情報セキュリティ」という語句は、保護されたデータへのアクセスの制御を指し得る。情報セキュリティのためのシステムの例としては、限定することなく、管理されたセキュリティサービスを提供するシステム、データ損失防止システム、同一性認証システム、アクセス制御システム、暗号化システム、ポリシーコンプライアンスシステム、侵入検出及び防止システム、電子情報開示システム等が挙げられ得る。
【００８８】
一部の実施例によると、図１の例示的なシステム１００の全て又は一部分は、エンドポイントセキュリティのための１つ以上のシステムの部分を表し得る、それと通信し得る、及び／又はそれから保護を受け得る。本明細書で使用される際、「エンドポイントセキュリティ」という語句は、不正及び／若しくは違法な使用、アクセス、並びに／又は制御からのエンドポイントシステムの保護を指し得る。エンドポイント保護のためのシステムの例としては、限定することなく、アンチマルウェアシステム、ユーザ認証システム、暗号化システム、プライバシーシステム、スパムフィルタリングサービス等が挙げられ得る。
【００８９】
本明細書で説明及び／又は例解されるプロセスパラメータ及び工程の順序は、例として与えられるに過ぎず、所望に応じて変更することができる。例えば、本明細書で例解及び／又は説明される工程は、特定の順序で示される又は考察され得るが、これらの工程は、必ずしも例解又は考察される順序で実施される必要はない。本明細書で説明及び／又は例解される種々の例示的な方法はまた、本明細書で説明又は例解される工程のうちの１つ以上を省略し得るか、又は開示されるものに加えて、追加の工程を含み得る。
【００９０】
種々の実施形態が、完全に機能的なコンピューティングシステムの文脈において、本明細書で説明及び／又は例解されているが、これらの例示的な実施形態のうちの１つ以上は、実際に分散を実行するために使用される特定のタイプのコンピュータ可読記憶媒体に関わらず、様々な形態のプログラム製品として分散されてもよい。本明細書で開示される実施形態はまた、あるタスクを実施するソフトウェアモジュールを使用して実装されてもよい。これらのソフトウェアモジュールは、スクリプト、バッチ、又はコンピュータ可読記憶媒体上、若しくはコンピューティングシステム内に記憶することができる、他の実行可能なファイルを含んでもよい。一部の実施形態において、これらのソフトウェアモジュールは、本明細書で開示される例示的な実施形態のうちの１つ以上を実施するように、コンピューティングシステムを構成してもよい。
【００９１】
加えて、本明細書で説明されるモジュールのうちの１つ以上は、データ、物理的デバイス、及び／又は物理的デバイスの表示を１つのものから別のものへ変換してもよい。例えば、本明細書で列挙されるモジュールのうちの１つ以上は、変換されるべきアプリケーションを受信することができる、元のメソッドをラッパーメソッドで置き換えることによってアプリケーションを変換することができる、変換の結果を使用して元のメソッドを安全に実行することができる、元のメソッドの安全な実行の更なる結果をディスプレイデバイスに出力することができる、及び元のメソッドの安全な実行の追加の結果を記憶デバイスに記憶することができる。更に、又は代替的に、本明細書で列挙されるモジュールのうちの１つ以上は、コンピューティングデバイス上で実行すること、コンピューティングデバイス上にデータを記憶すること、及び／又はそうでなければコンピューティングデバイスと相互作用することによって、プロセッサ、揮発性メモリ、不揮発性メモリ、及び／又は物理的コンピューティングデバイスの任意の他の部分を、１つの形態から別のものへ変換することができる。
【００９２】
前述の説明は、当業者が、本明細書で開示される例示的な実施形態の種々の態様を最良に利用することを可能にするために提供されている。この例示的な説明は、包括的であること、又は開示されるいずれの正確な形態にも限定されることを意図するものではない。本開示の趣旨及び範囲から逸脱することなく、多くの修正形態及び変形形態が可能である。本明細書に開示される実施形態は、あらゆる点で例解的であり、限定的ではないと見なされるべきである。本開示の範囲を決定する際に添付の特許請求の範囲及びその均等物を参照するべきである。
【００９３】
別途記載のない限り、本明細書及び特許請求の範囲で使用される際、「ａ」又は「ａｎ」という用語は、「〜のうちの少なくとも１つ」を意味するとして解釈されるものとする。加えて、使用しやすくするために、本明細書及び特許請求の範囲で使用される際、「含む（including）」及び「有する（having）」という語は、「含む（comprising）」という語と同義的である。
【図１】
2016515748.tif 000003
【図２】
2016515748.tif 000004
【図３】
2016515748.tif 000005
【図４】
2016515748.tif 000006
【図５】
2016515748.tif 000007
【図６】
2016515748.tif 000008
【図７】
2016515748.tif 000009
【手続補正書】
【提出日】平成27年10月16日(2015.10.16)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
実行時のアプリケーションメソッドを置き換えるためのコンピュータ実装方法であって、前記方法の少なくとも一部分が、少なくとも１つのプロセッサを含むコンピューティングデバイスによって実施され、前記方法が、
ソースメソッドで実行時に置き換えるように、標的メソッドを含む実行時のクラスベースのオブジェクト指向のアプリケーションを識別することと、
前記標的メソッドを記載し、前記アプリケーション内の標的クラスによって参照される、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定することであって、前記標的メソッドデータ構造が、前記標的メソッドのメソッドコードへの標的コードポインタを含む、位置決定することと、
前記ソースメソッドを記載する実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定することであって、前記ソースメソッドデータ構造が、前記ソースメソッドのメソッドコードへのソースコードポインタを含む、判定することと、
前記ソースメソッドデータ構造の少なくとも一部分を、前記ソースメソッドデータ構造の前記ソースアドレスから、前記標的メソッドデータ構造の前記標的アドレスにコピーし、それにより、前記標的コードポインタを前記ソースコードポインタで置き換えることによって、前記標的クラスに、前記標的メソッドの代わりに、前記ソースメソッドを参照させるように、実行時の前記アプリケーションを修正することと、を含む、方法。
【請求項２】
前記ソースメソッドを記載する前記ソースメソッドデータ構造を参照するソースクラスを識別することと、
前記ソースクラスが、私的な非ネイティブのプレースホルダメソッドを記載する、プレースホルダメソッドデータ構造を参照すると判定することと、
前記ソースメソッドデータ構造の前記一部分を、前記標的アドレスにコピーする前に、前記標的メソッドデータ構造の少なくとも一部分を、前記標的メソッドデータ構造の前記標的アドレスから、前記プレースホルダメソッドデータ構造のプレースホルダアドレスにコピーし、それにより、前記ソースメソッドにおける使用のために、前記標的コードポインタを保存することと、を更に含む、請求項１に記載のコンピュータ実装方法。
【請求項３】
前記ソースメソッドが、前記プレースホルダメソッドを呼び出すことによって、前記標的メソッドを実行させるための少なくとも１つの命令を含む、請求項２に記載のコンピュータ実装方法。
【請求項４】
前記標的メソッドが、信頼できないものであり、
前記ソースメソッドが、前記標的メソッドの安全でない使用を防止するように、少なくとも１つの命令を伴うラッパーメソッドを含む、請求項３に記載のコンピュータ実装方法。
【請求項５】
前記標的クラスが初期化されていないと判定することと、
前記ソースメソッドデータ構造の前記一部分をコピーする前に、前記標的クラスを初期化することと、を更に含む、請求項１に記載のコンピュータ実装方法。
【請求項６】
前記ソースメソッドデータ構造をコピーする前に、前記標的クラスにおいて前記標的メソッドを解決することを更に含む、請求項１に記載のコンピュータ実装方法。
【請求項７】
前記標的クラスにおいて前記標的メソッドを解決することが、
前記標的クラスの参照テーブルのための前記標的メソッドのインデックスを識別することと、
前記標的メソッドデータ構造の前記標的アドレスを、前記インデックスにおいて、解決されたメソッドテーブルに記憶することと、を含む、請求項６に記載のコンピュータ実装方法。
【請求項８】
前記ソースメソッドの名前が、前記標的メソッドの名前に合致し、
前記ソースメソッドのパラメータセットが、前記標的メソッドのパラメータセットに合致する、請求項１に記載のコンピュータ実装方法。
【請求項９】
前記標的クラスに、前記標的メソッドの代わりに、前記ソースメソッドを参照させるように、実行時の前記アプリケーションを修正することは、前記ソースクラスを再コンパイルすることなく、かつ前記標的クラスを再コンパイルすることなく、実行時の前記アプリケーションを修正することを含む、請求項１に記載のコンピュータ実装方法。
【請求項１０】
実行時のアプリケーションメソッドを置き換えるためのシステムであって、
実行時にソースメソッドで置き換えるように、標的メソッドを含む、実行時のクラスベースのオブジェクト指向のアプリケーションを識別する、識別モジュールと、
前記標的メソッドを記載し、前記アプリケーション内の標的クラスによって参照される、実行時のメモリ内の標的メソッドデータ構造の標的アドレスを位置決定する、位置決定モジュールであって、前記標的メソッドデータ構造が、前記標的メソッドのメソッドコードへの標的コードポインタを含む、位置決定モジュールと、
前記ソースメソッドを記載する実行時のメモリ内のソースメソッドデータ構造のソースアドレスを判定する、判定モジュールであって、前記ソースメソッドデータ構造が、前記ソースメソッドのメソッドコードへのソースコードポインタを含む、判定モジュールと、
前記ソースメソッドデータ構造の少なくとも一部分を、前記ソースメソッドデータ構造の前記ソースアドレスから、前記標的メソッドデータ構造の前記標的アドレスにコピーし、それにより、前記標的コードポインタを前記ソースコードポインタで置き換えることによって、前記標的クラスに、前記標的メソッドの代わりに、前記ソースメソッドを参照させるように、実行時の前記アプリケーションを修正する、修正モジュールと、
前記識別モジュール、前記位置決定モジュール、前記判定モジュール、及び前記修正モジュールを実行させるように構成される、少なくとも１つのプロセッサと、を含む、システム。
【請求項１１】
前記修正モジュールがまた、
前記ソースメソッドを記載する、前記ソースメソッドデータ構造を参照する、ソースクラスを識別し、
前記ソースクラスが、私的な非ネイティブのプレースホルダメソッドを記載する、プレースホルダメソッドデータ構造を参照すると判定し、
前記ソースメソッドデータ構造の前記一部分を、前記標的アドレスにコピーする前に、前記標的メソッドデータ構造の少なくとも一部分を、前記標的メソッドデータ構造の前記標的アドレスから、前記プレースホルダメソッドデータ構造のプレースホルダアドレスにコピーし、それにより、前記ソースメソッドにおける使用のために、前記標的コードポインタを保存する、請求項１０に記載のシステム。
【請求項１２】
前記ソースメソッドが、前記プレースホルダメソッドを呼び出すことによって、前記標的メソッドを実行させるように、少なくとも１つの命令を含む、請求項１１に記載のシステム。
【請求項１３】
前記標的メソッドが、信頼できないものであり、
前記ソースメソッドが、前記標的メソッドの安全でない使用を防止するように、少なくとも１つの命令を伴うラッパーメソッドを含む、請求項３に記載のコンピュータ実装方法。
【請求項１４】
前記位置決定モジュールがまた、
前記標的クラスが初期化されていないと判定し、
前記ソースメソッドデータ構造の前記一部分をコピーする前に、前記標的クラスを初期化する、請求項１０に記載のシステム。
【請求項１５】
前記位置決定モジュールがまた、前記ソースメソッドデータ構造をコピーする前に、前記標的クラスにおける前記標的メソッドを解決する、請求項１０に記載のシステム。
【国際調査報告】
2016515748.tif 000010
2016515748.tif 000011
2016515748.tif 000012