(57)【特許請求の範囲】
【請求項１】
少なくとも一つのプロセッサーにより実行される方法であって：
ソース側命令セット・アーキテクチャ（ＩＳＡ）を有するアプリケーションをロードするステップ；
ソース側ＩＳＡライブラリーのライブラリー・サービスについての呼び出しが前記ソース側ＩＳＡライブラリーに到達しないようにするために、前記呼び出しを第１のライブラリーへとリダイレクトするステップ；
前記呼び出しを、前記第１のライブラリーから、前記第１のライブラリーと同一の名前が付けられているターゲット側ＩＳＡライブラリーのライブラリー・サービスへと向けるステップ；および、
前記ターゲット側ＩＳＡライブラリーを介して前記アプリケーションをエミュレート実行するステップ；を含む、方法。
【請求項２】
前記アプリケーションに関する未定義のシンボルをアドレス解決するステップを含む、請求項１記載の方法。
【請求項３】
前記呼び出しを前記第１のライブラリーへとリダイレクトすることは、前記アプリケーション専用に設けられたエミュレータからの呼び出しをリダイレクトすることを含む、請求項１記載の方法。
【請求項４】
前記呼び出しを前記第１のライブラリーへとリダイレクトすることは、前記アプリケーション専用に設けられたエミュレータであって、汎用のシステム・ローダーではないエミュレータからの呼び出しをリダイレクトすることを含む、請求項１記載の方法。
【請求項５】
前記アプリケーションと関連した追加的なライブラリー・サービスの追加的な呼び出しを提供するステップであって、前記追加的な呼び出しは、プロシージャ・リンキング・テーブル（ＰＬＴ）内に含まれているコードへと向けられている、ステップ；および、
前記追加的な呼び出しを、直接実行可能な追加的呼び出しで置き換えるステップであって、前記直接実行可能な追加的呼び出しは、前記ＰＬＴを迂回しながら前記ソース側ＩＳＡライブラリーおよび追加的なソース側ＩＳＡライブラリーの一方に対して直接的に実行される追加的呼び出しである、ステップ；を含む、請求項１記載の方法。
【請求項６】
前記追加的な呼び出しに関するアドレスを識別するステップ；および、
前記追加的な呼び出しに関する前記アドレスの前記識別に基づいて、前記追加的な呼び出しが、前記ＰＬＴ内に含まれているコードへと向けられていると判定するステップ；を含む、請求項５記載の方法。
【請求項７】
前記アプリケーションと関連した追加的なライブラリー・サービスの追加的な呼び出しを提供するステップであって、前記追加的な呼び出しは、プロシージャのアドレス位置を特定するように構成されたコードへと向けられている、ステップ；および、
前記追加的な呼び出しを、直接実行可能な追加的呼び出しに置き換えるステップであって、前記直接実行可能な追加的呼び出しは、前記プロシージャのアドレス位置を特定するように構成されたコードを迂回しながら前記ソース側ＩＳＡライブラリーおよび追加的なソース側ＩＳＡライブラリーの一方に対して直接的に実行される追加的呼び出しである、ステップ；を含む、請求項１記載の方法。
【請求項８】
請求項１乃至請求項７のいずれか一項に記載された方法を実行するための手段を具備する装置。
【請求項９】
請求項１乃至請求項７のいずれか一項に記載された方法をコンピューティング装置に実行させるプログラム。
【請求項１０】
請求項９記載のプログラムを記憶した記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
コンピューティング装置はその命令セット・アーキテクチャ(ISA)によって特徴付けられることが可能である。典型的には、コンピューティング装置はオペレーティング・システム（ＯＳ）サービスを含むことが可能であり、ＯＳサービスはランタイム・ライブラリ（ＬＩＢ）サービスを含むことが可能であり、当該ランタイム・ライブラリ・サービスは、アプリケーション開発者がコンピューティング装置上で動作するアプリケーションを開発するのを助けるためにコンピューティング装置のＩＳＡのために開発されたサービス機能である。アプリケーションがコンピューティング装置用のＩＳＡ以外のＩＳＡに関して書かれている場合、アプリケーションはエミュレーションにより実行されることが必要であろう。具体的には、エミュレーションは、（第２のＩＳＡを使用する）コンピューティング装置のアーキテクチャー上で（第１のＩＳＡのために書かれた）アプリケーションが実行されることを可能にする。アプリケーション内においてＩＳＡに依存した部分は、ソース側ＬＩＢサービスに対する関数呼び出しを含むことが可能であり、当該呼び出し元ＬＩＢサービスは、ターゲット側ＬＩＢサービスを使用することによりエミュレートする必要がある。さらに、アプリケーション内においてＩＳＡに依存した部分はコールバック関数を含むことが可能である（例えば、ＩＳＡに依存するランタイム・ライブラリ（ＬＩＢ）からエミュレーションにより実行されているアプリケーションに対してコールバックを行う関数、またはエミュレートされることを必要とする呼び出し元ＬＩＢサービスに対してコールバックを実行する関数など）。そのようなコールバック呼び出しの必要性はランタイム実行時まで発見されない可能性があるので、２種類のＩＳＡ間を橋渡し（ブリッジング）しようとする際に、従来型のアプローチ（例えばバイナリ変換）は有効ではなくなってしまう。
【０００２】
上記のようなアプリケーションを実行するために、そのアプリケーションはリンクされることが必要となる場合があり得る。リンク処理は相互接続参照（例えばアプリケーションによって呼び出されたライブラリ・ルーチン間の相互接続）を解決することにより、コンパイル済みモジュール（例えばライブラリ）から実行可能プログラムを生成する。このリンク解決処理（本明細書中では時として「ローディング処理」とも呼ばれる）は、バイナリ変換システム（ＢＴ）によって動的に（ダイナミックに）実行されることが可能である。動的リンキングは、プログラムが実行を開始するまでリンク解決処理プロセスにおける多くの部分の実行を延期する。動的リンカーは、実行可能プログラムが実行される際に、実行可能プログラムのために共有ライブラリをロードし、リンクするＯＳ機能の一部とすることが可能である。本発明に係る技術内容は、アプリケーションからのライブラリー呼び出し先をダイナミック・リンクされるライブラリ・モジュールへと向けるために、プロシージャ・リンク・テーブル（ＰＬＴ）、グローバル・オフセット・テーブル（ＧＯＴ）および間接的ジャンプ命令を使用することが可能である。
【０００３】
本発明に係る実施例は、添付図面によって図示されるように、本発明の技術的範囲を制限する趣旨ではなく典型的な実施例を単に例示するという趣旨で記述され、添付図面中において、同様の参照符号は同様の構成要素を表わす。
【図面の簡単な説明】
【０００４】
【図１】本発明に係る実施例に従ってＩＳＡ間を橋渡し（ブリッジング）する処理機能を含むコンピューティング装置を示す図。
【図２】図１に示すＩＳＡ間ブリッジング層をより詳細に示す図。
【図３】本発明に係る実施例に従い、ソース側ＩＳＡのアプリケーションとターゲット側ＩＳＡのライブラリ・サービスとの間における呼び出しおよびコールバックをブリッジングする方法を示すフロー図。
【図４】本発明に係る実施例に従い、ソース側ＩＳＡのアプリケーションとターゲット側ＩＳＡのライブラリ・サービスとの間における呼び出しおよびコールバックをブリッジングする方法を示すフロー図。
【図５】本発明に係る一実施例に従って実施されるＢＴシステムを示す図。
【図６】本発明に係る実施例に従い、動的リンキングの実行を高速化するための方法を示すフロー図。
【図７】本発明に係る実施例に従い、動的リンキングの実行を高速化するための疑似プログラム・コードを示す図。
【発明を実施するための形態】
【０００５】
以下において、本発明に係る様々な処理動作は、本発明に係る例示的な実施例の理解のために非常に有用な方法に従って、多数の離散的な処理動作として順番に後述されるであろう。しかしながら、本明細書中において一連の処理動作が記述される順序は、これら一連の処理動作が必ずしも実行順序に依存したものであると解釈されるべきではない。特に、これら一連の処理動作は、本明細書および添付図面の記載中で提示された順序のとおりに実行されなくてはならない必要性はない。さらに、一連の処理動作を離散的な処理動作として記述していることは処理動作の各々が、必ずしも独立しておよび／または別個の実行主体によって実行される必要があると解釈されるべきではない。同様に、別個のモジュールとしての実行主体および／または機能モジュールに関する記述は、そのような機能モジュールが、別個に設けられおよび／または別個の処理動作を実行する必要があると解釈されるべきではない。本発明に係る様々な実施例中において、添付図面で図示されおよび／または本明細書中で後述される処理動作、実体、データおよび／または機能モジュールは、併合され、さらに小さな構成部分へと分解され、および／または省略されることが可能である。用語「実施例」は本明細書中で繰り返し使用され、当該用語は、一般的な場合には、同一の実施例を指して言うものではないが、場合によっては同一の実施例を指して言うこともあり得る。用語「具備する」、「有する」および「含む」は、文脈上そうではないことが明らかでない限り、互いに同意語である。表記「Ａ／Ｂ」は「ＡあるいはＢ」を意味する。表記「Ａおよび／またはＢ」は、「Ａ」、「Ｂ」または「ＡとＢ」のいずれかを意味する。表記「Ａ、ＢおよびＣの中の少なくとも一つ」は「Ａ」、「Ｂ」、「Ｃ」、「ＡとＢ」、「ＡとＣ」、「ＢとＣ」および「ＡとＢとＣ」を意味する。
【０００６】
本発明に係る様々な実施例は、ソース側アプリケーションおよびソース側エミュレータのためのネスト構造化されたエミュレーション処理を含んでいる。ソース側ＩＳＡライブラリを複製すると、ソース側エミュレータ・ライブラリ呼び出しをターゲット側ライブラリにリダイレクトすることとなるので、ネーティブなエミュレータが第１のＩＳＡと第２のＩＳＡとの間における適切なエミュレーション・チャネルを介して実行されることを強制することが可能となる。本発明に係るその他の実施例は、ＰＬＴコードのエミュレーションを介して処理される代りに、ＰＬＴコードを変換する必要なしに直接呼び出される特定の関数を呼び出すべき旨を決定することにより高速化される動的リンキング技術と関係がある。本発明に係る幾つかの実施例は、ネスト構造化されたエミュレーション技術および高速化された動的リンキング技術の両方の実現に取り組むものであるが、本発明に係るその他の実施例は、ネスト構造化されたエミュレーション技術および高速化された動的リンキング技術のうちの一方を含んでいる。
【０００７】
図１は、一実施例に従い、ＩＳＡ間を橋渡し（ブリッジング）する処理機能を含む（任意付加的にコールバック機能もさらに含む）例示的なコンピューティング装置を示す。コンピューティング装置102は、プロセッサー、メモリ素子配列104を含むことが可能であり、図中に示すように（直接的または間接的に）相互に結合しているＯＳ122、ＩＳＡ間ブリッジング層123、アプリケーション120、グラフィック処理ユニット（ＧＰＵ）106、ディスプレー装置108およびネットワーク・インターフェース110は、当該プロセッサとメモリ素子配列に含まれているか当該プロセッサ及びメモリ素子配列と結合している。ＯＳ122は、サービスのライブラリ124（ライブラリ127およびライブラリ128へと細分されており、包括的にシンボル「Ａ」乃至「Ｈ」を含んでいる）を含むことが可能である。コンピューティング装置102は、アプリケーション120とOS  122との間において任意付加的なミドルウェア121を含むようにすることが可能である。以下においてより詳細に後述するとおり、ＩＳＡ間ブリッジング層123は、様々なランタイム特性およびサービス（例えば、動的なバインディング処理を含むがこれに限定はされない）によって構成されることが可能であり、それによって、（ライブラリ・サービス124を含む）ＯＳ122がソース側ＩＳＡとは異なるターゲット側ＩＳＡにおいて実装されている可能性がある場合であっても、（例えばＩＳＡに依存しないミドルウェア121がさらに使用される場合に）アプリケーション120の全体またはその一部がソース側ＩＳＡにおいて実装されることが可能となる。さらに、アプリケーション120は、ライブラリ・サービス124の使用に関する特性を含んでいるアプリケーション（特に、ソース側ＩＳＡを使用して実装されたアプリケーション部分）とすることが可能であり、当該ライブラリ・サービスの使用に関する特性は、様々な条件の下でのアプリケーション120の様々なコールバック関数125をコールバック呼び出しするライブラリ・サービス124の様々な構成要素（例えば関数）を必要とする。ＩＳＡ間ブリッジング層123はさらに、本明細書中においてプロセス・バーチャル・マシン（ＰＶＭ）とも呼ばれ得る。
【０００８】
コンピューティング装置102はサーバ機器、デスクトップ型コンピュータ、ラップトップ型コンピューター、タブレット型コンピューター、スマートフォン、携帯情報端末、ゲーム機、インターネット・アプライアンス、モバイル・インターネット装置、携帯電話、モバイル・ネットワーク装置、モバイル・コンピューティング・ノードあるいはその他のコンピューティング装置とすることが可能である。プロセッサーとメモリ素子配列104は、広範な種類のプロセッサーとメモリ素子の配列を表す。様々な実行速度および電力消費量を有する単一コア構造またはマルチコア構造のプロセッサーおよび様々なアーキテクチャー（例えば１レベル以上のキャッシュを備えた）および様々なタイプ（例えばダイナミック・ランダム・アクセス・メモリなのか、フラッシュ・メモリなのか等）のメモリを備えたシステム構成を含んでいる。本発明に係る様々な実施例において、ＧＰＵ106は、ビデオ復号化機能および／またはグラフィックス処理機能をＯＳ122に対して提供するように構成されることが可能であり、他方、ディスプレー装置108は、マルチメディア・コンテンツ（例えばＨＤビデオ）をその画面上で描画処理することを可能にするように構成することができる。同様に、GPU  106およびディスプレー装置108は、当該技術分野において周知である広範なタイプのグラフィックス・プロセッサーおよびディスプレイ機能部を表わすように意図される。同様に、ネットワーク134は、当該技術分野において周知である広範なタイプのネットワークを表わすように意図される。ネットワーク134の具体例には、有線接続さされた又は無線のネットワーク、ローカルエリア網や広域網、プライベート網、インターネットを含む公衆網などが含まれ得る。ライブラリ・サービス124の起動手段を定義するアプリケーション・プログラミング・インターフェイス（ＡＰＩ）を除いて、（ライブラリ・サービス124を含む）ＯＳ122は、当該技術分野において周知である広範なタイプのＯＳ構成要素を表わしている。ＯＳ122は、メモリー資源を管理し、タスク実行をスケジューリングする等の機能を実行するように構成されたカーネルおよび様々なデバイス資源を管理するように構成されたデバイス・ドライバのような従来のコンポーネントを含むことが可能である。一実施例では、ＯＳ122は、任意付加的なミドルウェア121によるサポートの下でバーチャル・マシンを含むことが可能である（例えば、アンドロイド（登録商標）アプリケーション・フレームワークによるサポートの下で動作するアンドロイド（登録商標）バーチャル・マシンなど）。ライブラリ・サービス124の起動手段の定義に加えて、アプリケーション120のコールバック関数125を起動する仕組みを実現するために、ライブラリ・サービス124のＡＰＩは、アプリケーション120のコールバック関数125の対応するスタブおよびシグネチャをさらに含むことが可能である。ＯＳ122の具体例には、Windows（登録商標）オペレーティング・システム、Linux（登録商標）、アンドロイド（登録商標）、iOS（登録商標）などが含まれ得る。同様に、任意付加的なミドルウェア121は、広範囲のミドルウェア構成要素を表わすように意図され、ＩＳＡに依存しないミドルウェアを含むが、これに限定はされない。ミドルウ���ア121の具体例には、アンドロイド（登録商標）アプリケーション・フレームワーク、Java（登録商標）、その他のアプリケーション・フレームワークあるいはＩＳＡに依存しない実行環境等が含まれるがこれらだけに限定はされない。同様に、アプリケーション120（コールバック関数125を含む）は広範なタイプのアプリケーションを表わし、パーソナル支援や生産性のためのアプリケーション、ソーシャル・ネットワーキング・アプリケーション、カレンダー機能アプリケーション、文書処理、スプレッド・シート、ツイッター（登録商標）、Facebook（登録商標）、ブラウザなどのアプリケーションを含んでいる。
【０００９】
図１の残りの構成要素は、図２に関する検討に続く以下の記述においてさらに議論される。
【００１０】
図２では、ＩＳＡ間ブリッジング層123は、ＩＳＡ間ブリッジング・ローダー202、ソース側ＩＳＡエミュレータ204およびターゲット側ＩＳＡライブラリー・エミュレータ206（これらは、動的バインディング・サービス機能を含む様々なランタイム特性およびサービス機能を提供するように構成されている）を含むことが可能である。ソース側ＩＳＡエミュレータ204は、ソース側ＩＳＡコンテキスト212およびバイナリ変換エンジン215を含むことが可能である。ソース側ＩＳＡエミュレータ204は、ソース側ＩＳＡコンテキスト212内において、ソース側ＩＳＡアーキテクチャーの実行コンテキストを維持することが可能であり、このような実行コンテキストには、現在実行中の命令を指す命令ポインター（ＩＰ）等が含まれる。バイナリ変換エンジン215は、ソース側のＩＳＡ命令をターゲット側のＩＳＡ命令に変換するように構成されることが可能である。ＬＩＢエミュレータ206は、ターゲット側ＩＳＡ  ＬＩＢコンテキスト222、ゲート224（例えば、プロセッサーによって使用されるデータ構造であって、特権モードで実行されるべき機能へのアクセスを制御するために、あるいはデータ・セグメントや切り替えテーブルなどを変更するなどのために使用されるデータ構造）およびラッパー関数226を含むことが可能である。ＬＩＢエミュレータ206は、ターゲット側ＩＳＡ  ＬＩＢコンテキスト222内においてターゲット側ＩＳＡライブラリー124の実行コンテキストを維持することが可能である。本発明に係る様々な実施例においては、全てのライブラリ・サービス124の各々について、ゲート224とラッパー関数226から成る対応するペアが存在することが可能であり、当該ペアは、ソース側ＩＳＡアーキテクチャとターゲット側ＩＳＡアーキテクチャーとの間を跨いでアプリケーション120によってライブラリ・サービス124を呼び出すための仕組みを実現するように構成されている。同様に、コールバック関数125の各々について、ゲート224およびラッパー関数226から成る一つの対応するペアが存在することが可能であり、ソース側ＩＳＡアーキテクチャとターゲット側ＩＳＡアーキテクチャーとの間を跨いでライブラリ・サービス124によってコールバック関数をコールバック呼び出しするための仕組みを実現するように構成されている。
【００１１】
ＩＳＡ間ブリッジング・ローダー202は、メモリー上にアプリケーション120をロードするように構成されたユーティリティとすることが可能である。アプリケーション120をロードする際に、ＩＳＡ間ブリッジング・ローダー202は、ソース側アプリケーション120に対応するライブラリと関係付けられているアプリケーション120内の任意の未解決シンボル126をアドレス解決するように構成されることが可能である。一つのシンボルは、レジスタ、メモリ・アドレスなどの識別子（例えばテキスト文字列）とすることが可能である。ＩＳＡ間ブリッジング・ローダー202は、シンボルを（コールバック関数125へと）修正し、コールバック関数125に関するシンボルを、対応するラッパー関数226と関連付けるように構成されることが可能である。ＩＳＡ間ブリッジング・ローダー202は、バイナリ形式に基づく制御転送機能の使用を含む数多くの周知な手法の中のいずれか一つの手法に従って、ＯＳ122（あるいはもし使用されている場合には、ミドルウェア121）のローダー（図示せず）からロードを実行するための制御を獲得することが可能であり、あるいは、ＯＳ122あるいはミドルウェア121によってサポートされている場合には、変数をロードまたは事前ロードすることが可能である。本発明に係るその他の実施例においては、上記の仕組みの代わりに、ＯＳ122（あるいはもし使用されている場合には、ミドルウェア121）のローダーは、ＩＳＡ間ブリッジング・ローダー202への制御の受け渡しの仕組みを実現するために修正されることが可能である。
【００１２】
ソース側ISAエミュレータ204は、ソース側ＩＳＡアプリケーション120を実行するためにターゲット側ＩＳＡ122の上においてソース側ＩＳＡアプリケーション120をエミュレートすることが可能である。以前に記述されるように、ソース側ＩＳＡエミュレータ204は、ソース側ＩＳＡ実行コンテキスト212を維持するように構成されることが可能である。例えば、ソース側ISAエミュレータ204は、アプリケーション120の実行中においてソース側ＩＳＡのＩＰ（命令ポインター）を追跡するように構成されることが可能である。アプリケーション120がライブラリ・サービス124を起動しようとを試みる場合、ソース側ＩＳＡエミュレータ204はソース側のＩＳＡ実行をモニタリングし続けることが可能であり、その代わりに、ＬＩＢエミュレータ206を起動し、ＬＩＢエミュレータ206に実行制御を転送することが可能である。本発明に係る様々な実施例においては、ソース側ＩＳＡエミュレータ204は、ライブラリ・サービス124の対応するゲート224（以下においてさらに議論される）を起動し、ゲート224に実行制御を転送することが可能である。
【００１３】
ＬＩＢエミュレータ206は、ターゲット側ＬＩＢ124に対して写像する動作を介して、ソース側ＬＩＢ（あるいはその他のＬＩＢ）をエミュレートすることが可能である。さらに、ＬＩＢエミュレータ206は、ターゲット側ＩＳＡライブラリー（ＬＩＢ）の実行コンテキスト222を維持するように構成されることが可能である。ライブラリ・サービス124に対応するゲート224は、ライブラリ・サービス124および対応するラッパー関数226のそれぞれに向けて呼び出しをリダイレクトするように構成されることが可能であり、当該対応するラッパー関数は、当該呼び出しを処理し、セット・アップするラッパー関数である。コールバック関数125に対応するゲート224は、対応するラッパー関数226からソース側ＩＳＡエミュレータ204に対してコールバック呼び出しのための実行制御を転送するように構成されることが可能である。本発明に係る様々な実施例においては、ゲート224はそれぞれ、対応するラッパー関数226あるいはソース側ＩＳＡエミュレータ204へのリダイレクト動作を有効化するように構成された命令を含むことが可能である。本発明に係る様々な実施例においては、各ゲート224の指示は、実行制御の転送を有効にするために、バイナリ変換エンジン215と協働するように構成されたソース側ＩＳＡ命令とすることが可能である。本発明に係る様々な実施例においては、各ゲート224は、対応するラッパー関数226を識別する表示情報をさらに含むことが可能である。
【００１４】
本発明に係る様々な実施例においては、対応するライブラリ・サービス124に呼び出しを処理し、セット・アップするために、ライブラリ・サービス124に対応するラッパー関数226の各々は、ソース側ＩＳＡコンテキスト212からの呼び出しの関連するパラメータ値を検索し、当該呼び出しをソース側ＩＳＡのアプリケーション・バイナリー・インターフェース（ＡＢＩ）フォーマットからターゲット側ＩＳＡのＡＢＩフォーマットへと変換し、当該変換された呼び出しを、当該パラメータ値と共に、ＬＩＢコンテキスト222内に保存するように構成されることが可能である。コールバック関数125へのコールバック呼び出しに際して、実行制御はコールバック関数125の対応するラッパー関数226に転送されることが可能である。本発明に係る様々な実施例においては、アプリケーション120のコールバック関数125へのコールバック呼び出しを処理し、セット・アップするために、コールバック関数125に対応するラッパー関数226の各々は、当該コールバック呼び出しを、ターゲット側ＩＳＡのＡＢＩフォーマットからソース側ＩＳＡのＡＢＩフォーマットへと変換し、当該コールバック呼び出しと関連するパラメータ値を添付し、ソース側ＩＳＡコンテキスト212内に当該パラメータ値と共に当該変換されたコールバック呼び出しを保存するように構成されることが可能である。コールバック関数125に対応するゲート224は、ターゲット側ＩＳＡ104の上でソース側ＩＳＡフォーマットによって提示されたコールバック関数をエミュレートするために、ソース側ＩＳＡコンテキスト212（ラッパー関数226によって準備され、コールバック関数125に対応している）を使用してソース側ＩＳＡエミュレータ204を起動するように構成されることが可能である。
【００１５】
図１および図２の両方を参照すると、幾つかのアプリケーション環境では、ＩＳＡ間ブリッジング層123は、システム・ローダ160の処理動作を妨げてしまう可能性がある。システム・ローダは、ターゲット側ＩＳＡ122上のＬＩＢサービス124と対を成すものとしてソース側ＩＳＡ120上のＬＩＢサービスの一部として提供されることが可能である。システム・ローダ160はアプリケーション120だけのための専用のローダではないが、その代り、アプリケーション120のシステム階層において様々なコンポーネント（例えば多数のアプリケーション）と共に動作する。ＩＳＡ間ブリッジング層123は、アプリケーション120からシステム・ローダ160への関数呼び出しを遮って横取りし、ＩＳＡ間ブリッジング・ローダ202へとそのような呼び出しをリダイレクトすることが可能であり、ＩＳＡ間ブリッジング・ローダ202によって、ソース側アプリケーション120は、本来のターゲット側ライブラリであるはずのライブラリにリンクされる代わりに、ＩＳＡゲート224へとリンクされる。実行時において、アプリケーション120が（ソース側ＩＳＡ120上に、あるいは他の場所に位置する）ライブラリーを呼び出す場合、ＩＳＡゲート224は、ターゲット側ＩＳＡ122上において意味論的に同一となるライブラリー124に対して実行制御を転送する。しかしながら、幾つかの事例においては、アプリケーション120（例えば、LIBmono）は、（例えば、ライブラリをロードするための）自分専用のローダー131に依存し、かつ不確定のシンボル126をアドレス解決するように構成されることが可能である。そのようなローダーはエミュレータ130および／またはアプリケーション120のための専用のローダーであり、システム・ローダ160の代わりに、あるいは当該システム・ローダに追加する形で機能することが可能である。ＩＳＡ間ブリッジング層123は、ローダー131をモニタリングするようには構成されない場合もあり得る（あるいはローダー131が存在する事すら知らない場合もあり得る）。その結果、アプリケーション120は、ターゲット側ライブラリーＬＩＢ１  127（アプリケーション120によって最初にターゲット側ライブラリとされたライブラリ名と同一の名前を有するライブラリあるいはシンボルを有する可能性もある）に対して直接的にリンクすることを試みる場合がある。実行時において、ＩＳＡ間ブリッジング層123が、ローダー131（それはシステム・ローダ160とは異なる呼び出しを使用してもよい）を遮ることができない場合が起こり得る。これは、ローダー131の不正な動作により、エミュレータ204およびエミュレータ206が迂回され、ターゲット側ＩＳＡライブラリーＬＩＢ１  127が不正にロードされ、ターゲット側ライブラリＬＩＢ１  127が不正にリンクされる結果となり、アプリケーションが不適切に実行されるという結果に帰着する。
【００１６】
この問題に対処するために、本発明に係る実施例は、エミュレータ130およびアプリケーション120のために、ネスト構造化された（つまり多重階層化された）エミュレーションの仕組みを実現する。一例においては、アプリケーション120（エミュレーション層３）はエミュレータ130（エミュレーション層２）によってエミュレートされ、エミュレーション層２はさらに、ＩＳＡ間ブリッジング層123（エミュレーション層１）によってエミュレートされ、エミュレーション層１はさらに、ターゲット側ＩＳＡ122（エミュレーション層０）の上に存在する。
【００１７】
一つの実施例は、エミュレータ130によってロードされる特別のソース側ＩＳＡライブラリー140（ライブラリーＬＩＢ１  141とＬＩＢ２  142を含む）を含んでいる。図１に示されるように、ソース側ＩＳＡ120は未定義のシンボル126「Ａ」、「Ｂ」、「Ｃ」および「Ｄ」を含んでいる。ライブラリーＬＩＢ１  141とＬＩＢ２  142は対応するターゲット側ライブラリ127および128と同一のライブラリ名（同一の関数名を含む）を使用している可能性がある。例えば、ソース側ＩＳＡライブラリー141およびターゲット側ＩＳＡライブラリ127の両者は「ＬＩＢ１」と命名され、両者は、「Ａ」、「Ｂ」、「Ｃ」および「Ｄ」という名前の関数を含んでいる。エミュレータ130が未定義のシンボル126「Ａ」、「Ｂ」、「Ｃ」および「Ｄ」をアドレス解決しようとする場合、それは特別のライブラリ141の中から対応するシンボルを見つけ出す。続いて、エミュレータ130は、例えば、シンボル「Ａ」のような、その未定義のシンボルを特別のライブラリＬＩＢ１  141内から見つけ出された対応するシンボル「Ａ」とリンクする。関数「Ａ」、「Ｂ」、「Ｃ」および「Ｄ」の各々に関して、上述した特別のライブラリＬＩＢ１  141は（これに加えて、関数「Ｅ」、「Ｆ」、「Ｇ」および「Ｈ」に関するＬＩＢ２  142も同様に）、実際の関数の代理として機能する関数のためにゲートを実装する（ゲート251およびゲート252を参照されたい）。例えば、関数「Ａ」は、ライブラリ141に関数「Ａ」のためのＩＳＡゲート（関数「Ａ」の実体は含んでいないがゲートを含んでおり、ゲート251として図示されているゲート「Ａ」を参照）を単に含んでいるだけであり、当該ＩＳＡゲートは、ターゲット側ＩＳＡ122上において意味論的に同一であるライブラリーＬＩＢ１  127へと実行制御を転送する。一つの実施例では、特別のソース側ＩＳＡライブラリ140は単にＩＳＡゲートを含んでいるだけである。
【００１８】
図１に示すように、本発明に係る一つの実施例においては、ＩＳＡゲートは別個のライブラリ141と142に組織化され、当該ＩＳＡゲートはオンデマンドでロードされることが可能である。例えば、ＬＩＢ２  142に対応する関数がアプリケーション120にとって必要な場合に、それを必要とする時点において、エミュレータ130は、ＬＩＢ２  142（または、その他のライブラリ）がロードされるのを待っている間に、ＬＩＢ１  141だけをロードする（すなわち、リンクする）ことが可能である。。
【００１９】
図３および図４は、本発明に係る実施例に従って、コールバック呼び出しを使用してＩＳＡ間を橋渡し（ブリッジング）するための例示的な方法を図示している。本発明に係る方法300は２つの構成部分を含むことが可能であり、第１の構成部分は、（ソース側ＩＳＡの）アプリケーション120から（ターゲット側ＩＳＡの）ライブラリ・サービス124への呼び出しを橋渡し（ブリッジング）するための部分300aであり、第２の構成部分は、（ターゲット側ＩＳＡの）ライブラリ・サービス124から（ソース側ＩＳＡの）アプリケーション120のコールバック関数125に対するコールバック呼び出しを橋渡し（ブリッジング）するための部分300bである。部分300aと部分300bとは、互いに無関係に実装されることが可能である。さらに、本発明に係る様々な実施例はラッパー関数および／またはコールバック関数と関連している必要はなく、しかし、その代りに、例えば特別のソース側ＩＳＡライブラリ141および142等のようなネスト構造化されたエミュレーションに関する他の技術的側面に焦点を当ててもよい。
【００２０】
図３に示すブロック302において、ＩＳＡ間ブリッジング・ローダー202は、ソース側アプリケーション120をロードすることが可能である。上述したように、アプリケーション120をロードする際に、ＩＳＡ間ブリッジング・ローダー202は、シンボル名あるいはライブラリ・サービス124への参照126をアドレス解決し、コールバック関数125のシンボル名あるいは参照を修正することが可能である。ブロック304では、実行過程において、アプリケーション120は、ライブラリ・サービス124のうちの一つを呼び出す。本発明に係る様々な実施例において、アプリケーション120は、呼び出されたライブラリ・サービス124によって自身のコールバック関数125の中の一つをコールバック呼び出しすることを必要とする場合があり得る。本発明に係る実施例において、アプリケーション120は、呼び出されたライブラリ・サービス124に対する呼び出し動作の一部として、コールバック関数125へのポインターを含むことが可能である。ポインターをコールバック関数125へと渡す代わりに、ライブラリ・サービス124のラッパー関数226は、コールバック関数125の対応するラッパー関数226を渡すことも可能である。ブロック305では、エミュレータ130は、ライブラリにリンクしようと試み、そのような試みを実行する中で、ＬＩＢ１  141（それはＬＩＢ１  127と等しい名前が付けられている）に対してリンクする。ＬＩＢ１  141は、ソース側ＩＳＡエミュレータ204に関数呼び出し（例えば、関数「Ａ」に対する呼び出し）を転送するゲートを含んでいる。ブロック306では、（例えばソース側ＩＳＡのＩＰ（命令ポインタ）のモニタリングし、当該ＩＰがターゲット側ライブラリのアドレス範囲内にあるメモリ・アドレスを参照しているとを判断することを通じて）呼び出しを検知した際に、ソース側ＩＳＡエミュレータ204は、当該呼び出しを転送し、ＬＩＢエミュレータ206中のライブラリ・サービス124の対応するゲート224に実行制御を転送することが可能である。例えば、関数「Ａ」に関して、ＬＩＢ１  141のゲート「Ａ」は、当該呼び出しをソース側ＩＳＡエミュレータ204へとリダイレクトし、続いて、ゲート251として図示されたゲート「Ａ」にへとリダイレクトすることが可能である。ブロック308では、複数のゲート224からの適切な一のゲートは当該呼び出しをさらに呼び出されたライブラリ・サービス124の対応するラッパー関数226へとリダイレクトし、実行制御を当該ラッパー関数へと転送することが可能である。ブロック310では、上述したように、呼び出されたライブラリ・サービス124のラッパー関数226は、当該呼び出されたライブラリ・サービス124による実行のために、当該呼び出しを処理し、ＬＩＢコンテキスト222内において当該呼び出しをセット・アップすることが可能である。ブロック312では、当該呼び出されたライブラリ・サービス124のゲート224は、ＬＩＢコンテキスト222から当該呼び出しに対する返り値を収集し、ソース側ＩＳＡコンテキスト212を更新し、さらに、ソース側ＩＳＡエミュレータ202へと実行制御を転送することが可能である。
【００２１】
したがって、図３は、ネスト構造化されたエミュレーションの一形態を示しており、当該エミュレーション形態においては、アプリケーション（例えば、ゲーム）はエミュレータ（例えば、エミュレータ130）の上において実行され、当該アプリケーションは第１のＩＳＡに合わせてフォーマットされる。当該エミュレータは、ＩＳＡ間ブリッジング層123の上において（つまり、ＩＳＡ間ブリッジング層123によってネスト構造化されて）実行されることが可能であり、アプリケーションの透過的なバイナリ変換を行ない、第１のＩＳＡとは異なる第２のＩＳＡの上でエミュレータを実行する。これは、ＩＳＡ間ブリッジング層123および一つ以上の特別のソース側ＩＳＡライブラリ（例えばライブラリ141とライブラリ142）を使用して達成され、これら特別のソース側ＩＳＡライブラリは、自分用のローダー131を使用して、エミュレータ130とリンクされる。エミュレータ130がライブラリを起動する際に、エミュレータ130は、ＩＳＡゲート（例えば図中の141と142に対応するゲート）を起動し、続いて、当該ＩＳＡゲートは、ゲート251およびゲート252を介して、ターゲット側ＩＳＡライブラリ127および128に対して関数呼び出しをマッピングする（上述したＩＳＡゲートは、複数のゲート224の一般的な集合体から成る個別のライブラリである）。本発明に係る実施例は、任意の階層数のエミュレーション層（例えば２層、３層、４層、５層など）をカバーするために拡張されることが可能である。各エミュレーション層は、（ＩＳＡゲートを含んでいるか又はＩＳＡゲートと結合している）特別のＩＳＡライブラリとリンクされ、それは、エミュレーション層の次の階層レベルへと転送される。
【００２２】
図４（上述した部分300b）に示すブロック404では、呼び出されたライブラリ・サービス124の実行過程において、あるいはその実行完了に際して、ライブラリ・サービス124は、（例えば、アプリケーション120から渡されたコールバック呼び出し用のポインターを呼び出すことによって）アプリケーション120のコールバック関数125をコールバック呼び出しすることが可能である。ブロック406では、実行制御は、上記のとおり修正された参照に従って、コールバック関数125の対応するラッパー関数226に転送されることが可能である。ブロック408では、上述したとおり、アプリケーション120のコールバック関数125による実行のために、ラッパー関数226は、コールバック呼び出しを処理し、ソース側ＩＳＡコンテキスト212内においてコールバック呼び出しをセット・アップし、それに続いて、コールバック関数125の対応するゲート224へと実行制御を転送することが可能である。ブロック410では、コールバック関数125に対応するゲート224はコールバック呼び出しを転送し、ラッパー関数226によって準備されたソース側ＩＳＡコンテキストと共にＩＳＡエミュレータに対して実行制御を転送することが可能である。ブロック412では、ソース側ＩＳＡエミュレータ204は、ソース側ＩＳＡコンテキスト内のＩＰ（命令ポインタ）に従って、コールバック関数のエミュレーションを開始することが可能である。ブロック414では、コールバック関数125のゲート224は、ソース側ＩＳＡコンテキスト212からコールバック呼び出しの返り値を収集し、ＬＩＢコンテキスト222を更新し、実行制御をＬＩＢエミュレータ204へと転送し、その結果として、ライブラリ・サービス124に対してコールバック関数125の返り値が返される。
【００２３】
本発明の理解を容易なものとするために、本発明に係る様々な実施例は、一つのターゲット側ＩＳＡに対して一つのソース側ＩＳＡを橋渡し（ブリッジング）する一つのＩＳＡ間ブリッジング層123について記述されてきた。しかしながら、本明細書の開示はそのような実施態様だけに制限されていない。本発明に係る実施例においては、多数のＩＳＡ間ブリッジング層123が、一つ又は複数のターゲット側ＩＳＡに対して多数のソース側ＩＳＡを橋渡し（ブリッジング）することが可能である。これらの実施例のうちの幾つかにおいては、ブリッジングが必要とされていることを検知するためにディスパッチャーが追加的に設けられ、必要なＩＳＡ間ブリッジング機能を提供するために、一つ以上の適切なＩＳＡ間ブリッジング層123をインスタンス生成することが可能である。さらに、本発明に係る様々な実施例においては、本開示は、必要とされるブリッジングの量を減らすために、（ソース側ＩＳＡ内における）アプリケーション120の構成部分のために（ターゲット側ＩＳＡ内における）バイナリーを置換する形で使用して実施されることが可能である。その他の実施例においては、ブリッジングに使用された資源のうちの幾つか（例えば、ラッパー関数のうちの幾つか）は、ＩＳＡ間ブリッジング層123をアクセス可能なリモート・サーバ上に置かれることが可能である。さらに、本発明の理解を容易にするために、本明細書では、ＩＳＡ間ブリッジング層123は、ソース側ＩＳＡを、それとは別個のターゲット側ＩＳＡへと橋渡し（ブリッジング）するように構成されるものとして記述されてきた。しかしながら、様々なアプリケーションに関して、ＩＳＡ間ブリッジング層123は、互いに同一であるソース側ＩＳＡとターゲット側ＩＳＡとの間を橋渡し（ブリッジング）するために使用されることも可能である。そのようなアプリケーションにおいては、本明細書中で上述した構成要素（例えば、バイナリ変換エンジン215）の一つ以上は必須の構成要素ではないかもしれない。そのようなアプリケーションの一例は、コンピューティング装置102に機能拡張された動作セキュリティを提供するものなどだろう。その他のアプリケーションも同様に、そのようなブリッジング動作による恩恵を受けることが可能である。従って、本明細書の開示内容はコンピューティング装置の技術的問題の解決策とすることが可能であり、当該解決策によって、ある一つのＩＳＡが、全く別のＩＳＡのために開発されたアプリケーションをサポートすることが可能となり、当該アプリケーションは、時として呼び出されたライブラリ・サービスからのコールバック呼び出しを必要とする使用の特性を有する。本明細書の開示内容の技術的利点は、コンピューティング装置固有のＩＳＡにおけるアプリケーションを完全に翻訳する必要性を回避し、あるいはそのようなアプリケーションを実装しなおす必要性を回避することを含み得る。
【００２４】
本発明に係る実施例は、ネスト構造化されたエミュレーションあるいは上述されたその他の技術的特徴のいずれかのみに制限されてはいない。例えば、一つの実施例は高速化可能なＢＴエミュレーションによる動的リンキングと関係があり、これは、そのようなリンク処理を（例えば、実行速度の観点から）静的なリンク処理に匹敵するようにするためである。
【００２５】
従来式の動的リンキング・システムは、ライブラリとリンクされなくてはならないソース側ＩＳＡアプリケーション（例えば、アプリケーション120）と関係し得る。そのようにするために、当該アプリケーションは、（ライブラリを呼び出すために使用される）呼び出し元コード、（ＧＯＴを読み込むためのコードを含む）ＰＬＴコードおよび（未解決となっているシンボル位置および関数位置のリストを含み得る）ＧＯＴを使用することが可能である。ターゲット側ＩＳＡの上で走るアプリケーションをエミュレートするために、ＢＴシステムは、実行可能プログラム・ローダー、変換処理部およびランタイム実行環境を使用することが可能である。上述したように、ＰＬＴおよびＧＯＴに基づいた方法を使用する場合には、ダイナミック・リンクされたライブラリ内のターゲット側関数に対してアプリケーションからのライブラリー呼び出しを向けるために、間接的なジャンプが必要となるだろう。しかしながら、動的リンキングのための間接的なジャンプは静的なリンクと比較して、余分なランタイム・オーバーヘッドをもたらす。図５は動的リンキングを高速化するための実施例について記述し、そのような実施例は、ＢＴシステム内において動的リンキング加速器（ＤＬＡ）を使用して実行されることが可能である。
【００２６】
実行可能プログラム・ローダー520、変換処理部525およびランタイム実行環境530を含むＢＴシステム515は、ターゲット側ＩＳＡ535上においてソース側ＩＳＡアプリケーション505をエミュレートする。実行可能プログラム・ローダー520は、ソース側ＩＳＡアプリケーション505およびアプリケーション505とダイナミックにリンクすべきソース側ＩＳＡライブラリ510をロードする。変換処理部525は、アプリケーション505からロードした複数の命令コードを変換単位526のような変換単位毎にグループ化し、各翻訳単位毎にソース側ＩＳＡからターゲットＩＳＡへのバイナリ変換を実行する。ランタイム実行環境530は、ターゲット側ＩＳＡ535の上でバイナリ変換されたコードを実行するためのサポート環境および補助ライブラリ（図示せず）を提供する。
【００２７】
図５に示す実施例は、例えばＤＬＡローダー521およびＤＬＡ最適化処理部527などを使用することにより、ＢＴを機能拡張する。ＤＬＡローダー521は、ダイナミック・リンクされたライブラリーの各々のアドレス範囲を格納するためにライブラリー・アドレス範囲テーブル522を使用する。テーブル522は、アドレスの検証、および何れのライブラリー呼び出しを高速化すべきなのかを制御するために使用される。例えば、特定のシステム・ライブラリ（例えば、LIBcまたはLIBm）への呼び出しは高速化の対象とするのに好適な候補である。何故なら、これらのシステム・ライブラリは、ロードされると、アプリケーション505の実行中はロードされた状態をずっと維持しているからである。しかしながら、頻繁にロードされたりアンロードされたりするその他のユーザ・ライブラリ等は、何度も繰り返しロードされ又はアンロードされる動作を伴うので、反復的にバイナリ変換されることによる動作上のコストに起因して、高速化対象として好適な候補とはならない可能性がある。したがって、高速化対象として選ばれるライブラリー呼び出しがテーブル522内に格納される一方で、その他のライブラリー呼び出しはテーブル522内に格納されない。
【００２８】
以下においてさらに詳しく後述するように、ＤＬＡ最適化処理部527は、ソース側ＩＳＡアプリケーション505におけるＰＬＴコード507を解析し、ソース側ライブラリ511に関するアドレスを計算する。続いて、このアドレスは、テーブル522に格納されたアドレス範囲（例えば、LIBcはアドレス範囲0x4000-0x5000にある）と比較される。当該アドレスが何れかのアドレス範囲と合致する場合、それに続いて、ＤＬＡ最適化処理部527は、ＰＬＴコード507をライブラリ関数への直接実行可能な呼び出しで置き換える。このＤＬＡ機能拡張により、ＰＬＴコードは、もはやＢＴシステム515内においてエミュレートされることはない。その結果、動的リンキングは静的なリンクと同じくらい速くなる可能性がある（そうでなくとも、少なくとも従来式の動的リンキングの実行速度と比べれば充分に改善される）。動的リンキングを実行するための実施例は、図６を参照しながら以下において詳細に検討される。
【００２９】
図６は、ＤＬＡローダー521およびＤＬＡ最適化処理部527を使用して、高速化された動的リンキングを実行する方法600を含んでいる。ブロック605では、ソース側ＩＳＡアプリケーション505がＢＴシステム515上で動作している場合に、実行可能プログラム・ローダー520はアプリケーション505、およびそのダイナミックにリンクされたライブラリ（例えば、LIBc、LIBm、LIBc++などを含むことが可能なライブラリ510）をロードする。ブロック610では、ＤＬＡローダー521は、ロードした各ライブラリのメモリ・アドレス範囲を記録し、ライブラリー・アドレス範囲テーブル522内に一つ以上のアドレスを格納する（例えば、LIBcはアドレス範囲0x4000-0x5000にある）。ブロック615では、変換処理部525は、アプリケーションのエミュレートされた実行フローに続いて、ロードしたコード505を一つ以上の変換単位（例えば図中の単位526）へとグループ化する。例えば、実行制御を転送すべき旨の命令に遭遇するまで、変換処理部525は一つの変換単位の中へ一つ以上の命令を追加することが可能である。実行制御の転送命令に遭遇した際には、変換処理部525は、実行制御の転送命令（例えば、図５のブロック526を参照）に関連したヒューリスティック情報や履歴情報に従って、実行制御転送命令のターゲット・アドレスの直後に続けて命令を連続的に追加することが可能である。グループ化の処理の実行中において、変換処理部525がコール命令（例えばCALL  0X123@PLT）に遭遇したならば、変換処理部525は、呼び出しのターゲット・アドレス（例えば、0X123）をＤＬＡ最適化処理部527に対して送信する。ブロック620では、ＤＬＡ最適化処理部527は、呼び出しのターゲット・アドレス（例えば、0X123）がＰＬＴコードに含まれているか否かを判断するために、コード・パターンのマッチング（以下においてさらに検討される）を使用する。呼び出しのターゲットがＰＬＴコード中にあると判定された場合、ＤＬＡ最適化処理部527は、ＰＬＴコードを計算し、ＧＯＴ（図示されないが、コード505中に含まれている）から（例えば、メモリを割り当てるために関数呼び出しによって規定される「CALL  malloc」などの）ライブラリ関数のアドレスを呼び出す。ブロック625では、ＤＬＡ最適化処理部527は、アドレスの検証のためにＤＬＡローダー521に対してこのライブラリ関数アドレスを送信する（図５の矢印529を参照）。ブロック630では、ＤＬＡローダー521は、ＤＬＡ最適化処理部527から供給されたライブラリ関数アドレスをライブラリー・アドレス範囲テーブル522中の内容と比較し、それによって、当該供給されたアドレスが高速化の対象として正当な候補であることを検証する。上述した検証が一旦実行されたならば、ブロック635では、ＤＬＡ最適化処理部527は、ＰＬＴ507に対して本来の呼び出しをライブラリ関数511への直接呼び出しで置き換え、変換単位からＰＬＴコードを取り除く（図中において変換単位526からのＰＬＴコードを含んでいない変換単位528を参照）。その結果、ＰＬＴコードは、もはやＢＴシステム515によってエミュレート実行されることはない（それにより、エミュレーション実行によるオーバーヘッドを回避することが出来る）。
【００３０】
図７は、例えば、ＤＬＡローダー521、ＤＬＡ最適化処理部527、および図６に示した方法600の一部を使用することにより、ダイナミック・リンクの高速化を実行するための疑似プログラム・コードを含んでいる。説明を簡単にするために、当該疑似プログラム・コードの全てのプログラム行が議論されるとは限らない。プログラム行706〜707は、コール命令およびそのターゲット・アドレスを認識する処理動作と関係している。プログラム行708では、ターゲット・アドレスおよびその周囲のアドレスがＰＬＴコード内に位置している場合、当該呼び出しがＰＬＴコード内をターゲットとしている可能性が高いことをこのパターン・マッチは示す。プログラム行709〜711では、適切なライブラリー・アドレスが見つかり、アドレス検証される。プログラム行712〜713では、ＰＬＴコードは直接呼出しと置き換えられ、それによって、ＰＬＴコードのエミュレーション実行による高い計算コストおよびそれに伴う間接的ジャンプやテーブル検索処理を回避することが可能となる。動的リンキングの実行に際して、ライブラリ関数アドレス計算のためにＰＬＴとＧＯＴを横断的に調べることはもはや必要とはされない。
【００３１】
本発明に係る実施例は、プログラム・コード中において実装されることが可能であり、命令を実行するようにシステムをプログラミングするために使用することが可能な命令コードが記録されている記憶媒体上に格納されることが可能である。当該記憶媒体は、フロッピー（登録商標）ディスク、光ディスク、ソリッド・ステート・ドライブ（ＳＳＤ）、コンパクト・ディスク（ＣＤ）を使用した読み出し専用メモリー（CD-ROM）、再書き込み可能コンパクト・ディスク（CD-RW）および光磁気ディスクを含む任意のタイプのディスク、読み出し専用メモリ（ROM）、ダイナミックＲＡＭ（ＤＲＡＭ）のようなランダム・アクセス・メモリー（ＲＡＭ）、スタティックＲＡＭ（SRAM）、消去可能ＰＲＯＭ（EPROM）、フラッシュ・メモリー、電子的に消去可能なＰＲＯＭ（EEPROM）のような半導体デバイス、磁気カードや光カード、あるいは電子的命令コードを格納するのに適したその他のタイプの媒体を含むがこれらだけに限定はされない。本発明に係る実施例は、命令、関数、プロシージャ、データ構造、アプリケーション・プログラム、構成設定、コードなどのデータとの関連において本明細書中で記述されることが可能である。当該データがマシンによってアクセスされる場合、本明細書中において詳細に述べたように、当該マシンは、タスクを実行し、抽象データ型を定義し、低レベル・ハードウェアの実行コンテキストを確立し、および／またはその他の処理動作を実行することによってこれに応答することが可能である。データは揮発性および／または不揮発性のデータ記憶装置内に保存されることが可能である。この開示の目的のために、「コード」や「プログラム」等の用語は、アプリケーション、ドライバ、プロセス、ルーチン、方法、モジュールおよびサブ・プログラムを含む広範なタイプのコンポーネントおよび構成物を包含すると解釈される。したがって、「コード」や「プログラム」等の用語は、処理システムによって実行された際に、一つ以上の所望の処理動作を実行する命令の任意の集合体を指して言うために使用されてもよい。さらに、代替的な実施例は、本明細書中に開示された全ての処理動作よりも少ない処理動作しか使用しない方法、追加の処理動作を使用する方法、上述した実施例と同一の処理動作を上述した実施例とは異なる実行順序で使用する方法、および本明細書中に示された個々の処理動作が組み合わせられ、細分化され、そうでなければ変更された方法を含むことが可能である。一つの実施例において、用語「制御ロジック」の使用は、トランジスター、レジスタあるいはその他のハードウェア回路（例えば、プログラミング可能論理回路（535）など）のようなハードウェアを含んでいる。しかしながら、さらに別の実施例では、制御ロジックは、ソフトウェアあるいはコード（531）をさらに含んでいる。そのような制御ロジックはファームウェアやマイクロコード(536)のようなハードウェア・ロジックに統合されることが可能である。プロセッサーやコントローラーは制御ロジックを含むことが可能であり、当該技術分野において周知である多種多様な制御論理のうちの任意のものを表わすように意図され、そのような制御ロジックは、好適には、マイクロ・プロセッサー、マイクロ・コ��トローラ、フィールド・プログラマブル・ゲート・アレイ（FPGA）、特定用途向け集積回路（ASIC）、プログラミング可能論理回路（ＰＬＤ）などとして実装される。
【００３２】
図１を参照すると、一つの実施例に関して、少なくとも一つのプロセッサーとメモリ素子の配列104は、一緒にパッケージングにされることが可能であり、当該パッケージングにおいては、ＩＳＡ間ブリッジング層123の計算論理（あるいはその部分集合）が図３、４、６および７に図示された方法の処理動作（あるいはその部分集合）を実行するように構成されている。一つの実施例に関して、少なくとも一つのプロセッサーとメモリ素子の配列104は、一緒にパッケージングにされることが可能であり、当該パッケージングにより、ＩＳＡ間ブリッジング層123の計算論理（あるいはその部分集合）が図３、４、６および７に図示された方法の処理動作（あるいはその部分集合）を実行するためのシステム・イン・パッケージ（ＳＩＰ）が形成される。一つの実施例に関して、少なくとも一つのプロセッサーとメモリ素子の配列104は、半導体チップの同じダイの上に統合実装されることが可能であり、当該ダイ上の実装においては、ＩＳＡ間ブリッジング層123の計算論理（あるいはその部分集合）が図３、４、６および７に図示された方法の処理動作（あるいはその部分集合）を実行するように構成されている。一つの実施例に関して、少なくとも一つのプロセッサーとメモリ素子の配列104は、半導体チップの同じダイの上に統合実装されることが可能であり、当該ダイ上の実装においては、ＩＳＡ間ブリッジング層123の計算論理（あるいはその部分集合）がシステム・オン・チップが形成される。少なくとも一つの実施例に関して、ＳｏＣは、デスクトップ型コンピュータ、ラップトップ型コンピューター、スマート・フォン、コンピューティング・タブレット、インターネット・アプライアンス、携帯情報端末（PDA）、ポータブル型ゲーム機器、サーバあるいはその他の計算装置において利用されることが可能である。
【００３３】
本発明に係る実施例は、少なくとも一つのプロセッサーにより実行される方法であって、当該方法は：ソース側命令セット・アーキテクチャ（ＩＳＡ）を有するアプリケーションをロードするステップ；呼び出しがソース側ＩＳＡライブラリーに到達しないようにするために、ソース側ＩＳＡライブラリーのライブラリ・サービスについての前記呼び出しを第１のライブラリーへとリダイレクトするステップ；前記呼び出しを、第１のライブラリーからターゲット側ＩＳＡライブラリーのライブラリ・サービスへと向けるステップ；および、ターゲット側ＩＳＡライブラリーを介してアプリケーションをエミュレート実行するステップ；を含む。当該方法はアプリケーションに関する未定義のシンボルをアドレス解決するステップをさらに含むことが可能である。未定義のシンボルのアドレス解決は、第１のライブラリーの第１のゲートを介してターゲット側ＩＳＡライブラリーのターゲット側ゲートに間接的にリンクする動作を含む。第１のゲートは第１の名前を有することが可能であり、ターゲット側ゲートは、前記第１の名前を含むターゲット名を有することが可能である。例えば、（ファイル拡張子を無視するならば）名前は同一であるか、あるいは単に接頭辞や接尾辞などが異なるだけかもしれない。第１のライブラリーへの呼び出しのリダイレクト動作は、前記アプリケーション専用に設けられたエミュレータからの呼び出しをリダイレクトする動作を含むことが可能である。第１のライブラリーへの呼び出しのリダイレクト動作は、前記アプリケーション専用に設けられたエミュレータであって、汎用のシステム・ローダーではないエミュレータからの呼び出しをリダイレクトする動作を含むことが可能である。当該方法は、前記アプリケーションと関連した追加的なライブラリ・サービスの追加的な呼び出しを提供するステップであって、前記追加的な呼び出しは、プロシージャ・リンキング・テーブル（ＰＬＴ）内に含まれているコードへと向けられている、ステップ；および、前記追加的な呼び出しを、直接実行可能な追加的呼び出しで置き換えるステップであって、前記直接実行可能な追加的呼び出しは、ＰＬＴを迂回しながらソース側ＩＳＡライブラリーおよび追加的なソース側ＩＳＡライブラリーの一方に対して直接的に実行される追加的呼び出しである、ステップ；を含むことが可能である。当該方法は、前記追加的な呼び出しに関するアドレスを識別するステップを含むことが可能であり；前記追加的な呼び出しの決定は、前記追加的な呼び出しに関する前記アドレスを前記識別した結果に基づいて、ＰＬＴ内に含まれているコードに対して指示される。請求項１に係る方法は、アプリケーションと関連した追加的なライブラリ・サービスの追加的な呼び出しを提供するステップであって、前記追加的な呼び出しは、プロシージャのアドレス位置を特定するように構成されたコードへと向けられている、ステップ；および、前記追加的な呼び出しを、直接実行可能な追加的呼び出しに置き換えるステップであって、前記直接実行可能な追加的呼び出しは、プロシージャのアドレス位置を特定するように構成されたコードを迂回しながらソース側ＩＳＡライブラリーおよび追加的なソース側ＩＳＡライブラリーの一方に対して直接的に実行される追加的呼び出しである、ステップ；を含むことが可能である。
【００３４】
本発明に係る実施例では、装置は少なくとも一つのメモリおよび前記少なくとも一つのメモリに結合されている少なくとも一台のプロセッサーを具備しており、当該装置は、ソース側命令セット・アーキテクチャ（ＩＳＡ）を有するアプリケーションをロードする動作；前記アプリケーションと関連したライブラリ・サービスのための呼び出しを提供する動作であって、追加的な呼び出しが、プロシージャのアドレス位置を特定するように構成されたコードへと向けられる、動作；前記呼び出しを、直接実行可能な呼び出しに置き換える動作であって、前記直接実行可能な追加的呼び出しは、前記プロシージャのアドレス位置を特定するように構成された前記コードを迂回しながらソース側ＩＳＡライブラリーに対して直接的に実行される追加的呼び出しである、動作；および、ターゲット側ＩＳＡライブラリを介して前記アプリケーションをエミュレート実行する動作；を具備する一連の処理動作実行する。前記プロシージャのアドレス位置を特定するように構成された前記コードは、プロシージャ・リンク・テーブル（ＰＬＴ）内に含まれることが可能である。本発明に係る一実施例は：呼び出しのためのアドレスを識別する動作を具備する一連の処理動作を具備することが可能であり；前記呼び出しの決定は、前記呼び出しのためのアドレスを前記識別した結果に基づいて、ＰＬＴ内に含まれているコードに対して指示される。本発明に係る一実施例は：追加的な呼び出しがソース側ＩＳＡライブラリーおよび追加的なソース側ＩＳＡライブラリーの一方に到達しないようにするために、ソース側ＩＳＡライブラリーおよび追加的なソース側ＩＳＡライブラリーの一方に関する追加的なライブラリ・サービスのための追加的な呼び出しを、第１のライブラリに対してリダイレクトする動作；および、第１のライブラリーからの追加的な呼び出しを、ターゲット側ＩＳＡライブラリーおよび追加的なターゲット側ＩＳＡライブラリーの一方へと向ける動作；を具備する一連の処理動作を実行することが可能である。本発明に係る一実施例は、アプリケーションに関する未定義のシンボルをアドレス解決する動作を具備する一連の処理動作を実行することが可能である。本発明に係る一実施例においては、未定義のシンボルのアドレス解決は第１のライブラリーのゲートを介してターゲット側ＩＳＡライブラリーおよび追加的なターゲット側ＩＳＡライブラリーのいずれか一方についてのゲートに対して間接的にリンクする動作を含む。一実施例においては、追加的な呼び出しのリダイレクト動作は、前記アプリケーション専用に設けられたエミュレータからの追加的な呼び出しをリダイレクトする動作を含む。  一実施例においては、追加的な呼び出しのリダイレクト動作は、前記アプリケーション専用に設けられたエミュレータであって、汎用のシステム・ローダーではないエミュレータからの追加的な呼び出しをリダイレクトする動作を含むことが可能である。
【００３５】
したがって、本発明に係る様々な実施例は、ソース側アプリケーションとソース側エミュレータのためのネスト構造化されたエミュレーションを含んでいる。ソース側ＩＳＡライブラリーを複製すると、ソース側エミュレータによるライブラリー呼び出しは、ターゲット側ライブラリーへとリダイレクトされるので、ネイティブなエミュレータが第１のＩＳＡと第２のＩＳＡとのに間における適切なエミュレーション経路を通じてエミュレートを実行することを強制することが可能となる。これは、適切なエミュレーション実行を結果としてもたらすという技術的利点を提供する。さらに、本発明に係る様々な実施例の技術的利点は、動的リンキングの効率および実行速度を高めるという点である。例えば、効率の改善は、間接のＰＬＴとＧＯＴに基づいて実行される方法の事前の使用と関連した間接的ジャンプによって達成される。
【００３６】
本明細書の開示内容がコンピューティング装置に対して強化されたセキュリティを提供するための技術的問題の解決策となり得ることは当業者であれば理解できよう。本明細書の開示内容の技術的利点は、実現される分離のロバスト性を含み得るが、これだけに制限されない。
【図１】
0005976917.tif 000002
【図２】
0005976917.tif 000003
【図３】
0005976917.tif 000004
【図４】
0005976917.tif 000005
【図５】
0005976917.tif 000006
【図６】
0005976917.tif 000007
【図７】
0005976917.tif 000008