(57)【特許請求の範囲】
【請求項１】
ネイティブ・クライアント環境内で動作するようゲスト・ソフトウェアを受信する工程であって、前記ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャにおける実行用に構成されており、前記ネイティブ・クライアント環境内での実行用には構成されていない工程と、
エミュレーション・ソフトウェアを用いて、前記ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供する工程であって、前記ネイティブ・クライアント互換性マシン・コードは、前記ネイティブ・クライアント環境内で実行され、前記ネイティブ・クライアント互換性マシン・コードはアプリケーション内で実行可能であり、実行用に前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへの前記バイナリ変換を提供することは、時間通りに、エミュレートされたゲスト・ソフトウェアの実行時に、および前記ゲスト・ソフトウェアをポーティングまたはリコンパイルすることなく起こり、前記バイナリ変換を提供することは、エミュレートされた前記ゲスト・ソフトウェアの実行とインターリーブする工程と、
を備え、
前記ネイティブ・クライアント環境は、ホスト・マシンにおいて利用可能であるメモリまたはレジスタ内に記憶された１セットのエミュレートされたゲスト・レジスタにアクセスし、前記ネイティブ・クライアント互換性マシン・コードと関連付けられているデータは前記ネイティブ・クライアント環境内に記憶され、エミュレートされた前記ゲスト・レジスタは、前記特定のゲスト・ハードウェア・アーキテクチャのレジスタに対応し、前記レジスタのサブセットを介して、前記ゲスト・ソフトウェアから前記ネイティブ・クライアント互換性マシン・コードに対して提供される
方法。
【請求項２】
前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記特定のゲスト・ハードウェア・アーキテクチャにおいて実行中の前記ゲスト・ソフトウェアによって用いられるレジスタを表現する１セットの仮想レジスタを生成する工程であって、前記仮想レジスタのアドレスは、所定のオフセットを加えたベース・ポインタ（ＲＢＰ）によって参照され、前記１セットの仮想レジスタ内の各仮想レジスタは、前記ネイティブ・クライアント環境内から１つの命令を介してアクセス可能である工程を含む、
請求項１に記載の方法。
【請求項３】
前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記特定のゲスト・ハードウェア・アーキテクチャのフィーチャと前記ゲスト・ソフトウェアのアプリケーション・プログラミング・インターフェース（ＡＰＩ）呼出とを前記ネイティブ・クライアント内でエミュレートする工程を含む、
請求項１に記載の方法。
【請求項４】
前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記ゲスト・ソフトウェア内のコードを前記ネイティブ・クライアント環境との互換性があるコードに置き換える工程を含む、
請求項１に記載の方法。
【請求項５】
前記ゲスト・ソフトウェアは、ＡＲＭソフトウェアまたはｘ８６ソフトウェアを含む、
請求項１に記載の方法。
【請求項６】
前記ネイティブ・クライアント互換性マシン・コードはセキュアおよびポータブルであって、前記ゲスト・ソフトウェアはセキュアでもポータブルでもない、
請求項１に記載の方法。
【請求項７】
前記ゲスト・ソフトウェアは特定のゲスト・オペレーティング・システム内のみにおける実行用に構成されており、前記ネイティブ・クライアント環境は複数の異なるオペレーティング・システムのうち任意の１つの内での実行用に構成されている、
請求項１に記載の方法。
【請求項８】
前記アプリケーションはブラウザである、
請求項１に記載の方法。
【請求項９】
命令を含む非一時的なコンピュータ可読媒体であって、前記命令が１以上のコンピュータによって実行されるときに前記１以上のコンピュータは、
ネイティブ・クライアント環境内で動作するようゲスト・ソフトウェアを受信する工程であって、前記ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャにおける実行用に構成されており、前記ネイティブ・クライアント環境内での実行用には構成されていない工程と、
エミュレーション・ソフトウェアを用いて、前記ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供する工程であって、前記ネイティブ・クライアント互換性マシン・コードは、前記ネイティブ・クライアント環境内で実行され、前記ネイティブ・クライアント互換性マシン・コードはアプリケーション内で実行可能であり、実行用に前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへの前記バイナリ変換を提供することは、時間通りに、エミュレートされたゲスト・ソフトウェアの実行時に、および前記ゲスト・ソフトウェアをポーティングまたはリコンパイルすることなく起こり、前記バイナリ変換を提供することは、エミュレートされた前記ゲスト・ソフトウェアの実行とインターリーブする工程と、
を備える方法を実施する、非一時的なコンピュータ可読媒体であって、
前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記特定のゲスト・ハードウェア・アーキテクチャにおいて実行中の前記ゲスト・ソフトウェアによって用いられるレジスタを表現する１セットの仮想レジスタを生成する工程であって、前記仮想レジスタのアドレスは、所定のオフセットを加えたベース・ポインタ（ＲＢＰ）によって参照され、前記１セットの仮想レジスタ内の各仮想レジスタは、前記ネイティブ・クライアント環境内から１つの命令を介してアクセス可能である工程を含み、
前記ネイティブ・クライアント環境は、ホスト・マシンにおいて利用可能であるメモリまたはレジスタ内に記憶された１セットのエミュレートされたゲスト・レジスタにアクセスし、前記ネイティブ・クライアント互換性マシン・コードと関連付けられているデータは前記ネイティブ・クライアント環境内に記憶され、エミュレートされた前記ゲスト・レジスタは、前記特定のゲスト・ハードウェア・アーキテクチャのレジスタに対応し、前記レジスタのサブセットを介して、前記ゲスト・ソフトウェアから前記ネイティブ・クライアント互換性マシン・コードに対して提供される
非一時的なコンピュータ可読媒体。
【請求項１０】
前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記特定のゲスト・ハードウェア・アーキテクチャのフィーチャと前記ゲスト・ソフトウェアのアプリケーション・プログラミング・インターフェース（ＡＰＩ）呼出とを前記ネイティブ・クライアント内でエミュレートする工程を含む、
請求項９に記載の非一時的なコンピュータ可読媒体。
【請求項１１】
前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記ゲスト・ソフトウェア内のコードを前記ネイティブ・クライアント環境との互換性があるコードに置き換える工程を含む、
請求項９に記載の非一時的なコンピュータ可読媒体。
【請求項１２】
前記ゲスト・ソフトウェアは、ＡＲＭソフトウェアまたはｘ８６ソフトウェアを含む、
請求項９に記載の非一時的なコンピュータ可読媒体。
【請求項１３】
前記ネイティブ・クライアント互換性マシン・コードはセキュアおよびポータブルであって、前記ゲスト・ソフトウェアはセキュアでもポータブルでもない、
請求項９に記載の非一時的なコンピュータ可読媒体。
【請求項１４】
１以上のプロセッサと、
命令を含むメモリと、を備えるシステムであって、前記命令は前記１以上のプロセッサによって実行されるときに前記１以上のプロセッサに、
ネイティブ・クライアント環境内で動作するようゲスト・ソフトウェアを受信する工程であって、前記ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャにおける実行用に構成されており、前記ネイティブ・クライアント環境内での実行用には構成されていない工程と、
エミュレーション・ソフトウェアを用いて、前記ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供する工程であって、前記ネイティブ・クライアント互換性マシン・コードは、前記ネイティブ・クライアント環境内で実行され、前記ネイティブ・クライアント互換性マシン・コードはアプリケーション内で実行可能であり、実行用に前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへの前記バイナリ変換を提供することは、時間通りに、エミュレートされたゲスト・ソフトウェアの実行時に、および前記ゲスト・ソフトウェアをポーティングまたはリコンパイルすることなく起こり、前記バイナリ変換を提供することは、エミュレートされた前記ゲスト・ソフトウェアの実行とインターリーブし、前記ネイティブ・クライアント環境は、ホスト・マシンにおいて利用可能であるメモリまたはレジスタ内に記憶された１セットのエミュレートされたゲスト・レジスタにアクセスし、前記ネイティブ・クライアント互換性マシン・コードと関連付けられているデータは前記ネイティブ・クライアント環境内に記憶され、エミュレートされた前記ゲスト・レジスタは、前記特定のゲスト・ハードウェア・アーキテクチャのレジスタに対応し、前記レジスタのサブセットを介して、前記ゲスト・ソフトウェアから前記ネイティブ・クライアント互換性マシン・コードに対して提供される工程と、
を備える方法を実装させる、システム。
【請求項１５】
前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記特定のゲスト・ハードウェア・アーキテクチャにおいて実行中の前記ゲスト・ソフトウェアによって用いられるレジスタを表現する１セットの仮想レジスタを生成する工程であって、前記仮想レジスタのアドレスは、所定のオフセットを加えたベース・ポインタ（ＲＢＰ）によって参照され、前記１セットの仮想レジスタ内の各仮想レジスタは、前記ネイティブ・クライアント環境内から１つの命令を介してアクセス可能である工程を含む、
請求項１４に記載のシステム。
【請求項１６】
前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記特定のゲスト・ハードウェア・アーキテクチャのフィーチャと前記ゲスト・ソフトウェアのアプリケーション・プログラミング・インターフェース（ＡＰＩ）呼出とを前記ネイティブ・クライアント内でエミュレートする工程を含む、
請求項１４に記載のシステム。
【請求項１７】
前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記ゲスト・ソフトウェア内のコードを前記ネイティブ・クライアント環境との互換性があるコードに置き換える工程を含む、
請求項１４に記載のシステム。
【請求項１８】
前記ゲスト・ソフトウェアは、ＡＲＭソフトウェアまたはｘ８６ソフトウェアを含む、
請求項１４に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネイティブ・クライアントへのバイナリ変換に関する。
【背景技術】
【０００２】
本願の技術は、概してバイナリ変換技術を対象とする。いくつかのソフトウェアは、特定のＣＰＵアーキテクチャ（ＡＲＭ（登録商標）またはｘ８６（登録商標）など）や、特定のオペレーション・システム（アンドロイド（登録商標）またはマイクロソフト・ウインドウズ（登録商標）など）用のバイナリ・プログラムとしてコンパイルされる。バイナリ・プログラムは、インターネットを通じてユーザのコンピュータにダウンロードされ得る。しかしながら、ユーザはプログラムを信用しない可能性があり、セキュア・モードにてプログラムを動作させたがる可能性がある。セキュア・モードにおいて、プログラムは、該プログラム外のコンピュータに記憶されたデータに対して限られたアクセスを有する。前述の通り、コンピュータ上で安全にソフトウェアを実行するための方法が望まれ得る。
【０００３】
ネイティブ・クライアントは、コンピュータ上で安全にソフトウェアを実行するために用いられ得る。しかしながら、いくつかのソフトウェアは、ネイティブ・クライアント用に作成されておらず、ネイティブ・クライアントとの互換性がない。そのようなソフトウェアはリコンパイルされ、ネイティブ・クライアントに対してポーティングされる必要があり得る。このことは、いくつかの最近の大型ソフトウェア・プロダクトにとって些細でない労力を必要とし得る。前述の通り、ネイティブ・クライアントとの互換性がないコードをネイティブ・クライアントへと変換することが望まれ得る。
【図面の簡単な説明】
【０００４】
【図１Ａ】ネイティブ・クライアントへのバイナリ変換に関わり得る例示的ゲスト・マシンを示す図。
【図１Ｂ】ネイティブ・クライアントへのバイナリ変換に関わり得る例示的ホスト・マシンを示す図。
【図２】ネイティブ・クライアントへのバイナリ変換が完了し得る例示的プロセスを示す図。
【図３】本願の技術のいくつかの実施形態が実装される電子システムを概念的に示す図。
【発明を実施するための形態】
【０００５】
いくつかの態様によると、本願の技術は方法に関する。前記方法は、ネイティブ・クライアント環境内で動作するようゲスト・ソフトウェアを受信する工程であって、前記ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャにおける実行用に構成されており、前記ネイティブ・クライアント環境内での実行用には構成されていない工程を含む。前記方法は、エミュレーション・ソフトウェアを用いて、前記ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供する工程であって、前記ネイティブ・クライアント互換性マシン・コードは、前記ネイティブ・クライアント環境用のサンドボックス内で実行され、前記ネイティブ・クライアント互換性マシン・コードはアプリケーション内で実行可能であり、前記サンドボックス内での実行用に前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへの前記バイナリ変換を提供することは、時間通りに、エミュレートされたゲスト・ソフトウェアの実行時に、および前記ゲスト・ソフトウェアをポーティングまたはリコンパイルすることなく起こり、前記バイナリ変換を提供することは、エミュレートされた前記ゲスト・ソフトウェアの実行とインターリーブする工程を含む。前記方法は、前記ネイティブ・クライアント互換性マシン・コードを前記ネイティブ・クライアント環境内と前記サンドボックス内とで動作させる工程を含む。
【０００６】
いくつかの態様によると、本願の技術は命令を記憶している非一時的なコンピュータ可読媒体に関する。前記命令は、ネイティブ・クライアント環境内で動作するようゲスト・ソフトウェアを受信するためのコードであって、前記ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャにおける実行用に構成されており、前記ネイティブ・クライアント環境内での実行用には構成されていないコードを含む。前記命令は、エミュレーション・ソフトウェアを用いて、前記ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供するためのコードであって、前記ネイティブ・クライアント互換性マシン・コードは、前記ネイティブ・クライアント互換性マシン・コード用のサンドボックス内で実行され、前記ネイティブ・クライアント互換性マシン・コードはアプリケーション内で実行可能であり、前記サンドボックス内での実行用に前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへの前記バイナリ変換を提供することは、時間通りに、エミュレートされたゲスト・ソフトウェアの実行時に、および前記ゲスト・ソフトウェアをポーティングまたはリコンパイルすることなく起こり、前記バイナリ変換を提供することは、エミュレートされた前記ゲスト・ソフトウェアの実行とインターリーブする工程を含む。前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記特定のゲスト・ハードウェア・アーキテクチャにおいて実行中の前記ゲスト・ソフトウェアによって用いられるレジスタを表現する１セットの仮想レジスタを生成する工程であって、前記仮想レジスタの前記アドレスは、所定のオフセットを加えたベース・ポインタ（ＲＢＰ）によって参照され、前記１セットの仮想レジスタ内の各仮想レジスタは、前記サンドボックス内から１つの命令を介してアクセス可能である工程を含む。
【０００７】
いくつかの態様によると、本願の技術はシステムに関する。前記システムは、１以上のプロセッサと、命令を記憶しているメモリと、を備える。前記命令は、ネイティブ・クライアント環境内で動作するようゲスト・ソフトウェアを受信するためのコードであって、前記ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャにおける実行用に構成されており、前記ネイティブ・クライアント環境内での実行用には構成されていないコードを含む。前記命令は、エミュレーション・ソフトウェアを用いて、前記ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供する工程であって、前記ネイティブ・クライアント互換性マシン・コードは、前記ネイティブ・クライアント環境用のサンドボックス内で実行され、前記ネイティブ・クライアント互換性マシン・コードはアプリケーション内で実行可能であり、前記サンドボックス・ソフトウェア内での実行用に前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへの前記バイナリ変換を提供することは、時間通りに、エミュレートされたゲスト・ソフトウェアの実行時に、および前記ゲスト・ソフトウェアをポーティングまたはリコンパイルすることなく起こり、前記ネイティブ・クライアント環境用の前記サンドボックスは、ホスト・マシンにおいて利用可能であるメモリまたはレジスタ内に記憶された１セットのエミュレートされたゲスト・レジスタにアクセスし、前記ネイティブ・クライアント互換性マシン・コードと関連付けられているデータは前記ネイティブ・クライアント環境用の前記サンドボックス内に記憶され、エミュレートされた前記ゲスト・レジスタは、前記特定のゲスト・ハードウェア・アーキテクチャのレジスタに対応する工程を含む。
【０００８】
本願の技術の様々な構成が例示のために図示および説明される以下の詳細な説明から、本願の技術の他の構成が容易に識別されると理解される。以下から分かるように、本願の技術の範囲を逸脱することなく、本願の技術は他の異なる構成が可能であり、そのいくつかの詳細は他の様々な点において変形が可能である。したがって、図面および詳細な説明は、本質的に例示として考えられるべきものであって、限定として考えられるものではない。
【０００９】
本願の技術の特徴は、添付される請求項に示される。しかしながら、説明の便宜上、本願の技術のいくつかの実施形態は、図１Ａ〜図３に示されている。
以下に示す詳細な説明は、本願の技術の様々な構成の説明を意図し、本願の技術が実施される唯一の構成だけを表すことを意図しない。添付される図面は、本明細書に組み込まれ、詳細な説明の一部を構成する。詳細な説明は、本願の技術の十分な理解を提供するための具体的詳細を含む。しかしながら、本願の技術は本明細書に示される具体的詳細には限定されず、これら具体的詳細なしに実施されることは明白である。いくつかの事例においては、本願の技術の概念を曖昧にすることを避けるために、一定の構造および要素はブロック図で示される。
【００１０】
本明細書で用いられるように、「ネイティブ・クライアント」は、ソフトウェア・フォールト・アイソレーションおよびバイナリ・コード・バリデーションの方法を展開するサンドボックス環境を指し得る。ネイティブ・クライアントは、ポータブル・オペレーティング・システム・インターフェース（ＰＯＳＩＸ）と類似している限られた１セットのアプリケーション・プログラミング・インターフェース（ＡＰＩ）を実装し、ウェブ・ブラウザ内で実行される。「バイナリ変換」は、１つのプラットフォーム（ゲスト）上で実行中のアプリケーションまたはオペレーティング・システムのマシン・コード（呼出ゲスト・コード）を分析し、異なるプラットフォーム（ホスト）上での実行に適したコードを生成するためのメカニズムを指し得る。「プラットフォーム」は、ハードウェアとソフトウェアとのスタックの組み合わせを含み得る。アプリケーションは、典型的には、特定のプラットフォーム（ＡＲＭまたはｘ８６など）用に開発されている。さらに、上記用語の各々は、その平易で通常の意味を包含する。
【００１１】
本願の技術は、ゲスト・プラットフォーム（たとえば、アンドロイドＡＲＭ）用に開発された既存ソフトウェアを、より優れたＡＰＩレベルのポータビリティ、セキュリティ、およびリライアビリティの特徴を有する他のプラットフォーム、すなわち、ホスト・プラットフォーム（たとえばネイティブ・クライアントｘ８６−６４）上で動作させるためのバイナリ変換の手法に関する。ゲスト・プラットフォーム用のアプリケーションは、動的ロード・ライブラリの形式のネイティブ・コンポーネントにアクセスし得るポータブル・プログラミング言語（たとえば、Ｊａｖａ（登録商標））で書かれ得る。ネイティブ・コンポーネントは、共有オブジェクトと称され得る。また、ネイティブ・コンポーネントは、ゲスト・プラットフォームのハードウェア・アーキテクチャとオペレーティング・システムとを用いてゲスト・プラットフォームにおいてコンパイルされ得る。アプリケーションをサポートすべく、ホスト・プラットフォームはＪａｖａとネイティブ・コードとの両方を動作させる必要があり得る。本願の技術は、ノン・ポータブルであるプラットフォーム特有アプリケーション・ライブラリをネイティブ・クライアント・サンドボックス内で動作させることに関する。
【００１２】
本願の技術のいくつかの実施形態においては、ネイティブ・クライアント・サンドボックス内でゲスト・コードを実行するために、ネイティブ・クライアント・サンドボクシング（サンドボックス化）の規則に従ったホスト・コードが生成される。妥当なパフォーマンスを達成するために、最適化手法が適用され得る。最適化手法は、ゲスト・コードのビヘイビアをエミュレートする時間通りのソフトウェア・フォールト・アイソレーション（ＳＦＩ）・コンプライアント・ホスト・コードを生成することを含み得る。最適化手法は、高速ストレージ内のエミュレートされたゲスト・レジスタ（たとえば、ホスト・レジスタまたはベース・ポインタ（ＲＢＰ）関連メモリ内のキャッシュ）を記憶することを含み得る。このようにホスト・コードを生成することによって、エミュレートされたゲスト・コンテキストへのアクセスを明示的にサンドボクシングすることなく高速アクセスを可能にする。最適化手法は、外部プラットフォーム共有オブジェクトに対する呼出を、可能であれば、ホストの共有オブジェクトを用いて、言い換えると、標準ライブラリの上記バイナリ変換を用いて、エミュレートすることを含み得る。このエミュレーション方法は「共有オブジェクト・レベルにおけるバイナリ変換」という名称の、代理人整理番号０９３０５４−０８９３を有して同時出願される米国特許出願に詳述されている。その全ての開示内容は参照することにより本願に組み込まれるものとする。
【００１３】
いくつかの場合、ホスト・プラットフォームは、ゲスト・プラットフォームにおいて利用可能であるいくつかのＡＰＩへのアクセスを有さない可能性がある。その理由には、たとえば、セキュリティ要件がある。利用不可能な機能をエミュレートするための追加手法が用いられる。
【００１４】
いくつかの中央処理装置（ＣＰＵ）のアーキテクチャは、ページ・テーブル内の適切なビット（Ｘビット）を通じて実行可能コードの明示的なマーキングをサポートする。仮想メモリからのコードは、Ｘビットが設定されたときのみ、実行され得る。ネイティブ・クライアント・サンドボックス内からのＸビット・マニピュレーションに対しての直接的なサポートは、いくつかの場合、セキュリティ上の理由により許可されない可能性がある。また、バイナリ変換器によるゲスト・コードの実行は、ゲスト・コード上におけるホストＸビットの存在を考慮に入れないため、そのようなマニピュレーションは、いくつかの場合、所望の効果を有さない可能性がある。Ｘビットのマニピュレーションに関連する機能（たとえば、典型的にはＰＯＳＩＸシステム上でｍｍａｐ（ＰＲＯＴ＿ＥＸＥＣ）ＡＰＩを用いて提供される）をエミュレートするために、ゲストｍｍａｐ（）ＡＰＩによってマニピュレートされる追加構造が、バイナリ変換エンジンによって考慮に入れられる必要があり得る。これは、特定のゲスト・ページが実行可能か否か（たとえば、特定のゲスト・ページがＸビットの組を有するか）を記憶するメモリにおけるビットマップを通じて達成され得る。命令毎の実行に関してビットマップを確認することを避けるべく、Ｘビットの確認は変換時間中に起こり得る。その後、実行可能ページ用のＸビットを変更することによって、コード・キャッシュ・フラッシュを引き起こし得る。
【００１５】
ネイティブ・クライアントは、シグナルのＰＯＳＩＸフィーチャをサポートしない可能性がある。シグナルは、アプリケーション内の例外的な状況（クラッシュまたは実行失敗など）に関する情報を提供するために用いられ得る。シグナルはさらに、ガベージ・コレクションやマネージド言語実行時用に用いられ得る。シグナルを用いるソフトウェアは、いくつかの場合、バイナリ変換エンジンがシグナル・ハンドラの設定とゲスト特有のシグナル・ハンドラに対するシグナルの配信をエミュレートしない限り、ネイティブ・クライアント・サンドボックス内では動作不可能となり得る。したがって、シグナルをエミュレートするために、バイナリ変換エンジンは、アクティブなシグナル・マスクを維持し得る。もしシグナルが配信される予定ならば、バイナリ変換されたソフトウェアのネイティブ・クライアント内での実行は中止される可能性があり、シグナル・ハンドラが実行され得る。シグナル・ハンドラが実行された後、バイナリ変換されたソフトウェアの実行が再開され得る。このシグナルの処理は、バイナリ変換ディスパッチャ内のシグナル・マスクの確認を追加することと、機能ラッピング・メカニズムを用いて適切な引数によってシグナル・ハンドラを明示的に呼び出すこととによって、達成され得る。
【００１６】
ネイティブ・クライアントは、ネイティブ・コンパイルド・コード（たとえば、いくつかの場合においては、コンパイルドＣまたはＣ＋＋コード）をブラウザ内で安全に動作させるためのサンドボクシング技術である。本明細書で用いられるように、用語「サンドボックス」または「サンドボクシング技術」は、プログラムがアクセスし得るメモリ内のスペースを限定することによって動作中プログラムをセパレートするためのコンピュータ・セキュリティ・メカニズムを指し得る。サンドボクシングされたプログラムは、「サンドボックス内の」メモリ領域へはアクセス可能であると言われているが、「サンドボックス外の」メモリ領域へはアクセス不可能であると言われている。サポートがオペレーティング・システム用に実装されている限り、ネイティブ・クライアント・コードは、オペレーティング・システムから独立しており、任意のオペレーティング・システム上で動作可能である。ネイティブ・クライアントによってプログラマは、ブラウザのセキュリティ・フィーチャを維持しつつ、ウェブ・ブラウザを通じて任意のクライアント・システムのネイティブ・コードを開発、ディストリビュート、および実行できるようになる。ネイティブ・クライアントは、サンドボックス内でネイティブ・コードを実行する能力を提供し、ブラウザまたはサンドボックス外のホスト・オペレーティング・システムへの直接的なアクセスを許可しない。ネイティブ・クライアントは、コントロールされたＡＰＩを通じて、ブラウザまたはホスト・オペレーティング・システムへの限られたアクセスを提供し得る。ネイティブ・クライアント互換性マシン・コードへのバイナリ変換によって、正当なサンドボクシングされたアクセスのみ生じることが確実となる。本願の技術の複数の態様はブラウザに関連して本明細書に記載されているが、代替の実施形態においては、ブラウザの代わりに他のアプリケーションが用いられ得る。
【００１７】
本願の技術は、ネイティブ・クライアントとの互換性がないソフトウェアをネイティブ・クライアント互換性マシン・コードに変換する。利点として、ユーザは信頼しないソースからのソフトウェアを動作させることが可能であり、ソフトウェアがサンドボックス内で動作することと、サンドボックス外のユーザのコンピュータに記憶された情報に対して限られたアクセスを有することが確実となり得る。変換が生じるのは、ネイティブ・クライアント内で動作しているエミュレートされたゲスト・ソフトウェアの実行時である。「時間通り」の変換が生じるのは、コードが実行されるコード実行時である。結果として、実行されて変換の必要があるコードのみが、変換される。実行されない一部のコードは変換されない。それにより、時間と処理リソースとをセーブすることになる。バイナリ変換技術は、些細でないポーティング・レイヤを伴って、展開され得る。バイナリ変換器は、ゲスト・ソフトウェアのコードを変換し得る。しかしながら、標準ライブラリ呼出は、エミュレートされたソフトウェア内に提供されたポーティング・レイヤを用いて実行され得る。ポーティング・レイヤは、ゲスト・プラットフォームの予期されたＡＰＩを、ネイティブ・クライアント上の１セットの利用可能なＡＰＩに変換し得る。いくつかの場合、そのような変換は、ネイティブ・クライアント内に存在しないゲスト・ハードウェアのフィーチャをネイティブ・クライアント内でエミュレートすることに加え、同期ブロッキング・ライブラリ呼出をネイティブ・クライアントの非同期ノン・ブロッキング呼出に変換することを含み得る。
【００１８】
バイナリ変換は、ゲスト・ソフトウェアをさらなる照合とサンドボクシングとに適するフォーマットに変換し得る。ソフトウェア・フォールト・アイソレーション（ＳＦＩ）手法は、より優れたポータビリティとセキュリティとを達成するために用いられ得る。
【００１９】
主題の技術は、バイナリ変換の特別な場合とみなされ得る。この場合、ネイティブ・クライアントはホストのオペレーティング・システムであって、結果として、任意のオペレーティング・システム内で実行中のブラウザ内で動作可能なセキュア・プログラムが得られる。ネイティブ・クライアントへの変換の結果、ソフトウェアのセキュリティとポータビリティとの両方が向上する。
【００２０】
バイナリ変換中、コードは、ネイティブ・クライアントの規則との互換性があるフォーマットに変換され得る。たとえば、ネイティブ・クライアントでは、３２の倍数のアドレスを横断する命令が提供されない（言い換えると、命令がバンドル・アライメントされる）ことを必要としている。結果として、バイナリ変換器がマシン・コードを送るとき、バイナリ変換器は、バンドル・バウンダリ（３２の倍数）が決して横断されないことを確実にする。
【００２１】
本願の技術のいくつかの態様において、コンピュータはネイティブ・クライアント環境において動作するようゲスト・ソフトウェアを受信する。ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャ（たとえば、ｘ８６ハードウェアまたはＡＲＭハードウェア）における実行用に構成されている。ゲスト・ソフトウェアは、セキュアでない可能性もあるし、ポータブルでない可能性もある。コンピュータは、ゲスト・ソフトウェアをネイティブ・クライアント互換性マシン・コードに変換する。ネイティブ・クライアント互換性マシン・コードは、ネイティブ・クライアント互換性マシン・コードのホスト・マシンにおいて記憶されたデータに対するアクセスを限定するサンドボックス内で実行される。ネイティブ・クライアント互換性マシン・コードは、セキュアであって、ポータブルであって、ブラウザをサポートする任意のオペレーティング・システム内のブラウザ内で実行可能である。
【００２２】
サンドボックスは、ホスト・マシンにおいて利用可能である１セットのレジスタの１サブセットにアクセス可能であり得る。重要なゲスト・データ（ゲスト・レジスタなど）は、１セットのレジスタの１サブセットを介して、または、該サブセット内のレジスタからのオフセットにおけるメモリ位置を介して、ゲスト・ソフトウェアからネイティブ・クライアント互換性マシン・コードに対して提供され得る。バイナリ変換されたコードはゲスト・レジスタの集中的な使用を必要とし得るので、この方法はネイティブ・クライアント・サンドボックスの要件を依然として満たしつつも、ゲスト・ソフトウェアのエミュレーションのパフォーマンスを高めることができる。
【００２３】
ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、ホスト・ハードウェア・アーキテクチャにおける実行時のゲスト・ソフトウェアによって用いられるレジスタを表す１セットの仮想レジスタを生成することを含み得る。仮想レジスタのアドレスは、所定のオフセットを加えたＲＢＰによって参照され得る。たとえば、レジスタＲ０は位置ＲＢＰにあってもよく、レジスタＲ１は４オフセット・バイトを加えた位置ＲＢＰにあってもよく、レジスタＲ２は８オフセット・バイトを加えた位置ＲＢＰにあってもよい。結果として、該１セットの仮想レジスタ内の各仮想レジスタは、サンドボックス内から１つの命令を介してアクセス可能であり得る。たとえば、書込コマンドがＷＲＩＴＥ（ＰＯＳＩＴＩＯＮ，ＶＡＬＵＥ）というフォーマットを有する場合、値「０」をレジスタＲ２に対して書き込むコマンドは、ＷＲＩＴＥ（ＲＢＰ＋８，０）として書き込まれ得る。該１つの命令は、生成されるコードのパフォーマンスが本手法によって最大化されるため、有益であり得る。ネイティブ・クライアント・サンドボクシング・メカニズムによって、ＲＢＰ関連アドレッシングに関しての特例が許可される。具体的には、１つの（ＲＢＰ＋４＊Ｎ）命令が、レジスタ番号Ｎにアクセスするためのバイナリ変換されたコードにおいて用いられ得る。ＲＢＰレジスタはベースとして用いられる。いくつかの場合、追加サンドボクシング命令は、メモリ・アクセスがサンドボックス内にあることを確実にするために、必要となり得る。
【００２４】
ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、特定のゲスト・ハードウェア・アーキテクチャのフィーチャとゲスト・ソフトウェアのアプリケーション・プログラミング・インターフェース（ＡＰＩ）呼出とをネイティブ・クライアント内でエミュレートすることを含み得る。特定のゲスト・ハードウェア・アーキテクチャのフィーチャは、レジスタ、スタック、ポインタなどを含み得る。ＡＰＩ呼出は、システムＡＰＩまたはゲスト・ソフトウェアに関連付けられているＡＰＩに対する呼出を含み得る。レジスタ、スタック、ポインタなどはエミュレートされる。このことは、ネイティブ・クライアント互換性マシン・コードが、ハードウェア・アイテムと同様に振る舞うが、（関連付けられたハードウェア・コンポーネントのない）プロセッサおよびメモリ上で実行中のソフトウェア内に存在するハードウェア・アイテムのソフトウェア表現を生成することを意味する。エミュレートされたコンポーネントにアクセスする呼出は、ゲスト・マシン上でのフィジカル・コンポーネントにアクセスする呼出と全く同一であるか、類似であり得る。これにより、無修正ゲスト・コードをエミュレートされた環境で動作させることが可能になる。
【００２５】
ネイティブ・クライアント環境内において利用可能でないゲスト・アーキテクチャのいくつかの態様（たとえば、実行可能ビット（Ｘビット）、非同期シグナル処理）をエミュレートするために、追加ソフトウェア・エミュレーション・ロジックが用いられてもよい。たとえば、ネイティブ・クライアントは、実行可能コード領域に対してリベラル・コントロールを行わないか、ｍｍａｐ（ＰＲＯＴ＿ＥＸＥＣ）インターフェースを介してＰＯＳＩＸシステムにとって利用可能ではない。したがって、エミュレーション・ソフトウェアは、追加メカニズムを介して、実行可能ビットに対してのコントロールを実装し得る。エミュレーション・ソフトウェアは、別々のデータ構造を介して、実行可能ゲスト・コードを把握し得る。同様に、ネイティブ・クライアントはシグナル配信をサポートしないので、エミュレーション・ソフトウェアは、シグナルが呼び出されると、保留シグナル・マスクを定期的に確認することと、シグナル・ハンドラを明示的に呼び出すこととによって、非同期シグナルを送信することをサポートし得る。本明細書に用いられている通り、用語「エミュレーション・ソフトウェア」または「エミュレータ」は、ゲスト・ソフトウェアがネイティブ・クライアント環境内で動作することを可能にするソフトウェアを指し得る。
【００２６】
図１Ａは、ネイティブ・クライアントへのバイナリ変換に関わり得る例示的ゲスト・マシン１００Ａを示す。ゲスト・マシン１００Ａは、任意のコンピューティング・デバイス（たとえば、ラップトップ・コンピュータ、デスクトップ・コンピュータ、タブレット・コンピュータ、モバイル・フォン、携帯情報端末（ＰＤＡ）、電子音楽プレイヤ、スマート・ウォッチ、１以上のプロセッサおよびメモリと組み合わせられたテレビなど）であり得る。いくつかの例において、ゲスト・マシン１００Ａは、ＡＲＭハードウェアを有する。それに代えて、ゲスト・マシン１００Ａは、ｘ８６ハードウェアを有し得る。
【００２７】
図示するように、ゲスト・マシン１００Ａは、処理ユニット１０２Ａ、ネットワーク・インターフェース１０４Ａ、およびメモリ１０６Ａを含む。処理ユニット１０２Ａは、１以上のプロセッサを含む。処理ユニット１０２Ａは、中央処理装置（ＣＰＵ）、グラフィックス・プロセッシング・ユニット（ＧＰＵ）、または任意の他の処理ユニットを含み得る。処理ユニット１０２Ａは、コンピュータ可読媒体（たとえば、メモリ１０６Ａ）に記憶されているコンピュータの命令を実行する。ネットワーク・インターフェース１０４Ａは、ゲスト・マシン１００Ａがネットワーク（たとえば、インターネット、イントラネット、セルラ・ネットワーク、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、有線ネットワーク、無線ネットワーク、バーチャル・プライベート・ネットワーク（ＶＰＮ）など）においてデータを送受信することを許可する。メモリ１０６Ａは、データおよび／または命令を記憶する。メモリ１０６Ａは、１以上のキャッシュ・ユニット、ストレージ・ユニット、内部メモリ・ユニット、または外部メモリ・ユニットであり得る。図示するように、メモリ１０６Ａは、ゲスト・レジスタ１０８Ａ、ゲスト・ソフトウェア・プログラム１１０Ａ、およびゲストＡＰＩ１１２Ａを含む。
【００２８】
ゲスト・レジスタ１０８Ａは、ゲスト・マシン１００Ａのハードウェア・アーキテクチャ（たとえば、ＡＲＭまたはｘ８６）に関連付けられているゲスト・マシン１００Ａ上のレジスタである。レジスタ１０８Ａに加えて、メモリ１０６Ａは、他のハードウェア・アーキテクチャ（１または複数のスタック、１または複数のポインタなど）を含み得る。ゲストＡＰＩ１１２Ａは、ゲスト・マシン１００Ａ用にどれかのソフトウェアを用いるゲスト・マシン１００Ａ上に存在するＡＰＩであり、その関連付けられているハードウェア・アーキテクチャが書き込まれ得る。ゲストＡＰＩ１１２Ａは、ゲスト・マシン１００Ａのハードウェアに関連付けられているシステムＡＰＩ、または、ゲスト・ソフトウェア・プログラム１１０Ａとともにゲスト・ソフトウェア・プログラム１１０Ａのベンダによって提供されるベンダＡＰＩを含み得る。
【００２９】
ゲスト・ソフトウェア・プログラム１１０Ａは、ゲスト・マシン１００Ａのハードウェア・アーキテクチャ上における実行用に構成され、ゲスト・レジスタ１０８ＡおよびゲストＡＰＩ１１２Ａとのインターフェースを有するように構成されるソフトウェア・プログラムである。ゲスト・ソフトウェア・プログラム１１０Ａは、ネイティブ・クライアント環境内、または、ゲスト・マシン１００Ａのハードウェア・アーキテクチャとは異なるハードウェア・アーキテクチャ上では、実行不可能であり得る。たとえば、ゲスト・マシン１００ＡがＡＲＭハードウェアを有する場合、ゲスト・ソフトウェア・プログラム１１０Ａは、ＡＲＭハードウェア上における実行用には構成されるが、ｘ８６ハードウェア上における実行用には構成されない。
【００３０】
図１Ｂは、共有オブジェクト・レベルにおけるバイナリ変換に関わり得る例示的ホスト・マシン１００Ｂを示す。ホスト・マシン１００Ｂは、任意のコンピューティング・デバイス（たとえば、ラップトップ・コンピュータ、デスクトップ・コンピュータ、タブレット・コンピュータ、モバイル・フォン、携帯情報端末（ＰＤＡ）、電子音楽プレイヤ、スマート・ウォッチ、１以上のプロセッサおよびメモリ組み合わせられたテレビなど）であり得る。ホスト・マシン１００Ｂは、ゲスト・マシン１００Ａのハードウェア・アーキテクチャとは異なるハードウェア・アーキテクチャを有する。たとえば、ゲスト・マシン１００Ａのハードウェア・アーキテクチャがＡＲＭハードウェアである場合、ホスト・マシン１００Ｂのハードウェア・アーキテクチャはＡＲＭハードウェアではなく、たとえば、ｘ８６ハードウェアであり得る。それに代えて、ホスト・マシン１００Ｂは、ゲスト・マシン１００Ａと同一のハードウェア・アーキテクチャを有し得る。
【００３１】
図示するように、ホスト・マシン１００Ｂは、処理ユニット１０２Ｂ、ネットワーク・インターフェース１０４Ｂ、およびメモリ１０６Ｂを含む。処理ユニット１０２Ｂは、１以上のプロセッサを含む。処理ユニット１０２Ｂは、中央処理装置（ＣＰＵ）、グラフィックス・プロセッシング・ユニット（ＧＰＵ）、または任意の他の処理ユニットを含み得る。処理ユニット１０２Ｂは、コンピュータ可読媒体（たとえば、メモリ１０６Ｂ）に記憶されているコンピュータの命令を実行する。ネットワーク・インターフェース１０４Ｂは、ホスト・マシン１００Ｂがネットワーク（たとえば、インターネット、イントラネット、セルラ・ネットワーク、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、有線ネットワーク、無線ネットワーク、バーチャル・プライベート・ネットワーク（ＶＰＮ）など）内のデータを送受信することを許可する。メモリ１０６Ｂは、データおよび／または命令を記憶する。メモリ１０６Ｂは、１以上のキャッシュ・ユニット、ストレージ・ユニット、内部メモリ・ユニット、または外部メモリ・ユニットであり得る。図示するように、メモリ１０６Ｂは、セキュア・ホスト・レジスタ１１４Ｂ、セキュア・ホスト・コンテンツ１１６Ｂ、およびネイティブ・クライアント・サンドボックス１２０Ｂを含む。
【００３２】
セキュア・ホスト・レジスタ１１４Ｂは、ゲスト・マシン１００Ｂのハードウェア・アーキテクチャ（たとえば、ＡＲＭまたはｘ８６）に関連付けられているホスト・マシン１００Ｂ上のレジスタである。セキュア・ホスト・レジスタ１１４Ｂに加えて、メモリ１０６Ｂは、他のハードウェア・アーキテクチャ（１または複数のスタック、１または複数のポインタなど）を含み得る。セキュア・ホスト・コンテンツ１１６Ｂは、ホスト・マシン１００Ｂ上に記憶されたコンテンツ（ワード処理文書、写真、動画、音声ファイルなど）を含む。セキュア・ホスト・レジスタ１１４Ｂとセキュア・ホスト・コンテンツ１１６Ｂとは、ネイティブ・クライアント・サンドボックス１２０Ｂ外にあり、ネイティブ・クライアント・サンドボックス１２０Ｂからはアクセス不可能である。
【００３３】
ネイティブ・クライアント・サンドボックス１２０Ｂは、ネイティブ・クライアント・コードが実行可能であるメモリ１０６Ｂのセキュア・エリアである。ネイティブ・クライアント・コードは、ネイティブ・クライアント・サンドボックス１２０Ｂ内で実行可能であり得るが、ネイティブ・クライアント・サンドボックス１２０Ｂ外のレジスタまたはデータ（たとえば、セキュア・ホスト・レジスタ１１４Ｂ、セキュア・ホスト・コンテンツ１１６Ｂ）にはアクセスできない可能性がある。このように、ホスト・マシン１００Ｂのユーザは、ホスト・マシン１００Ｂのパーソナル・データとセキュア・レジスタとが信頼できない可能性があるネイティブ・クライアント・コードにアクセス不可能であるということを確実にしつつも、該信頼できない可能性があるネイティブ・クライアント・コードを実行可能であり得る。
【００３４】
図示するように、ネイティブ・クライアント・サンドボックス１２０Ｂは、アクセス可能ホスト・レジスタ１２２Ｂと、エミュレートされたゲスト・レジスタ１０８Ｂと、ネイティブ・クライアント互換性マシン・コード１１０Ｂと、エミュレートされたゲストＡＰＩ１１２Ｂを含む。ネイティブ・クライアント互換性マシン・コード１１０Ｂは、ネイティブ・クライアントにバイナリ変換されたゲスト・ソフトウェア・プログラム１１０Ａに対応する。ネイティブ・クライアント互換性マシン・コード１１０Ｂは、ネイティブ・クライアント・サンドボックス１２０Ｂ内で実行される。他のネイティブ・クライアント・コードと同様に、ネイティブ・クライアント互換性マシン・コード１１０Ｂは、ネイティブ・クライアント・サンドボックス１２０Ｂ外のレジスタまたはデータ（たとえば、セキュア・ホスト・レジスタ１１４Ｂ、セキュア・ホスト・コンテンツ１１６Ｂ）にはアクセスできない可能性がある。ネイティブ・クライアント互換性マシン・コード１１０Ｂは、実質的に任意のハードウェアまたはオペレーティング・システム上において、ブラウザ内で実行可能である。特に、ネイティブ・クライアント互換性マシン・コード１１０Ｂは、ゲスト・マシン１００Ａのハードウェア・アーキテクチャとは異なるハードウェア・アーキテクチャを有し得るホスト・マシン１００Ｂ上で実行され得る。いくつかの場合、ゲスト・ソフトウェア・プログラム１１０Ａのネイティブ・クライアント互換性マシン・コード１１０Ｂへのバイナリ変換は、時間通りに、ネイティブ・クライアント互換性マシン・コード・プログラムの実行時に、およびネイティブ・クライアント互換性マシン・コードをポーティングまたはリコンパイルすることなく起こり得る。結果として、実行されて変換の必要があるコードのみが、変換される。実行されない一部のコードは変換されない。それにより、時間と処理リソースとをセーブすることになる。
【００３５】
エミュレートされたゲスト・レジスタ１０８Ｂは、ネイティブ・クライアント・サンドボックス１２０Ｂ内で実行されるソフトウェアにおいてエミュレートされたゲスト・マシン１００Ａのゲスト・レジスタ１０８Ａに対応する。ゲスト・マシン１００Ａ上で実行中のゲスト・ソフトウェア・プログラム１１０Ａによって用いられている他のハードウェア（１または複数のスタック、１または複数のポインタなど）も、ネイティブ・クライアント・サンドボックス１２０Ｂ内でエミュレートされ得る。レジスタ１０８Ｂはエミュレートされる。このことは、ネイティブ・クライアント互換性マシン・コードが、ハードウェア・アイテムと同様に振る舞うが、（関連付けられたハードウェア・コンポーネントのない）プロセッサおよびメモリ上で実行中のソフトウェア内に存在するハードウェア・アイテムのソフトウェア表現を生成することを意味する。エミュレートされたコンポーネントにアクセスする呼出は、ゲスト・マシン上のフィジカル・コンポーネントにアクセスする呼出と同一あるいは類似し得る。これにより、ゲスト・マシン１００Ａからネイティブ・クライアント・サンドボックス１２０Ｂに対してコードが容易にポーティングされることを可能にする。いくつかの場合、ゲスト・ソフトウェア・プログラム１１０Ａのコードは、ネイティブ・クライアント環境との互換性があるコードに置き換えられる。
【００３６】
エミュレートされたゲストＡＰＩ１１２Ｂは、ネイティブ・クライアント・サンドボックス１２０Ｂ内で実行されるソフトウェアにおいてバイナリ変換またはエミュレートされたゲスト・マシン１００ＡのゲストＡＰＩ１１２Ａに対応する。エミュレートされたゲストＡＰＩ１１２Ｂは、ゲスト・マシン１００Ａのハードウェアに関連付けられているシステムＡＰＩ、または、ゲスト・ソフトウェア・プログラム１１０Ａとともにゲスト・ソフトウェア・プログラム１１０Ａのベンダによって提供されるベンダＡＰＩのエミュレーションを含み得る。ゲスト・ソフトウェア・プログラム１１０Ａがゲスト・マシン１００Ａにおいてゲスト・レジスタ１０８ＡとゲストＡＰＩ１１２Ａとにアクセスする方法と同様に、対応するネイティブ・クライアント互換性マシン・コード１１０Ｂは、ネイティブ・クライアント・サンドボックス１２０Ｂにおいてエミュレートされたゲスト・レジスタ１０８ＢとエミュレートされたゲストＡＰＩ１１２Ｂとにアクセスし得る。
【００３７】
ネイティブ・クライアント・サンドボックス１２０Ｂはさらに、アクセス可能ホスト・レジスタ１２２Ｂを含む。アクセス可能ホスト・レジスタ１２２Ｂは、ネイティブ・クライアント・サンドボックス１２０Ｂ内で実行中であるネイティブ・クライアント互換性マシン・コード１１０Ｂを含む、ネイティブ・クライアント・サンドボックス１２０Ｂ内からソフトウェアにアクセス可能であるホスト・マシン１００Ｂのレジスタである。ホスト・マシンのレジスタは、ネイティブ・クライアント互換性マシン・コードにアクセス不可能であるセキュア・ホスト・レジスタ１１４Ｂであり得るか、ネイティブ・クライアント互換性マシン・コードによってアクセスされ得るアクセス可能ホスト・レジスタ１２２Ｂであり得る。
【００３８】
図２は、ネイティブ・クライアントへのバイナリ変換が完了し得る例示的プロセス２００を示す。
プロセス２００は工程２１０において開始する。工程２１０において、ホスト・マシン（たとえば、ホスト・マシン１００Ｂ）は、ネイティブ・クライアント環境（たとえば、ネイティブ・クライアント・サンドボックス１２０Ｂ）内で動作するようゲスト・ソフトウェア（たとえば、ゲスト・ソフトウェア・プログラム１１０Ａ）を受信する。ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャ（たとえば、ゲスト・マシン１００Ａ）における実行用に構成されており、ネイティブ・クライアント環境内での実行用には構成されていない。ネイティブ・クライアント環境は、複数の異なるハードウェア・アーキテクチャのうち任意の１つの内での実行用に構成されている。たとえば、ネイティブ・クライアント環境は、複数の異なるハードウェア・アーキテクチャのうち任意の１つの内に存在し得るアプリケーション（ブラウザなど）内での実行用に構成されている。
【００３９】
工程２２０において、ホスト・マシンは、エミュレーション・ソフトウェアを用いて、ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コード（ネイティブ・クライアント互換性マシン・コード１１０Ｂ）へのバイナリ変換を提供する。ネイティブ・クライアント互換性マシン・コードは、ネイティブ・クライアント環境用のサンドボックス（たとえば、ネイティブ・クライアント・サンドボックス１２０Ｂ）内で実行される。ネイティブ・クライアント互換性マシン・コードは、アプリケーション（ブラウザなど）内で実行可能である。ゲスト・ソフトウェア・プログラムのサンドボックス内での実行用にゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、時間通りに、エミュレートされたゲスト・ソフトウェアの実行時に、およびゲスト・ソフトウェアをポーティングまたはリコンパイルすることなく起こり得る。バイナリ変換を提供することは、エミュレートされたゲスト・ソフトウェアの実行とインターリーブする。
【００４０】
ゲスト・ソフトウェアは、たとえば、ＡＲＭハードウェア・システムまたはｘ８６ハードウェア・システム上での実行用に設計されているＡＲＭソフトウェアまたはｘ８６ソフトウェアを含む。ゲスト・ソフトウェア内のいくつかのコードは、ネイティブ・クライアント・コードまたはネイティブ・クライアントとの互換性があるコードと置き換えられ得る。ゲスト・ソフトウェアは、いくつかの場合、セキュアでない可能性もあるし、ポータブルでない可能性もある。ネイティブ・クライアント互換性マシン・コードは、セキュアであり得るし、ポータブルであり得る。ゲスト・ソフトウェアは、特定のオペレーティング・システム内のみでの実行用に構成され得る。ネイティブ・クライアント環境は、複数のオペレーティング・システムのうちの任意の１つの内で実行可能であり得る。
【００４１】
ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、特定のゲスト・ハードウェア・アーキテクチャにおいて実行中のゲスト・ソフトウェアによって用いられるレジスタ（たとえば、ゲスト・レジスタ１０８Ａ）を表現する１セットの仮想レジスタ（たとえば、エミュレートされたゲスト・レジスタ１０８Ｂ）を生成することを含み得る。仮想レジスタのアドレスは、所定のオフセットを加えたベース・ポインタ（ＲＢＰ）によって参照され得る。オフセット手法を加えたＲＢＰの結果として、各レジスタは、サンドボックス内から１つの命令を介してアクセス可能であり得る。たとえば、レジスタＲ０はアドレスＲＢＰにある可能性があり、レジスタＲ１はアドレスＲＢＰ＋４にある可能性があり、レジスタＲ２はアドレスＲＢＰ＋８にある可能性があり、レジスタＲｎはアドレスＲＢＰ＋４ｎにある可能性がある（ｎは整数である）。
【００４２】
ゲスト・ソフトウェア・プログラムのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、ゲスト・ハードウェア・アーキテクチャのフィーチャと、ゲスト・ソフトウェアのＡＰＩ呼出とをネイティブ・クライアント内でエミュレートすることを含み得る。ゲスト・ハードウェア・アーキテクチャからのシステムＡＰＩまたはベンダＡＰＩは、ネイティブ・クライアント・サンドボックス内での実行用にバイナリ変換され得る。それに代えて、ゲスト・ハードウェア・アーキテクチャのシステムＡＰＩのいくつかは、ネイティブ・クライアント・サンドボックスのシステムＡＰＩに置き換えられ得る。
【００４３】
バイナリ変換時、ゲスト・ソフトウェアは、ネイティブ・クライアントの規則との互換性があるフォーマットに変換され得る。たとえば、ネイティブ・クライアントは、３２で割り切れるアドレスを横断する命令が提供されないことを必要とする。これらの場合、３２で割り切れるアドレスは、「バンドル・バウンダリ」と称され得る。エミュレータによって生成された全ての命令は、バンドル・バウンダリを横断しないように送られ、何もしない（ＮＯＰ）命令が詰め込まれる。ネイティブ・クライアント環境用のサンドボックスは、ホスト・マシンにおいて利用可能であるメモリまたはレジスタ内に記憶された１セットのエミュレートされたゲスト・レジスタにアクセスする。ネイティブ・クライアント互換性マシン・コードと関連付けられているデータは、ネイティブ・クライアント環境用のサンドボックス内に記憶される。エミュレートされたゲスト・レジスタは、特定のゲスト・ハードウェア・アーキテクチャのレジスタに対応する。
【００４４】
工程２３０において、ホスト・マシンは、ネイティブ・クライアント互換性マシン・コードをネイティブ・クライアント環境内とサンドボックス内とで動作させる。ネイティブ・クライアント互換性マシン・コードは、ネイティブ・クライアント・サンドボックス内のレジスタおよびデータにアクセスできる可能性があるが、ネイティブ・クライアント・サンドボックス外のレジスタおよびデータにアクセスできない可能性がある。サンドボクシングされたソフトウェアは、ホストのレジスタ内またはメモリ内に一時的に記憶されたエミュレートされたゲスト・レジスタにアクセスする。工程２３０の後、プロセス２００が終了する。
【００４５】
上述の通り、プロセス２００の工程２１０〜２３０は、一定の順番に従って且つ連続して実行される。しかしながら、工程２１０〜２３０は任意の順番で実行され得る。いくつかの例において、工程２１０〜２３０のうち２つ以上が並行して実行され得る。
【００４６】
図３は、本願の技術のいくつかの実施形態が実装される電子システムを概念的に示す。たとえば、１以上のゲスト・マシン１００Ａまたはホスト・マシン１００Ｂが、電子システム３００の配置を用いて実装されてもよい。電子システム３００は、コンピュータ（たとえば、モバイル・フォン、ＰＤＡ）であってもよいし、他の任意の電子デバイスであってもよい。このような電子システムは、様々な種類のコンピュータ可読媒体と、他の様々な種類のコンピュータ可読媒体に関するインターフェースとを含む。電子システム３００は、バス３０５、１または複数のプロセッサ３１０、システム・メモリ３１５、読出専用メモリ３２０、パーマネント・ストレージ・デバイス３２５、入力デバイス・インターフェース３３０、出力デバイス・インターフェース３３５、およびネットワーク・インターフェース３４０を含む。
【００４７】
バス３０５は、電子システム３００の多数の内部デバイスを通信可能に接続する全てのシステムと、周辺機器と、チップセット・バスとを集合的に表す。たとえば、バス３０５は、１または複数のプロセッサ３１０を、読出専用メモリ３２０と、システム・メモリ３１５と、パーマネント・ストレージ・デバイス３２５とに通信可能に接続する。
【００４８】
１または複数のプロセッサ３１０は、本願の技術のプロセスを実行するために、これらの様々なメモリ・ユニットから実行対象の命令と処理対象のデータとを取り出す。１または複数のプロセッサは、異なる実施形態において、単一のプロセッサを含んでもよいし、マルチコア・プロセッサを含んでもよい。
【００４９】
読出専用メモリ（ＲＯＭ）３２０は、１または複数のプロセッサ３１０と電子システムの他のモジュールとによって必要とされる静的データと命令とを記憶する。一方、パーマネント・ストレージ・デバイス３２５は、読出／書込メモリデバイスである。このデバイスは、電子システム３００がオフであるときでも命令とデータとを記憶する不揮発性メモリ・ユニットである。本願の技術のいくつかの実施形態では、パーマネント・ストレージ・デバイス３２５としてマス・ストレージ・デバイス（たとえば、磁気または光ディスク、および、対応するディスク・ドライブ）が用いられる。
【００５０】
他の実施形態では、パーマネント・ストレージ・デバイス３２５としてリムーバブル・ストレージ・デバイス（たとえば、フロッピー（登録商標）・ディスク、フラッシュ・ドライブ、ディスク・ドライブ）が用いられる。システム・メモリ３１５は、パーマネント・ストレージ・デバイス３２５と同様に、読出／書込メモリデバイスである。しかしながら、システム・メモリ３１５は、ストレージ・デバイス３２５とは異なり、揮発性読出／書込メモリ（たとえば、ランダムアクセスメモリ）である。システム・メモリ３１５は、実行時においてプロセッサが必要とする命令とデータとのいくつかを記憶する。いくつかの実施形態においては、本願の技術のプロセスは、システム・メモリ３１５、パーマネント・ストレージ・デバイス３２５、または読出専用メモリ３２０に記憶される。たとえば、様々なメモリ・ユニットは、いくつかの実施形態に従ってネイティブ・クライアントへのバイナリ変換に関する命令を含む。１または複数のプロセッサ３１０は、いくつかの実施形態のプロセスを実行するために、これらの様々なメモリ・ユニットから実行予定の命令と処理予定のデータとを取り出す。
【００５１】
さらにバス３０５は、入力デバイス・インターフェース３３０と出力デバイス・インターフェース３３５とに接続する。入力デバイス・インターフェース３３０によって、ユーザが情報を通信し、電子システムに対するコマンドを選択することが可能になる。入力デバイス・インターフェース３３０とともに用いられる入力デバイスは、たとえば、英数字キーボード、ポインティング・デバイス（「カーソル・コントロール・デバイス」とも称される）を含む。出力デバイス・インターフェース３３５によって、たとえば、電子システム３００によって生成された画像の表示が可能になる。出力デバイス・インターフェース３３５とともに用いられる出力デバイスは、たとえば、プリンタ、ディスプレイ・デバイス（ブラウン管（ＣＲＴ）または液晶ディスプレイ（ＬＣＤ）など）を含む。いくつかの実施形態は、入力および出力デバイスの両方として機能するタッチ・スクリーンなどのデバイスを含む。
【００５２】
最後に、図３に示すように、バス３０５はさらに電子システム３００を、ネットワーク・インターフェース３４０を介して図示しないネットワークに接続する。このように、コンピュータは、コンピュータのネットワーク（たとえば、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、イントラネット）の一部、または、複数のネットワークのうちの１つのネットワーク（たとえば、インターネット）であってもよい。任意の、または、すべての電子システム３００の要素が、本願の技術とともに用いられる。
【００５３】
上述のフィーチャおよびアプリケーションは、コンピュータ可読記憶媒体（コンピュータ可読媒体とも称される）上に記録される一組の命令として記述されるソフトウェアプロセスとして実装される。これらの命令が１以上のプロセッサ（たとえば、１以上のプロセッサ、プロセッサ・コア、他の処理ユニットを含み得る）によって実行されるとき、これらの命令によって、プロセッサは当該命令に示されるアクションを行う。コンピュータ可読媒体の例として、ＣＤ−ＲＯＭ、フラッシュ・ドライブ、ＲＡＭチップ、ハード・ドライブ、ＥＰＲＯＭが含まれるが、コンピュータ可読媒体の例はこれらに限定されない。コンピュータ可読媒体は、無線または有線接続で送出される搬送波および電子信号を含まない。
【００５４】
本明細書においては、用語「ソフトウェア」は、読出専用メモリ内のファームウェア、または、プロセッサによって処理を行うためのメモリに読み込まれる磁気ストレージまたはフラッシュ・ストレージ（たとえば、ソリッド・ステート・ドライブ）を含むことが意図されている。また、いくつかの実施形態では、本願の技術の複数のソフトウェア技術は、区別がなされる本願の技術のソフトウェア態様でありつつ、より大きなプログラムの下位区分として実装される。いくつかの実施形態では、複数のソフトウェア技術は別個のプログラムとして実装される。そして、本明細書に記載されるソフトウェア態様を同時に実装する別個のプログラムは、いずれも本願の技術の範囲内にある。いくつかの実施形態では、ソフトウェア・プログラムは、インストールされて１以上の電子システムを操作する際、該ソフトウェア・プログラムの操作を実行する１以上の特定の機械の実装を規定する。
【００５５】
コンピュータ・プログラム（プログラム、ソフトウェア、ソフトウェア・アプリケーション、スクリプト、またはコードとも称される）は、任意の形式のプログラミング言語（たとえば、コンパイル済みまたはインタプリット済み言語、宣言型言語または手続型言語）で書かれてもよく、どのような形式で配置されてもよい（たとえば、スタンドアロン・プログラム、モジュール、コンポーネント、サブルーチン、オブジェクト、コンピューティング環境においての使用が相応しい他のユニットを含む）。コンピュータ・プログラムは、ファイルシステム内のファイルに対応してもよいが、これに限定されない。プログラムは、他のプログラムやデータを保持するファイルの一部分（マークアップ言語ドキュメントに記憶される１以上のスクリプト）、対象プログラム専用の１つのファイル、または複数の調整ファイル（たとえば、１以上のモジュール、サブプログラム、コードを部分的に記憶するファイル）に記憶される。コンピュータ・プログラムは、１つのサイトに位置するか、もしくは複数のサイトに広がり、通信ネットワークによって相互接続される１つのコンピュータまたは複数のコンピュータ上で実行されるように配置される。
【００５６】
これら上述の機能は、デジタル電子回路、コンピュータソフトウェア、ファームウェア、またはハードウェアにより実装されることができる。上述の手法は、１以上のコンピュータ・プログラム製品を用いて実装される。プログラマブル・プロセッサおよびコンピュータは、モバイルデバイスに含まれてもよいし、モバイルデバイスとしてパッケージされてもよい。プロセスおよびロジックフローは、１以上のプログラマブル・プロセッサと１以上のプログラマブル論理回路とによって行われる。汎用および専用のデバイスと、ストレージ・デバイスとは、通信ネットワークを通じて相互接続される。
【００５７】
いくつかの実施形態は電子部品（たとえば、機械可読またはコンピュータ可読媒体（あるいは、コンピュータ可読記憶媒体、機械可読媒体、機械可読記憶媒体とも称される）におけるコンピュータ・プログラムの命令を記憶するマイクロプロセッサ、ストレージ、メモリ）を含む。このようなコンピュータ可読媒体のいくつかの例には、ＲＡＭ、ＲＯＭ、読出専用コンパクト・ディスク（ＣＤ−ＲＯＭ）、記録可能コンパクト・ディスク（ＣＤ−Ｒ）、書換可能コンパクト・ディスク（ＣＤ−ＲＷ）、読出専用デジタル多用途ディスク（たとえば、ＤＶＤ−ＲＯＭ、２層ＤＶＤ−ＲＯＭ）、種々の記録可能／書換可能ＤＶＤ（たとえば、ＤＶＤ−ＲＡＭ、ＤＶＤ−ＲＷ、ＤＶＤ＋ＲＷ）、フラッシュ・メモリ（たとえば、ＳＤカード、ミニＳＤカード、マイクロＳＤカード）、磁気またはソリッド・ステート・ハード・ドライブ、読出専用および記録可能Ｂｌｕ−ｒａｙ（登録商標）ディスク、超高密度光ディスク、他の任意の光または磁気メディア、フロッピー・ディスクが含まれる。コンピュータ可読媒体は、少なくとも１つのプロセッサにより実行可能であって、様々な操作を行うための複数組の命令を含むコンピュータ・プログラムを記憶できる。コンピュータ・プログラムまたはコンピュータ・コードの例には、たとえばコンパイラによって生成されるマシン・コードと、インタプリタを用いてコンピュータ、電子部品、またはマイクロプロセッサによって実行される、より高レベルのコードを含むファイルと、が含まれる。
【００５８】
上記議論はソフトウェアを実行するマイクロプロセッサまたはマルチコア・プロセッサを指しているが、いくつかの実施形態は１以上の集積回路（たとえば、特定用途向け集積回路（ＡＳＩＣ）またはフィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ））によって実行される。いくつかの実施形態では、このような集積回路は回路上自体に記憶される命令を実行する。
【００５９】
本明細書および本願の任意の請求項で用いられる通り、用語「コンピュータ」、「サーバ」、「プロセッサ」および「メモリ」はすべて、電子または他の技術分野のデバイスのことを指す。これらの用語から、人または人の集団は除外される。本明細書上では、用語「表示」または「表示する」は、電子デバイス上での表示を意味する。本明細書および本願の任意の請求項で用いられる通り、用語「コンピュータ可読媒体」「複数のコンピュータ可読媒体」は全体として、コンピュータによって読み込まれる形式の情報を記憶する有形の物理的な物体に限定される。これらの用語から、無線信号、有線ダウンロード信号、および他の任意の一時的な信号は除外される。
【００６０】
ユーザとの対話を提供するため、本明細書に記載される主題の実施形態は、ユーザに対して情報を表示するためのディスプレイ・デバイス（たとえば、ＣＲＴ（ブラウン管）またはＬＣＤ（液晶ディスプレイ）モニタ）と、キーボードと、ユーザがコンピュータに対して入力を提供できるポインティング・デバイス（たとえば、マウスまたはトラックボール）と、を有するコンピュータ上で実施可能である。他の種類のデバイスも同様に、ユーザとの対話を提供するために用いられる。たとえば、ユーザに対して提供されるフィードバックは、任意の形式の感覚フィードバック（たとえば、視覚フィードバック、聴覚フィードバック、触覚フィードバックなど）であってよいし、ユーザからの入力は任意の形式（音響、音声または触覚入力を含む）で受信されてよい。さらに、ユーザによって用いられるデバイスに対してドキュメントを送信し、該デバイスからドキュメントを受信することによって（たとえば、ユーザのクライアント・デバイス上でウェブ・ブラウザに対して、該ウェブ・ブラウザから受信したリクエストに応じてウェブページを送信することによって）、コンピュータはユーザとの対話が可能になる。
【００６１】
本明細書に記載される主題は、バックエンドコンポーネント（たとえば、データサーバ）、ミドルウェアコンポーネント（たとえば、アプリケーションサーバ）、フロントエンドコンポーネント（たとえば、ユーザの本明細書に記載される主題の実施形態との対話を可能にするグラフィカルユーザインターフェースまたはウェブ・ブラウザを有するクライアントコンピュータ）、または、このようなバックエンド、ミドルウェア、およびフロントエンドコンポーネントのうち１以上の任意の組み合わせを含むコンピューティング・システムにおいて実施可能である。該システムのコンポーネントは、デジタルデータ通信の任意の形式または媒体（たとえば、通信ネットワーク）によって相互接続される。通信ネットワークの例には、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、インターネットワーク（たとえば、インターネット）、および、ピアツーピアネットワーク（たとえば、アドホックピアツーピアネットワーク）が含まれる。
【００６２】
コンピューティング・システムには、クライアントおよびサーバが含まれる。クライアントおよびサーバは一般的には互いにリモートであり、典型的には通信ネットワークを介して対話する。クライアントおよびサーバの関係が生じるのは、各コンピュータ上で動作しており、互いにクライアント／サーバ関係を有するコンピュータ・プログラムを介してである。いくつかの開示される主題の態様においては、サーバがデータ（たとえば、ＨＴＭＬページ）をクライアント・デバイスに対して（たとえば、該クライアント・デバイスとの対話を行うユーザに対してデータを表示する目的、および、該ユーザからユーザ入力を受信する目的で）送信する。クライアント・デバイスにおいて生成されたデータ（たとえば、ユーザ対話の結果）は、サーバにおいてクライアント・デバイスから受信される。
【００６３】
開示されるプロセスにおける工程の任意の特定の順番または階層は例示的アプローチの実例である、と理解される。デザインの嗜好に基づいて、プロセスにおける工程の特定の順番または階層は再配置されてもよい、図示される全ての工程が実行されてもよい、と理解される。いくつかの工程は同時に実行されてもよい。たとえば、ある状況においては、マルチタスキングおよびパラレル・プロセッシングは効果的である。さらに、上述の様々なシステム・コンポーネントの分離については、そのような分離が必須であるとして理解されるべきではない。上述のプログラム・コンポーネントおよびシステムは一般的に１つのソフトウェア製品に統合される、または、複数のソフトウェア製品にパッケージされる、と理解されるべきである。
【００６４】
これらの態様に対する様々な修正形態は容易に識別され、本明細書に規定される包括的な原則は他の態様にも適用される。従って、本請求項は、本明細書に示される態様に限定される意図はなく、請求項の文言と一致する全ての範囲が付与され、単数である要素への参照は「１および１のみ」であることを（そのように特定的に記述されている場合を除いて）意味するのではなく、「１以上」を意味する。用語「いくつか」は、（特定的に記述する場合を除いて）１以上を指す。男性の指示代名詞（たとえば、「彼の」）は、女性および中性（たとえば、「彼女の」「その」）を含み、その逆も同様である。見出しおよび小見出しは、それらがある場合にしても、便宜上用いられているだけであって、本願の技術を限定するものではない。
【００６５】
たとえば「態様」という語句は、その態様が本願の技術に必要不可欠であること、その態様が本願の技術の全ての構成に適用されること、を暗示しない。態様に関する開示は、全ての構成または１以上の構成に適用される。たとえば態様という語句は、１以上の態様を指してもよいし、その逆も同様である。たとえば「構成」という語句は、そのような構成が本願の技術に必要不可欠であること、その態様が本願の技術の全ての構成に適用されること、を暗示しない。態様に関する開示は、全ての構成または１以上の構成に適用される。たとえば構成という語句は、１以上の構成を指してもよいし、その逆も同様である。
【図１Ａ】
0006678185.tif 000002
【図１Ｂ】
0006678185.tif 000003
【図２】
0006678185.tif 000004
【図３】
0006678185.tif 000005