JP2018510433A - ネイティブ・クライアントへのバイナリ変換 - Google Patents

ネイティブ・クライアントへのバイナリ変換 Download PDF

Info

Publication number
JP2018510433A
JP2018510433A JP2017551221A JP2017551221A JP2018510433A JP 2018510433 A JP2018510433 A JP 2018510433A JP 2017551221 A JP2017551221 A JP 2017551221A JP 2017551221 A JP2017551221 A JP 2017551221A JP 2018510433 A JP2018510433 A JP 2018510433A
Authority
JP
Japan
Prior art keywords
guest
native client
software
guest software
machine code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017551221A
Other languages
English (en)
Other versions
JP6678185B2 (ja
Inventor
エリツィン、エフゲニー
イゴッティ、ニコライ
ハルヤビン、アンドレイ
ポルヒン、ドミトリー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of JP2018510433A publication Critical patent/JP2018510433A/ja
Application granted granted Critical
Publication of JP6678185B2 publication Critical patent/JP6678185B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM

Abstract

バイナリ変換用のシステムと方法とが開示される。いくつかの実施形態において、ネイティブ・クライアント環境内で動作するようゲスト・ソフトウェアが受信される。前記ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャにおける実行用に構成されており、前記ネイティブ・クライアント環境内での実行用には構成されていない。エミュレーション・ソフトウェアを用いて、前記ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換が提供される。前記ネイティブ・クライアント互換性マシン・コードは、前記ネイティブ・クライアント環境用のサンドボックス内で実行される。前記ネイティブ・クライアント互換性マシン・コードはアプリケーション内で実行可能である。前記サンドボックス内での実行用に前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへの前記バイナリ変換を提供することは、時間通りに、エミュレートされたゲスト・ソフトウェアの実行時に、および前記ゲスト・ソフトウェアをポーティングまたはリコンパイルすることなく起こる。前記バイナリ変換を提供することは、エミュレートされた前記ゲスト・ソフトウェアの実行とインターリーブする。

Description

本発明は、ネイティブ・クライアントへのバイナリ変換に関する。
本願の技術は、概してバイナリ変換技術を対象とする。いくつかのソフトウェアは、特定のCPUアーキテクチャ(ARM(登録商標)またはx86(登録商標)など)や、特定のオペレーション・システム(アンドロイド(登録商標)またはマイクロソフト・ウインドウズ(登録商標)など)用のバイナリ・プログラムとしてコンパイルされる。バイナリ・プログラムは、インターネットを通じてユーザのコンピュータにダウンロードされ得る。しかしながら、ユーザはプログラムを信用しない可能性があり、セキュア・モードにてプログラムを動作させたがる可能性がある。セキュア・モードにおいて、プログラムは、該プログラム外のコンピュータに記憶されたデータに対して限られたアクセスを有する。前述の通り、コンピュータ上で安全にソフトウェアを実行するための方法が望まれ得る。
ネイティブ・クライアントは、コンピュータ上で安全にソフトウェアを実行するために用いられ得る。しかしながら、いくつかのソフトウェアは、ネイティブ・クライアント用に作成されておらず、ネイティブ・クライアントとの互換性がない。そのようなソフトウェアはリコンパイルされ、ネイティブ・クライアントに対してポーティングされる必要があり得る。このことは、いくつかの最近の大型ソフトウェア・プロダクトにとって些細でない労力を必要とし得る。前述の通り、ネイティブ・クライアントとの互換性がないコードをネイティブ・クライアントへと変換することが望まれ得る。
ネイティブ・クライアントへのバイナリ変換に関わり得る例示的ゲスト・マシンを示す図。 ネイティブ・クライアントへのバイナリ変換に関わり得る例示的ホスト・マシンを示す図。 ネイティブ・クライアントへのバイナリ変換が完了し得る例示的プロセスを示す図。 本願の技術のいくつかの実施形態が実装される電子システムを概念的に示す図。
いくつかの態様によると、本願の技術は方法に関する。前記方法は、ネイティブ・クライアント環境内で動作するようゲスト・ソフトウェアを受信する工程であって、前記ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャにおける実行用に構成されており、前記ネイティブ・クライアント環境内での実行用には構成されていない工程を含む。前記方法は、エミュレーション・ソフトウェアを用いて、前記ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供する工程であって、前記ネイティブ・クライアント互換性マシン・コードは、前記ネイティブ・クライアント環境用のサンドボックス内で実行され、前記ネイティブ・クライアント互換性マシン・コードはアプリケーション内で実行可能であり、前記サンドボックス内での実行用に前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへの前記バイナリ変換を提供することは、時間通りに、エミュレートされたゲスト・ソフトウェアの実行時に、および前記ゲスト・ソフトウェアをポーティングまたはリコンパイルすることなく起こり、前記バイナリ変換を提供することは、エミュレートされた前記ゲスト・ソフトウェアの実行とインターリーブする工程を含む。前記方法は、前記ネイティブ・クライアント互換性マシン・コードを前記ネイティブ・クライアント環境内と前記サンドボックス内とで動作させる工程を含む。
いくつかの態様によると、本願の技術は命令を記憶している非一時的なコンピュータ可読媒体に関する。前記命令は、ネイティブ・クライアント環境内で動作するようゲスト・ソフトウェアを受信するためのコードであって、前記ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャにおける実行用に構成されており、前記ネイティブ・クライアント環境内での実行用には構成されていないコードを含む。前記命令は、エミュレーション・ソフトウェアを用いて、前記ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供するためのコードであって、前記ネイティブ・クライアント互換性マシン・コードは、前記ネイティブ・クライアント互換性マシン・コード用のサンドボックス内で実行され、前記ネイティブ・クライアント互換性マシン・コードはアプリケーション内で実行可能であり、前記サンドボックス内での実行用に前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへの前記バイナリ変換を提供することは、時間通りに、エミュレートされたゲスト・ソフトウェアの実行時に、および前記ゲスト・ソフトウェアをポーティングまたはリコンパイルすることなく起こり、前記バイナリ変換を提供することは、エミュレートされた前記ゲスト・ソフトウェアの実行とインターリーブする工程を含む。前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記特定のゲスト・ハードウェア・アーキテクチャにおいて実行中の前記ゲスト・ソフトウェアによって用いられるレジスタを表現する1セットの仮想レジスタを生成する工程であって、前記仮想レジスタの前記アドレスは、所定のオフセットを加えたベース・ポインタ(RBP)によって参照され、前記1セットの仮想レジスタ内の各仮想レジスタは、前記サンドボックス内から1つの命令を介してアクセス可能である工程を含む。
いくつかの態様によると、本願の技術はシステムに関する。前記システムは、1以上のプロセッサと、命令を記憶しているメモリと、を備える。前記命令は、ネイティブ・クライアント環境内で動作するようゲスト・ソフトウェアを受信するためのコードであって、前記ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャにおける実行用に構成されており、前記ネイティブ・クライアント環境内での実行用には構成されていないコードを含む。前記命令は、エミュレーション・ソフトウェアを用いて、前記ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供する工程であって、前記ネイティブ・クライアント互換性マシン・コードは、前記ネイティブ・クライアント環境用のサンドボックス内で実行され、前記ネイティブ・クライアント互換性マシン・コードはアプリケーション内で実行可能であり、前記サンドボックス・ソフトウェア内での実行用に前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへの前記バイナリ変換を提供することは、時間通りに、エミュレートされたゲスト・ソフトウェアの実行時に、および前記ゲスト・ソフトウェアをポーティングまたはリコンパイルすることなく起こり、前記ネイティブ・クライアント環境用の前記サンドボックスは、ホスト・マシンにおいて利用可能であるメモリまたはレジスタ内に記憶された1セットのエミュレートされたゲスト・レジスタにアクセスし、前記ネイティブ・クライアント互換性マシン・コードと関連付けられているデータは前記ネイティブ・クライアント環境用の前記サンドボックス内に記憶され、エミュレートされた前記ゲスト・レジスタは、前記特定のゲスト・ハードウェア・アーキテクチャのレジスタに対応する工程を含む。
本願の技術の様々な構成が例示のために図示および説明される以下の詳細な説明から、本願の技術の他の構成が容易に識別されると理解される。以下から分かるように、本願の技術の範囲を逸脱することなく、本願の技術は他の異なる構成が可能であり、そのいくつかの詳細は他の様々な点において変形が可能である。したがって、図面および詳細な説明は、本質的に例示として考えられるべきものであって、限定として考えられるものではない。
本願の技術の特徴は、添付される請求項に示される。しかしながら、説明の便宜上、本願の技術のいくつかの実施形態は、図1A〜図3に示されている。
以下に示す詳細な説明は、本願の技術の様々な構成の説明を意図し、本願の技術が実施される唯一の構成だけを表すことを意図しない。添付される図面は、本明細書に組み込まれ、詳細な説明の一部を構成する。詳細な説明は、本願の技術の十分な理解を提供するための具体的詳細を含む。しかしながら、本願の技術は本明細書に示される具体的詳細には限定されず、これら具体的詳細なしに実施されることは明白である。いくつかの事例においては、本願の技術の概念を曖昧にすることを避けるために、一定の構造および要素はブロック図で示される。
本明細書で用いられるように、「ネイティブ・クライアント」は、ソフトウェア・フォールト・アイソレーションおよびバイナリ・コード・バリデーションの方法を展開するサンドボックス環境を指し得る。ネイティブ・クライアントは、ポータブル・オペレーティング・システム・インターフェース(POSIX)と類似している限られた1セットのアプリケーション・プログラミング・インターフェース(API)を実装し、ウェブ・ブラウザ内で実行される。「バイナリ変換」は、1つのプラットフォーム(ゲスト)上で実行中のアプリケーションまたはオペレーティング・システムのマシン・コード(呼出ゲスト・コード)を分析し、異なるプラットフォーム(ホスト)上での実行に適したコードを生成するためのメカニズムを指し得る。「プラットフォーム」は、ハードウェアとソフトウェアとのスタックの組み合わせを含み得る。アプリケーションは、典型的には、特定のプラットフォーム(ARMまたはx86など)用に開発されている。さらに、上記用語の各々は、その平易で通常の意味を包含する。
本願の技術は、ゲスト・プラットフォーム(たとえば、アンドロイドARM)用に開発された既存ソフトウェアを、より優れたAPIレベルのポータビリティ、セキュリティ、およびリライアビリティの特徴を有する他のプラットフォーム、すなわち、ホスト・プラットフォーム(たとえばネイティブ・クライアントx86−64)上で動作させるためのバイナリ変換の手法に関する。ゲスト・プラットフォーム用のアプリケーションは、動的ロード・ライブラリの形式のネイティブ・コンポーネントにアクセスし得るポータブル・プログラミング言語(たとえば、Java(登録商標))で書かれ得る。ネイティブ・コンポーネントは、共有オブジェクトと称され得る。また、ネイティブ・コンポーネントは、ゲスト・プラットフォームのハードウェア・アーキテクチャとオペレーティング・システムとを用いてゲスト・プラットフォームにおいてコンパイルされ得る。アプリケーションをサポートすべく、ホスト・プラットフォームはJavaとネイティブ・コードとの両方を動作させる必要があり得る。本願の技術は、ノン・ポータブルであるプラットフォーム特有アプリケーション・ライブラリをネイティブ・クライアント・サンドボックス内で動作させることに関する。
本願の技術のいくつかの実施形態においては、ネイティブ・クライアント・サンドボックス内でゲスト・コードを実行するために、ネイティブ・クライアント・サンドボクシング(サンドボックス化)の規則に従ったホスト・コードが生成される。妥当なパフォーマンスを達成するために、最適化手法が適用され得る。最適化手法は、ゲスト・コードのビヘイビアをエミュレートする時間通りのソフトウェア・フォールト・アイソレーション(SFI)・コンプライアント・ホスト・コードを生成することを含み得る。最適化手法は、高速ストレージ内のエミュレートされたゲスト・レジスタ(たとえば、ホスト・レジスタまたはベース・ポインタ(RBP)関連メモリ内のキャッシュ)を記憶することを含み得る。このようにホスト・コードを生成することによって、エミュレートされたゲスト・コンテキストへのアクセスを明示的にサンドボクシングすることなく高速アクセスを可能にする。最適化手法は、外部プラットフォーム共有オブジェクトに対する呼出を、可能であれば、ホストの共有オブジェクトを用いて、言い換えると、標準ライブラリの上記バイナリ変換を用いて、エミュレートすることを含み得る。このエミュレーション方法は「共有オブジェクト・レベルにおけるバイナリ変換」という名称の、代理人整理番号093054−0893を有して同時出願される米国特許出願に詳述されている。その全ての開示内容は参照することにより本願に組み込まれるものとする。
いくつかの場合、ホスト・プラットフォームは、ゲスト・プラットフォームにおいて利用可能であるいくつかのAPIへのアクセスを有さない可能性がある。その理由には、たとえば、セキュリティ要件がある。利用不可能な機能をエミュレートするための追加手法が用いられる。
いくつかの中央処理装置(CPU)のアーキテクチャは、ページ・テーブル内の適切なビット(Xビット)を通じて実行可能コードの明示的なマーキングをサポートする。仮想メモリからのコードは、Xビットが設定されたときのみ、実行され得る。ネイティブ・クライアント・サンドボックス内からのXビット・マニピュレーションに対しての直接的なサポートは、いくつかの場合、セキュリティ上の理由により許可されない可能性がある。また、バイナリ変換器によるゲスト・コードの実行は、ゲスト・コード上におけるホストXビットの存在を考慮に入れないため、そのようなマニピュレーションは、いくつかの場合、所望の効果を有さない可能性がある。Xビットのマニピュレーションに関連する機能(たとえば、典型的にはPOSIXシステム上でmmap(PROT_EXEC)APIを用いて提供される)をエミュレートするために、ゲストmmap()APIによってマニピュレートされる追加構造が、バイナリ変換エンジンによって考慮に入れられる必要があり得る。これは、特定のゲスト・ページが実行可能か否か(たとえば、特定のゲスト・ページがXビットの組を有するか)を記憶するメモリにおけるビットマップを通じて達成され得る。命令毎の実行に関してビットマップを確認することを避けるべく、Xビットの確認は変換時間中に起こり得る。その後、実行可能ページ用のXビットを変更することによって、コード・キャッシュ・フラッシュを引き起こし得る。
ネイティブ・クライアントは、シグナルのPOSIXフィーチャをサポートしない可能性がある。シグナルは、アプリケーション内の例外的な状況(クラッシュまたは実行失敗など)に関する情報を提供するために用いられ得る。シグナルはさらに、ガベージ・コレクションやマネージド言語実行時用に用いられ得る。シグナルを用いるソフトウェアは、いくつかの場合、バイナリ変換エンジンがシグナル・ハンドラの設定とゲスト特有のシグナル・ハンドラに対するシグナルの配信をエミュレートしない限り、ネイティブ・クライアント・サンドボックス内では動作不可能となり得る。したがって、シグナルをエミュレートするために、バイナリ変換エンジンは、アクティブなシグナル・マスクを維持し得る。もしシグナルが配信される予定ならば、バイナリ変換されたソフトウェアのネイティブ・クライアント内での実行は中止される可能性があり、シグナル・ハンドラが実行され得る。シグナル・ハンドラが実行された後、バイナリ変換されたソフトウェアの実行が再開され得る。このシグナルの処理は、バイナリ変換ディスパッチャ内のシグナル・マスクの確認を追加することと、機能ラッピング・メカニズムを用いて適切な引数によってシグナル・ハンドラを明示的に呼び出すこととによって、達成され得る。
ネイティブ・クライアントは、ネイティブ・コンパイルド・コード(たとえば、いくつかの場合においては、コンパイルドCまたはC++コード)をブラウザ内で安全に動作させるためのサンドボクシング技術である。本明細書で用いられるように、用語「サンドボックス」または「サンドボクシング技術」は、プログラムがアクセスし得るメモリ内のスペースを限定することによって動作中プログラムをセパレートするためのコンピュータ・セキュリティ・メカニズムを指し得る。サンドボクシングされたプログラムは、「サンドボックス内の」メモリ領域へはアクセス可能であると言われているが、「サンドボックス外の」メモリ領域へはアクセス不可能であると言われている。サポートがオペレーティング・システム用に実装されている限り、ネイティブ・クライアント・コードは、オペレーティング・システムから独立しており、任意のオペレーティング・システム上で動作可能である。ネイティブ・クライアントによってプログラマは、ブラウザのセキュリティ・フィーチャを維持しつつ、ウェブ・ブラウザを通じて任意のクライアント・システムのネイティブ・コードを開発、ディストリビュート、および実行できるようになる。ネイティブ・クライアントは、サンドボックス内でネイティブ・コードを実行する能力を提供し、ブラウザまたはサンドボックス外のホスト・オペレーティング・システムへの直接的なアクセスを許可しない。ネイティブ・クライアントは、コントロールされたAPIを通じて、ブラウザまたはホスト・オペレーティング・システムへの限られたアクセスを提供し得る。ネイティブ・クライアント互換性マシン・コードへのバイナリ変換によって、正当なサンドボクシングされたアクセスのみ生じることが確実となる。本願の技術の複数の態様はブラウザに関連して本明細書に記載されているが、代替の実施形態においては、ブラウザの代わりに他のアプリケーションが用いられ得る。
本願の技術は、ネイティブ・クライアントとの互換性がないソフトウェアをネイティブ・クライアント互換性マシン・コードに変換する。利点として、ユーザは信頼しないソースからのソフトウェアを動作させることが可能であり、ソフトウェアがサンドボックス内で動作することと、サンドボックス外のユーザのコンピュータに記憶された情報に対して限られたアクセスを有することが確実となり得る。変換が生じるのは、ネイティブ・クライアント内で動作しているエミュレートされたゲスト・ソフトウェアの実行時である。「時間通り」の変換が生じるのは、コードが実行されるコード実行時である。結果として、実行されて変換の必要があるコードのみが、変換される。実行されない一部のコードは変換されない。それにより、時間と処理リソースとをセーブすることになる。バイナリ変換技術は、些細でないポーティング・レイヤを伴って、展開され得る。バイナリ変換器は、ゲスト・ソフトウェアのコードを変換し得る。しかしながら、標準ライブラリ呼出は、エミュレートされたソフトウェア内に提供されたポーティング・レイヤを用いて実行され得る。ポーティング・レイヤは、ゲスト・プラットフォームの予期されたAPIを、ネイティブ・クライアント上の1セットの利用可能なAPIに変換し得る。いくつかの場合、そのような変換は、ネイティブ・クライアント内に存在しないゲスト・ハードウェアのフィーチャをネイティブ・クライアント内でエミュレートすることに加え、同期ブロッキング・ライブラリ呼出をネイティブ・クライアントの非同期ノン・ブロッキング呼出に変換することを含み得る。
バイナリ変換は、ゲスト・ソフトウェアをさらなる照合とサンドボクシングとに適するフォーマットに変換し得る。ソフトウェア・フォールト・アイソレーション(SFI)手法は、より優れたポータビリティとセキュリティとを達成するために用いられ得る。
主題の技術は、バイナリ変換の特別な場合とみなされ得る。この場合、ネイティブ・クライアントはホストのオペレーティング・システムであって、結果として、任意のオペレーティング・システム内で実行中のブラウザ内で動作可能なセキュア・プログラムが得られる。ネイティブ・クライアントへの変換の結果、ソフトウェアのセキュリティとポータビリティとの両方が向上する。
バイナリ変換中、コードは、ネイティブ・クライアントの規則との互換性があるフォーマットに変換され得る。たとえば、ネイティブ・クライアントでは、32の倍数のアドレスを横断する命令が提供されない(言い換えると、命令がバンドル・アライメントされる)ことを必要としている。結果として、バイナリ変換器がマシン・コードを送るとき、バイナリ変換器は、バンドル・バウンダリ(32の倍数)が決して横断されないことを確実にする。
本願の技術のいくつかの態様において、コンピュータはネイティブ・クライアント環境において動作するようゲスト・ソフトウェアを受信する。ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャ(たとえば、x86ハードウェアまたはARMハードウェア)における実行用に構成されている。ゲスト・ソフトウェアは、セキュアでない可能性もあるし、ポータブルでない可能性もある。コンピュータは、ゲスト・ソフトウェアをネイティブ・クライアント互換性マシン・コードに変換する。ネイティブ・クライアント互換性マシン・コードは、ネイティブ・クライアント互換性マシン・コードのホスト・マシンにおいて記憶されたデータに対するアクセスを限定するサンドボックス内で実行される。ネイティブ・クライアント互換性マシン・コードは、セキュアであって、ポータブルであって、ブラウザをサポートする任意のオペレーティング・システム内のブラウザ内で実行可能である。
サンドボックスは、ホスト・マシンにおいて利用可能である1セットのレジスタの1サブセットにアクセス可能であり得る。重要なゲスト・データ(ゲスト・レジスタなど)は、1セットのレジスタの1サブセットを介して、または、該サブセット内のレジスタからのオフセットにおけるメモリ位置を介して、ゲスト・ソフトウェアからネイティブ・クライアント互換性マシン・コードに対して提供され得る。バイナリ変換されたコードはゲスト・レジスタの集中的な使用を必要とし得るので、この方法はネイティブ・クライアント・サンドボックスの要件を依然として満たしつつも、ゲスト・ソフトウェアのエミュレーションのパフォーマンスを高めることができる。
ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、ホスト・ハードウェア・アーキテクチャにおける実行時のゲスト・ソフトウェアによって用いられるレジスタを表す1セットの仮想レジスタを生成することを含み得る。仮想レジスタのアドレスは、所定のオフセットを加えたRBPによって参照され得る。たとえば、レジスタR0は位置RBPにあってもよく、レジスタR1は4オフセット・バイトを加えた位置RBPにあってもよく、レジスタR2は8オフセット・バイトを加えた位置RBPにあってもよい。結果として、該1セットの仮想レジスタ内の各仮想レジスタは、サンドボックス内から1つの命令を介してアクセス可能であり得る。たとえば、書込コマンドがWRITE(POSITION,VALUE)というフォーマットを有する場合、値「0」をレジスタR2に対して書き込むコマンドは、WRITE(RBP+8,0)として書き込まれ得る。該1つの命令は、生成されるコードのパフォーマンスが本手法によって最大化されるため、有益であり得る。ネイティブ・クライアント・サンドボクシング・メカニズムによって、RBP関連アドレッシングに関しての特例が許可される。具体的には、1つの(RBP+4*N)命令が、レジスタ番号Nにアクセスするためのバイナリ変換されたコードにおいて用いられ得る。RBPレジスタはベースとして用いられる。いくつかの場合、追加サンドボクシング命令は、メモリ・アクセスがサンドボックス内にあることを確実にするために、必要となり得る。
ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、特定のゲスト・ハードウェア・アーキテクチャのフィーチャとゲスト・ソフトウェアのアプリケーション・プログラミング・インターフェース(API)呼出とをネイティブ・クライアント内でエミュレートすることを含み得る。特定のゲスト・ハードウェア・アーキテクチャのフィーチャは、レジスタ、スタック、ポインタなどを含み得る。API呼出は、システムAPIまたはゲスト・ソフトウェアに関連付けられているAPIに対する呼出を含み得る。レジスタ、スタック、ポインタなどはエミュレートされる。このことは、ネイティブ・クライアント互換性マシン・コードが、ハードウェア・アイテムと同様に振る舞うが、(関連付けられたハードウェア・コンポーネントのない)プロセッサおよびメモリ上で実行中のソフトウェア内に存在するハードウェア・アイテムのソフトウェア表現を生成することを意味する。エミュレートされたコンポーネントにアクセスする呼出は、ゲスト・マシン上でのフィジカル・コンポーネントにアクセスする呼出と全く同一であるか、類似であり得る。これにより、無修正ゲスト・コードをエミュレートされた環境で動作させることが可能になる。
ネイティブ・クライアント環境内において利用可能でないゲスト・アーキテクチャのいくつかの態様(たとえば、実行可能ビット(Xビット)、非同期シグナル処理)をエミュレートするために、追加ソフトウェア・エミュレーション・ロジックが用いられてもよい。たとえば、ネイティブ・クライアントは、実行可能コード領域に対してリベラル・コントロールを行わないか、mmap(PROT_EXEC)インターフェースを介してPOSIXシステムにとって利用可能ではない。したがって、エミュレーション・ソフトウェアは、追加メカニズムを介して、実行可能ビットに対してのコントロールを実装し得る。エミュレーション・ソフトウェアは、別々のデータ構造を介して、実行可能ゲスト・コードを把握し得る。同様に、ネイティブ・クライアントはシグナル配信をサポートしないので、エミュレーション・ソフトウェアは、シグナルが呼び出されると、保留シグナル・マスクを定期的に確認することと、シグナル・ハンドラを明示的に呼び出すこととによって、非同期シグナルを送信することをサポートし得る。本明細書に用いられている通り、用語「エミュレーション・ソフトウェア」または「エミュレータ」は、ゲスト・ソフトウェアがネイティブ・クライアント環境内で動作することを可能にするソフトウェアを指し得る。
図1Aは、ネイティブ・クライアントへのバイナリ変換に関わり得る例示的ゲスト・マシン100Aを示す。ゲスト・マシン100Aは、任意のコンピューティング・デバイス(たとえば、ラップトップ・コンピュータ、デスクトップ・コンピュータ、タブレット・コンピュータ、モバイル・フォン、携帯情報端末(PDA)、電子音楽プレイヤ、スマート・ウォッチ、1以上のプロセッサおよびメモリと組み合わせられたテレビなど)であり得る。いくつかの例において、ゲスト・マシン100Aは、ARMハードウェアを有する。それに代えて、ゲスト・マシン100Aは、x86ハードウェアを有し得る。
図示するように、ゲスト・マシン100Aは、処理ユニット102A、ネットワーク・インターフェース104A、およびメモリ106Aを含む。処理ユニット102Aは、1以上のプロセッサを含む。処理ユニット102Aは、中央処理装置(CPU)、グラフィックス・プロセッシング・ユニット(GPU)、または任意の他の処理ユニットを含み得る。処理ユニット102Aは、コンピュータ可読媒体(たとえば、メモリ106A)に記憶されているコンピュータの命令を実行する。ネットワーク・インターフェース104Aは、ゲスト・マシン100Aがネットワーク(たとえば、インターネット、イントラネット、セルラ・ネットワーク、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、有線ネットワーク、無線ネットワーク、バーチャル・プライベート・ネットワーク(VPN)など)においてデータを送受信することを許可する。メモリ106Aは、データおよび/または命令を記憶する。メモリ106Aは、1以上のキャッシュ・ユニット、ストレージ・ユニット、内部メモリ・ユニット、または外部メモリ・ユニットであり得る。図示するように、メモリ106Aは、ゲスト・レジスタ108A、ゲスト・ソフトウェア・プログラム110A、およびゲストAPI112Aを含む。
ゲスト・レジスタ108Aは、ゲスト・マシン100Aのハードウェア・アーキテクチャ(たとえば、ARMまたはx86)に関連付けられているゲスト・マシン100A上のレジスタである。レジスタ108Aに加えて、メモリ106Aは、他のハードウェア・アーキテクチャ(1または複数のスタック、1または複数のポインタなど)を含み得る。ゲストAPI112Aは、ゲスト・マシン100A用にどれかのソフトウェアを用いるゲスト・マシン100A上に存在するAPIであり、その関連付けられているハードウェア・アーキテクチャが書き込まれ得る。ゲストAPI112Aは、ゲスト・マシン100Aのハードウェアに関連付けられているシステムAPI、または、ゲスト・ソフトウェア・プログラム110Aとともにゲスト・ソフトウェア・プログラム110Aのベンダによって提供されるベンダAPIを含み得る。
ゲスト・ソフトウェア・プログラム110Aは、ゲスト・マシン100Aのハードウェア・アーキテクチャ上における実行用に構成され、ゲスト・レジスタ108AおよびゲストAPI112Aとのインターフェースを有するように構成されるソフトウェア・プログラムである。ゲスト・ソフトウェア・プログラム110Aは、ネイティブ・クライアント環境内、または、ゲスト・マシン100Aのハードウェア・アーキテクチャとは異なるハードウェア・アーキテクチャ上では、実行不可能であり得る。たとえば、ゲスト・マシン100AがARMハードウェアを有する場合、ゲスト・ソフトウェア・プログラム110Aは、ARMハードウェア上における実行用には構成されるが、x86ハードウェア上における実行用には構成されない。
図1Bは、共有オブジェクト・レベルにおけるバイナリ変換に関わり得る例示的ホスト・マシン100Bを示す。ホスト・マシン100Bは、任意のコンピューティング・デバイス(たとえば、ラップトップ・コンピュータ、デスクトップ・コンピュータ、タブレット・コンピュータ、モバイル・フォン、携帯情報端末(PDA)、電子音楽プレイヤ、スマート・ウォッチ、1以上のプロセッサおよびメモリ組み合わせられたテレビなど)であり得る。ホスト・マシン100Bは、ゲスト・マシン100Aのハードウェア・アーキテクチャとは異なるハードウェア・アーキテクチャを有する。たとえば、ゲスト・マシン100Aのハードウェア・アーキテクチャがARMハードウェアである場合、ホスト・マシン100Bのハードウェア・アーキテクチャはARMハードウェアではなく、たとえば、x86ハードウェアであり得る。それに代えて、ホスト・マシン100Bは、ゲスト・マシン100Aと同一のハードウェア・アーキテクチャを有し得る。
図示するように、ホスト・マシン100Bは、処理ユニット102B、ネットワーク・インターフェース104B、およびメモリ106Bを含む。処理ユニット102Bは、1以上のプロセッサを含む。処理ユニット102Bは、中央処理装置(CPU)、グラフィックス・プロセッシング・ユニット(GPU)、または任意の他の処理ユニットを含み得る。処理ユニット102Bは、コンピュータ可読媒体(たとえば、メモリ106B)に記憶されているコンピュータの命令を実行する。ネットワーク・インターフェース104Bは、ホスト・マシン100Bがネットワーク(たとえば、インターネット、イントラネット、セルラ・ネットワーク、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、有線ネットワーク、無線ネットワーク、バーチャル・プライベート・ネットワーク(VPN)など)内のデータを送受信することを許可する。メモリ106Bは、データおよび/または命令を記憶する。メモリ106Bは、1以上のキャッシュ・ユニット、ストレージ・ユニット、内部メモリ・ユニット、または外部メモリ・ユニットであり得る。図示するように、メモリ106Bは、セキュア・ホスト・レジスタ114B、セキュア・ホスト・コンテンツ116B、およびネイティブ・クライアント・サンドボックス120Bを含む。
セキュア・ホスト・レジスタ114Bは、ゲスト・マシン100Bのハードウェア・アーキテクチャ(たとえば、ARMまたはx86)に関連付けられているホスト・マシン100B上のレジスタである。セキュア・ホスト・レジスタ114Bに加えて、メモリ106Bは、他のハードウェア・アーキテクチャ(1または複数のスタック、1または複数のポインタなど)を含み得る。セキュア・ホスト・コンテンツ116Bは、ホスト・マシン100B上に記憶されたコンテンツ(ワード処理文書、写真、動画、音声ファイルなど)を含む。セキュア・ホスト・レジスタ114Bとセキュア・ホスト・コンテンツ116Bとは、ネイティブ・クライアント・サンドボックス120B外にあり、ネイティブ・クライアント・サンドボックス120Bからはアクセス不可能である。
ネイティブ・クライアント・サンドボックス120Bは、ネイティブ・クライアント・コードが実行可能であるメモリ106Bのセキュア・エリアである。ネイティブ・クライアント・コードは、ネイティブ・クライアント・サンドボックス120B内で実行可能であり得るが、ネイティブ・クライアント・サンドボックス120B外のレジスタまたはデータ(たとえば、セキュア・ホスト・レジスタ114B、セキュア・ホスト・コンテンツ116B)にはアクセスできない可能性がある。このように、ホスト・マシン100Bのユーザは、ホスト・マシン100Bのパーソナル・データとセキュア・レジスタとが信頼できない可能性があるネイティブ・クライアント・コードにアクセス不可能であるということを確実にしつつも、該信頼できない可能性があるネイティブ・クライアント・コードを実行可能であり得る。
図示するように、ネイティブ・クライアント・サンドボックス120Bは、アクセス可能ホスト・レジスタ122Bと、エミュレートされたゲスト・レジスタ108Bと、ネイティブ・クライアント互換性マシン・コード110Bと、エミュレートされたゲストAPI112Bを含む。ネイティブ・クライアント互換性マシン・コード110Bは、ネイティブ・クライアントにバイナリ変換されたゲスト・ソフトウェア・プログラム110Aに対応する。ネイティブ・クライアント互換性マシン・コード110Bは、ネイティブ・クライアント・サンドボックス120B内で実行される。他のネイティブ・クライアント・コードと同様に、ネイティブ・クライアント互換性マシン・コード110Bは、ネイティブ・クライアント・サンドボックス120B外のレジスタまたはデータ(たとえば、セキュア・ホスト・レジスタ114B、セキュア・ホスト・コンテンツ116B)にはアクセスできない可能性がある。ネイティブ・クライアント互換性マシン・コード110Bは、実質的に任意のハードウェアまたはオペレーティング・システム上において、ブラウザ内で実行可能である。特に、ネイティブ・クライアント互換性マシン・コード110Bは、ゲスト・マシン100Aのハードウェア・アーキテクチャとは異なるハードウェア・アーキテクチャを有し得るホスト・マシン100B上で実行され得る。いくつかの場合、ゲスト・ソフトウェア・プログラム110Aのネイティブ・クライアント互換性マシン・コード110Bへのバイナリ変換は、時間通りに、ネイティブ・クライアント互換性マシン・コード・プログラムの実行時に、およびネイティブ・クライアント互換性マシン・コードをポーティングまたはリコンパイルすることなく起こり得る。結果として、実行されて変換の必要があるコードのみが、変換される。実行されない一部のコードは変換されない。それにより、時間と処理リソースとをセーブすることになる。
エミュレートされたゲスト・レジスタ108Bは、ネイティブ・クライアント・サンドボックス120B内で実行されるソフトウェアにおいてエミュレートされたゲスト・マシン100Aのゲスト・レジスタ108Aに対応する。ゲスト・マシン100A上で実行中のゲスト・ソフトウェア・プログラム110Aによって用いられている他のハードウェア(1または複数のスタック、1または複数のポインタなど)も、ネイティブ・クライアント・サンドボックス120B内でエミュレートされ得る。レジスタ108Bはエミュレートされる。このことは、ネイティブ・クライアント互換性マシン・コードが、ハードウェア・アイテムと同様に振る舞うが、(関連付けられたハードウェア・コンポーネントのない)プロセッサおよびメモリ上で実行中のソフトウェア内に存在するハードウェア・アイテムのソフトウェア表現を生成することを意味する。エミュレートされたコンポーネントにアクセスする呼出は、ゲスト・マシン上のフィジカル・コンポーネントにアクセスする呼出と同一あるいは類似し得る。これにより、ゲスト・マシン100Aからネイティブ・クライアント・サンドボックス120Bに対してコードが容易にポーティングされることを可能にする。いくつかの場合、ゲスト・ソフトウェア・プログラム110Aのコードは、ネイティブ・クライアント環境との互換性があるコードに置き換えられる。
エミュレートされたゲストAPI112Bは、ネイティブ・クライアント・サンドボックス120B内で実行されるソフトウェアにおいてバイナリ変換またはエミュレートされたゲスト・マシン100AのゲストAPI112Aに対応する。エミュレートされたゲストAPI112Bは、ゲスト・マシン100Aのハードウェアに関連付けられているシステムAPI、または、ゲスト・ソフトウェア・プログラム110Aとともにゲスト・ソフトウェア・プログラム110Aのベンダによって提供されるベンダAPIのエミュレーションを含み得る。ゲスト・ソフトウェア・プログラム110Aがゲスト・マシン100Aにおいてゲスト・レジスタ108AとゲストAPI112Aとにアクセスする方法と同様に、対応するネイティブ・クライアント互換性マシン・コード110Bは、ネイティブ・クライアント・サンドボックス120Bにおいてエミュレートされたゲスト・レジスタ108BとエミュレートされたゲストAPI112Bとにアクセスし得る。
ネイティブ・クライアント・サンドボックス120Bはさらに、アクセス可能ホスト・レジスタ122Bを含む。アクセス可能ホスト・レジスタ122Bは、ネイティブ・クライアント・サンドボックス120B内で実行中であるネイティブ・クライアント互換性マシン・コード110Bを含む、ネイティブ・クライアント・サンドボックス120B内からソフトウェアにアクセス可能であるホスト・マシン100Bのレジスタである。ホスト・マシンのレジスタは、ネイティブ・クライアント互換性マシン・コードにアクセス不可能であるセキュア・ホスト・レジスタ114Bであり得るか、ネイティブ・クライアント互換性マシン・コードによってアクセスされ得るアクセス可能ホスト・レジスタ122Bであり得る。
図2は、ネイティブ・クライアントへのバイナリ変換が完了し得る例示的プロセス200を示す。
プロセス200は工程210において開始する。工程210において、ホスト・マシン(たとえば、ホスト・マシン100B)は、ネイティブ・クライアント環境(たとえば、ネイティブ・クライアント・サンドボックス120B)内で動作するようゲスト・ソフトウェア(たとえば、ゲスト・ソフトウェア・プログラム110A)を受信する。ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャ(たとえば、ゲスト・マシン100A)における実行用に構成されており、ネイティブ・クライアント環境内での実行用には構成されていない。ネイティブ・クライアント環境は、複数の異なるハードウェア・アーキテクチャのうち任意の1つの内での実行用に構成されている。たとえば、ネイティブ・クライアント環境は、複数の異なるハードウェア・アーキテクチャのうち任意の1つの内に存在し得るアプリケーション(ブラウザなど)内での実行用に構成されている。
工程220において、ホスト・マシンは、エミュレーション・ソフトウェアを用いて、ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コード(ネイティブ・クライアント互換性マシン・コード110B)へのバイナリ変換を提供する。ネイティブ・クライアント互換性マシン・コードは、ネイティブ・クライアント環境用のサンドボックス(たとえば、ネイティブ・クライアント・サンドボックス120B)内で実行される。ネイティブ・クライアント互換性マシン・コードは、アプリケーション(ブラウザなど)内で実行可能である。ゲスト・ソフトウェア・プログラムのサンドボックス内での実行用にゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、時間通りに、エミュレートされたゲスト・ソフトウェアの実行時に、およびゲスト・ソフトウェアをポーティングまたはリコンパイルすることなく起こり得る。バイナリ変換を提供することは、エミュレートされたゲスト・ソフトウェアの実行とインターリーブする。
ゲスト・ソフトウェアは、たとえば、ARMハードウェア・システムまたはx86ハードウェア・システム上での実行用に設計されているARMソフトウェアまたはx86ソフトウェアを含む。ゲスト・ソフトウェア内のいくつかのコードは、ネイティブ・クライアント・コードまたはネイティブ・クライアントとの互換性があるコードと置き換えられ得る。ゲスト・ソフトウェアは、いくつかの場合、セキュアでない可能性もあるし、ポータブルでない可能性もある。ネイティブ・クライアント互換性マシン・コードは、セキュアであり得るし、ポータブルであり得る。ゲスト・ソフトウェアは、特定のオペレーティング・システム内のみでの実行用に構成され得る。ネイティブ・クライアント環境は、複数のオペレーティング・システムのうちの任意の1つの内で実行可能であり得る。
ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、特定のゲスト・ハードウェア・アーキテクチャにおいて実行中のゲスト・ソフトウェアによって用いられるレジスタ(たとえば、ゲスト・レジスタ108A)を表現する1セットの仮想レジスタ(たとえば、エミュレートされたゲスト・レジスタ108B)を生成することを含み得る。仮想レジスタのアドレスは、所定のオフセットを加えたベース・ポインタ(RBP)によって参照され得る。オフセット手法を加えたRBPの結果として、各レジスタは、サンドボックス内から1つの命令を介してアクセス可能であり得る。たとえば、レジスタR0はアドレスRBPにある可能性があり、レジスタR1はアドレスRBP+4にある可能性があり、レジスタR2はアドレスRBP+8にある可能性があり、レジスタRnはアドレスRBP+4nにある可能性がある(nは整数である)。
ゲスト・ソフトウェア・プログラムのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、ゲスト・ハードウェア・アーキテクチャのフィーチャと、ゲスト・ソフトウェアのAPI呼出とをネイティブ・クライアント内でエミュレートすることを含み得る。ゲスト・ハードウェア・アーキテクチャからのシステムAPIまたはベンダAPIは、ネイティブ・クライアント・サンドボックス内での実行用にバイナリ変換され得る。それに代えて、ゲスト・ハードウェア・アーキテクチャのシステムAPIのいくつかは、ネイティブ・クライアント・サンドボックスのシステムAPIに置き換えられ得る。
バイナリ変換時、ゲスト・ソフトウェアは、ネイティブ・クライアントの規則との互換性があるフォーマットに変換され得る。たとえば、ネイティブ・クライアントは、32で割り切れるアドレスを横断する命令が提供されないことを必要とする。これらの場合、32で割り切れるアドレスは、「バンドル・バウンダリ」と称され得る。エミュレータによって生成された全ての命令は、バンドル・バウンダリを横断しないように送られ、何もしない(NOP)命令が詰め込まれる。ネイティブ・クライアント環境用のサンドボックスは、ホスト・マシンにおいて利用可能であるメモリまたはレジスタ内に記憶された1セットのエミュレートされたゲスト・レジスタにアクセスする。ネイティブ・クライアント互換性マシン・コードと関連付けられているデータは、ネイティブ・クライアント環境用のサンドボックス内に記憶される。エミュレートされたゲスト・レジスタは、特定のゲスト・ハードウェア・アーキテクチャのレジスタに対応する。
工程230において、ホスト・マシンは、ネイティブ・クライアント互換性マシン・コードをネイティブ・クライアント環境内とサンドボックス内とで動作させる。ネイティブ・クライアント互換性マシン・コードは、ネイティブ・クライアント・サンドボックス内のレジスタおよびデータにアクセスできる可能性があるが、ネイティブ・クライアント・サンドボックス外のレジスタおよびデータにアクセスできない可能性がある。サンドボクシングされたソフトウェアは、ホストのレジスタ内またはメモリ内に一時的に記憶されたエミュレートされたゲスト・レジスタにアクセスする。工程230の後、プロセス200が終了する。
上述の通り、プロセス200の工程210〜230は、一定の順番に従って且つ連続して実行される。しかしながら、工程210〜230は任意の順番で実行され得る。いくつかの例において、工程210〜230のうち2つ以上が並行して実行され得る。
図3は、本願の技術のいくつかの実施形態が実装される電子システムを概念的に示す。たとえば、1以上のゲスト・マシン100Aまたはホスト・マシン100Bが、電子システム300の配置を用いて実装されてもよい。電子システム300は、コンピュータ(たとえば、モバイル・フォン、PDA)であってもよいし、他の任意の電子デバイスであってもよい。このような電子システムは、様々な種類のコンピュータ可読媒体と、他の様々な種類のコンピュータ可読媒体に関するインターフェースとを含む。電子システム300は、バス305、1または複数のプロセッサ310、システム・メモリ315、読出専用メモリ320、パーマネント・ストレージ・デバイス325、入力デバイス・インターフェース330、出力デバイス・インターフェース335、およびネットワーク・インターフェース340を含む。
バス305は、電子システム300の多数の内部デバイスを通信可能に接続する全てのシステムと、周辺機器と、チップセット・バスとを集合的に表す。たとえば、バス305は、1または複数のプロセッサ310を、読出専用メモリ320と、システム・メモリ315と、パーマネント・ストレージ・デバイス325とに通信可能に接続する。
1または複数のプロセッサ310は、本願の技術のプロセスを実行するために、これらの様々なメモリ・ユニットから実行対象の命令と処理対象のデータとを取り出す。1または複数のプロセッサは、異なる実施形態において、単一のプロセッサを含んでもよいし、マルチコア・プロセッサを含んでもよい。
読出専用メモリ(ROM)320は、1または複数のプロセッサ310と電子システムの他のモジュールとによって必要とされる静的データと命令とを記憶する。一方、パーマネント・ストレージ・デバイス325は、読出/書込メモリデバイスである。このデバイスは、電子システム300がオフであるときでも命令とデータとを記憶する不揮発性メモリ・ユニットである。本願の技術のいくつかの実施形態では、パーマネント・ストレージ・デバイス325としてマス・ストレージ・デバイス(たとえば、磁気または光ディスク、および、対応するディスク・ドライブ)が用いられる。
他の実施形態では、パーマネント・ストレージ・デバイス325としてリムーバブル・ストレージ・デバイス(たとえば、フロッピー(登録商標)・ディスク、フラッシュ・ドライブ、ディスク・ドライブ)が用いられる。システム・メモリ315は、パーマネント・ストレージ・デバイス325と同様に、読出/書込メモリデバイスである。しかしながら、システム・メモリ315は、ストレージ・デバイス325とは異なり、揮発性読出/書込メモリ(たとえば、ランダムアクセスメモリ)である。システム・メモリ315は、実行時においてプロセッサが必要とする命令とデータとのいくつかを記憶する。いくつかの実施形態においては、本願の技術のプロセスは、システム・メモリ315、パーマネント・ストレージ・デバイス325、または読出専用メモリ320に記憶される。たとえば、様々なメモリ・ユニットは、いくつかの実施形態に従ってネイティブ・クライアントへのバイナリ変換に関する命令を含む。1または複数のプロセッサ310は、いくつかの実施形態のプロセスを実行するために、これらの様々なメモリ・ユニットから実行予定の命令と処理予定のデータとを取り出す。
さらにバス305は、入力デバイス・インターフェース330と出力デバイス・インターフェース335とに接続する。入力デバイス・インターフェース330によって、ユーザが情報を通信し、電子システムに対するコマンドを選択することが可能になる。入力デバイス・インターフェース330とともに用いられる入力デバイスは、たとえば、英数字キーボード、ポインティング・デバイス(「カーソル・コントロール・デバイス」とも称される)を含む。出力デバイス・インターフェース335によって、たとえば、電子システム300によって生成された画像の表示が可能になる。出力デバイス・インターフェース335とともに用いられる出力デバイスは、たとえば、プリンタ、ディスプレイ・デバイス(ブラウン管(CRT)または液晶ディスプレイ(LCD)など)を含む。いくつかの実施形態は、入力および出力デバイスの両方として機能するタッチ・スクリーンなどのデバイスを含む。
最後に、図3に示すように、バス305はさらに電子システム300を、ネットワーク・インターフェース340を介して図示しないネットワークに接続する。このように、コンピュータは、コンピュータのネットワーク(たとえば、ローカル・エリア・ネットワーク(LAN)、ワイド・エリア・ネットワーク(WAN)、イントラネット)の一部、または、複数のネットワークのうちの1つのネットワーク(たとえば、インターネット)であってもよい。任意の、または、すべての電子システム300の要素が、本願の技術とともに用いられる。
上述のフィーチャおよびアプリケーションは、コンピュータ可読記憶媒体(コンピュータ可読媒体とも称される)上に記録される一組の命令として記述されるソフトウェアプロセスとして実装される。これらの命令が1以上のプロセッサ(たとえば、1以上のプロセッサ、プロセッサ・コア、他の処理ユニットを含み得る)によって実行されるとき、これらの命令によって、プロセッサは当該命令に示されるアクションを行う。コンピュータ可読媒体の例として、CD−ROM、フラッシュ・ドライブ、RAMチップ、ハード・ドライブ、EPROMが含まれるが、コンピュータ可読媒体の例はこれらに限定されない。コンピュータ可読媒体は、無線または有線接続で送出される搬送波および電子信号を含まない。
本明細書においては、用語「ソフトウェア」は、読出専用メモリ内のファームウェア、または、プロセッサによって処理を行うためのメモリに読み込まれる磁気ストレージまたはフラッシュ・ストレージ(たとえば、ソリッド・ステート・ドライブ)を含むことが意図されている。また、いくつかの実施形態では、本願の技術の複数のソフトウェア技術は、区別がなされる本願の技術のソフトウェア態様でありつつ、より大きなプログラムの下位区分として実装される。いくつかの実施形態では、複数のソフトウェア技術は別個のプログラムとして実装される。そして、本明細書に記載されるソフトウェア態様を同時に実装する別個のプログラムは、いずれも本願の技術の範囲内にある。いくつかの実施形態では、ソフトウェア・プログラムは、インストールされて1以上の電子システムを操作する際、該ソフトウェア・プログラムの操作を実行する1以上の特定の機械の実装を規定する。
コンピュータ・プログラム(プログラム、ソフトウェア、ソフトウェア・アプリケーション、スクリプト、またはコードとも称される)は、任意の形式のプログラミング言語(たとえば、コンパイル済みまたはインタプリット済み言語、宣言型言語または手続型言語)で書かれてもよく、どのような形式で配置されてもよい(たとえば、スタンドアロン・プログラム、モジュール、コンポーネント、サブルーチン、オブジェクト、コンピューティング環境においての使用が相応しい他のユニットを含む)。コンピュータ・プログラムは、ファイルシステム内のファイルに対応してもよいが、これに限定されない。プログラムは、他のプログラムやデータを保持するファイルの一部分(マークアップ言語ドキュメントに記憶される1以上のスクリプト)、対象プログラム専用の1つのファイル、または複数の調整ファイル(たとえば、1以上のモジュール、サブプログラム、コードを部分的に記憶するファイル)に記憶される。コンピュータ・プログラムは、1つのサイトに位置するか、もしくは複数のサイトに広がり、通信ネットワークによって相互接続される1つのコンピュータまたは複数のコンピュータ上で実行されるように配置される。
これら上述の機能は、デジタル電子回路、コンピュータソフトウェア、ファームウェア、またはハードウェアにより実装されることができる。上述の手法は、1以上のコンピュータ・プログラム製品を用いて実装される。プログラマブル・プロセッサおよびコンピュータは、モバイルデバイスに含まれてもよいし、モバイルデバイスとしてパッケージされてもよい。プロセスおよびロジックフローは、1以上のプログラマブル・プロセッサと1以上のプログラマブル論理回路とによって行われる。汎用および専用のデバイスと、ストレージ・デバイスとは、通信ネットワークを通じて相互接続される。
いくつかの実施形態は電子部品(たとえば、機械可読またはコンピュータ可読媒体(あるいは、コンピュータ可読記憶媒体、機械可読媒体、機械可読記憶媒体とも称される)におけるコンピュータ・プログラムの命令を記憶するマイクロプロセッサ、ストレージ、メモリ)を含む。このようなコンピュータ可読媒体のいくつかの例には、RAM、ROM、読出専用コンパクト・ディスク(CD−ROM)、記録可能コンパクト・ディスク(CD−R)、書換可能コンパクト・ディスク(CD−RW)、読出専用デジタル多用途ディスク(たとえば、DVD−ROM、2層DVD−ROM)、種々の記録可能/書換可能DVD(たとえば、DVD−RAM、DVD−RW、DVD+RW)、フラッシュ・メモリ(たとえば、SDカード、ミニSDカード、マイクロSDカード)、磁気またはソリッド・ステート・ハード・ドライブ、読出専用および記録可能Blu−ray(登録商標)ディスク、超高密度光ディスク、他の任意の光または磁気メディア、フロッピー・ディスクが含まれる。コンピュータ可読媒体は、少なくとも1つのプロセッサにより実行可能であって、様々な操作を行うための複数組の命令を含むコンピュータ・プログラムを記憶できる。コンピュータ・プログラムまたはコンピュータ・コードの例には、たとえばコンパイラによって生成されるマシン・コードと、インタプリタを用いてコンピュータ、電子部品、またはマイクロプロセッサによって実行される、より高レベルのコードを含むファイルと、が含まれる。
上記議論はソフトウェアを実行するマイクロプロセッサまたはマルチコア・プロセッサを指しているが、いくつかの実施形態は1以上の集積回路(たとえば、特定用途向け集積回路(ASIC)またはフィールド・プログラマブル・ゲート・アレイ(FPGA))によって実行される。いくつかの実施形態では、このような集積回路は回路上自体に記憶される命令を実行する。
本明細書および本願の任意の請求項で用いられる通り、用語「コンピュータ」、「サーバ」、「プロセッサ」および「メモリ」はすべて、電子または他の技術分野のデバイスのことを指す。これらの用語から、人または人の集団は除外される。本明細書上では、用語「表示」または「表示する」は、電子デバイス上での表示を意味する。本明細書および本願の任意の請求項で用いられる通り、用語「コンピュータ可読媒体」「複数のコンピュータ可読媒体」は全体として、コンピュータによって読み込まれる形式の情報を記憶する有形の物理的な物体に限定される。これらの用語から、無線信号、有線ダウンロード信号、および他の任意の一時的な信号は除外される。
ユーザとの対話を提供するため、本明細書に記載される主題の実施形態は、ユーザに対して情報を表示するためのディスプレイ・デバイス(たとえば、CRT(ブラウン管)またはLCD(液晶ディスプレイ)モニタ)と、キーボードと、ユーザがコンピュータに対して入力を提供できるポインティング・デバイス(たとえば、マウスまたはトラックボール)と、を有するコンピュータ上で実施可能である。他の種類のデバイスも同様に、ユーザとの対話を提供するために用いられる。たとえば、ユーザに対して提供されるフィードバックは、任意の形式の感覚フィードバック(たとえば、視覚フィードバック、聴覚フィードバック、触覚フィードバックなど)であってよいし、ユーザからの入力は任意の形式(音響、音声または触覚入力を含む)で受信されてよい。さらに、ユーザによって用いられるデバイスに対してドキュメントを送信し、該デバイスからドキュメントを受信することによって(たとえば、ユーザのクライアント・デバイス上でウェブ・ブラウザに対して、該ウェブ・ブラウザから受信したリクエストに応じてウェブページを送信することによって)、コンピュータはユーザとの対話が可能になる。
本明細書に記載される主題は、バックエンドコンポーネント(たとえば、データサーバ)、ミドルウェアコンポーネント(たとえば、アプリケーションサーバ)、フロントエンドコンポーネント(たとえば、ユーザの本明細書に記載される主題の実施形態との対話を可能にするグラフィカルユーザインターフェースまたはウェブ・ブラウザを有するクライアントコンピュータ)、または、このようなバックエンド、ミドルウェア、およびフロントエンドコンポーネントのうち1以上の任意の組み合わせを含むコンピューティング・システムにおいて実施可能である。該システムのコンポーネントは、デジタルデータ通信の任意の形式または媒体(たとえば、通信ネットワーク)によって相互接続される。通信ネットワークの例には、ローカル・エリア・ネットワーク(LAN)、ワイド・エリア・ネットワーク(WAN)、インターネットワーク(たとえば、インターネット)、および、ピアツーピアネットワーク(たとえば、アドホックピアツーピアネットワーク)が含まれる。
コンピューティング・システムには、クライアントおよびサーバが含まれる。クライアントおよびサーバは一般的には互いにリモートであり、典型的には通信ネットワークを介して対話する。クライアントおよびサーバの関係が生じるのは、各コンピュータ上で動作しており、互いにクライアント/サーバ関係を有するコンピュータ・プログラムを介してである。いくつかの開示される主題の態様においては、サーバがデータ(たとえば、HTMLページ)をクライアント・デバイスに対して(たとえば、該クライアント・デバイスとの対話を行うユーザに対してデータを表示する目的、および、該ユーザからユーザ入力を受信する目的で)送信する。クライアント・デバイスにおいて生成されたデータ(たとえば、ユーザ対話の結果)は、サーバにおいてクライアント・デバイスから受信される。
開示されるプロセスにおける工程の任意の特定の順番または階層は例示的アプローチの実例である、と理解される。デザインの嗜好に基づいて、プロセスにおける工程の特定の順番または階層は再配置されてもよい、図示される全ての工程が実行されてもよい、と理解される。いくつかの工程は同時に実行されてもよい。たとえば、ある状況においては、マルチタスキングおよびパラレル・プロセッシングは効果的である。さらに、上述の様々なシステム・コンポーネントの分離については、そのような分離が必須であるとして理解されるべきではない。上述のプログラム・コンポーネントおよびシステムは一般的に1つのソフトウェア製品に統合される、または、複数のソフトウェア製品にパッケージされる、と理解されるべきである。
これらの態様に対する様々な修正形態は容易に識別され、本明細書に規定される包括的な原則は他の態様にも適用される。従って、本請求項は、本明細書に示される態様に限定される意図はなく、請求項の文言と一致する全ての範囲が付与され、単数である要素への参照は「1および1のみ」であることを(そのように特定的に記述されている場合を除いて)意味するのではなく、「1以上」を意味する。用語「いくつか」は、(特定的に記述する場合を除いて)1以上を指す。男性の指示代名詞(たとえば、「彼の」)は、女性および中性(たとえば、「彼女の」「その」)を含み、その逆も同様である。見出しおよび小見出しは、それらがある場合にしても、便宜上用いられているだけであって、本願の技術を限定するものではない。
たとえば「態様」という語句は、その態様が本願の技術に必要不可欠であること、その態様が本願の技術の全ての構成に適用されること、を暗示しない。態様に関する開示は、全ての構成または1以上の構成に適用される。たとえば態様という語句は、1以上の態様を指してもよいし、その逆も同様である。たとえば「構成」という語句は、そのような構成が本願の技術に必要不可欠であること、その態様が本願の技術の全ての構成に適用されること、を暗示しない。態様に関する開示は、全ての構成または1以上の構成に適用される。たとえば構成という語句は、1以上の構成を指してもよいし、その逆も同様である。

Claims (20)

  1. ネイティブ・クライアント環境内で動作するようゲスト・ソフトウェアを受信する工程であって、前記ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャにおける実行用に構成されており、前記ネイティブ・クライアント環境内での実行用には構成されていない工程と、
    エミュレーション・ソフトウェアを用いて、前記ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供する工程であって、前記ネイティブ・クライアント互換性マシン・コードは、前記ネイティブ・クライアント環境用のサンドボックス内で実行され、前記ネイティブ・クライアント互換性マシン・コードはアプリケーション内で実行可能であり、前記サンドボックス内での実行用に前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへの前記バイナリ変換を提供することは、時間通りに、エミュレートされたゲスト・ソフトウェアの実行時に、および前記ゲスト・ソフトウェアをポーティングまたはリコンパイルすることなく起こり、前記バイナリ変換を提供することは、エミュレートされた前記ゲスト・ソフトウェアの実行とインターリーブする工程と、
    を備える方法。
  2. 前記ネイティブ・クライアント環境用の前記サンドボックスは、ホスト・マシンにおいて利用可能であるメモリまたはレジスタ内に記憶された1セットのエミュレートされたゲスト・レジスタにアクセスし、前記ネイティブ・クライアント互換性マシン・コードと関連付けられているデータは前記ネイティブ・クライアント環境用の前記サンドボックス内に記憶され、エミュレートされた前記ゲスト・レジスタは、前記特定のゲスト・ハードウェア・アーキテクチャのレジスタに対応する、
    請求項1に記載の方法。
  3. 前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記特定のゲスト・ハードウェア・アーキテクチャにおいて実行中の前記ゲスト・ソフトウェアによって用いられるレジスタを表現する1セットの仮想レジスタを生成する工程であって、前記仮想レジスタのアドレスは、所定のオフセットを加えたベース・ポインタ(RBP)によって参照され、前記1セットの仮想レジスタ内の各仮想レジスタは、前記サンドボックス内から1つの命令を介してアクセス可能である工程を含む、
    請求項1に記載の方法。
  4. 前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記特定のゲスト・ハードウェア・アーキテクチャのフィーチャと前記ゲスト・ソフトウェアのアプリケーション・プログラミング・インターフェース(API)呼出とを前記ネイティブ・クライアント内でエミュレートする工程を含む、
    請求項1に記載の方法。
  5. 前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記ゲスト・ソフトウェア内のコードを前記ネイティブ・クライアント環境との互換性があるコードに置き換える工程を含む、
    請求項1に記載の方法。
  6. 前記ゲスト・ソフトウェアは、ARMソフトウェアまたはx86ソフトウェアを含む、
    請求項1に記載の方法。
  7. 前記ネイティブ・クライアント互換性マシン・コードはセキュアおよびポータブルであって、前記ゲスト・ソフトウェアはセキュアでもポータブルでもない、
    請求項1に記載の方法。
  8. 前記ゲスト・ソフトウェアは特定のゲスト・オペレーティング・システム内のみにおける実行用に構成されており、前記ネイティブ・クライアント環境は複数の異なるオペレーティング・システムのうち任意の1つの内での実行用に構成されている、
    請求項1に記載の方法。
  9. 前記アプリケーションはブラウザである、
    請求項1に記載の方法。
  10. 命令を含む非一時的なコンピュータ可読媒体であって、前記命令が1以上のコンピュータによって実行されるときに前記1以上のコンピュータは、
    ネイティブ・クライアント環境内で動作するようゲスト・ソフトウェアを受信する工程であって、前記ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャにおける実行用に構成されており、前記ネイティブ・クライアント環境内での実行用には構成されていない工程と、
    エミュレーション・ソフトウェアを用いて、前記ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供する工程であって、前記ネイティブ・クライアント互換性マシン・コードは、前記ネイティブ・クライアント環境用のサンドボックス内で実行され、前記ネイティブ・クライアント互換性マシン・コードはアプリケーション内で実行可能であり、前記サンドボックス内での実行用に前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへの前記バイナリ変換を提供することは、時間通りに、エミュレートされたゲスト・ソフトウェアの実行時に、および前記ゲスト・ソフトウェアをポーティングまたはリコンパイルすることなく起こり、前記バイナリ変換を提供することは、エミュレートされた前記ゲスト・ソフトウェアの実行とインターリーブする工程と、
    を備える方法を実施する、非一時的なコンピュータ可読媒体であって、
    前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記特定のゲスト・ハードウェア・アーキテクチャにおいて実行中の前記ゲスト・ソフトウェアによって用いられるレジスタを表現する1セットの仮想レジスタを生成する工程であって、前記仮想レジスタのアドレスは、所定のオフセットを加えたベース・ポインタ(RBP)によって参照され、前記1セットの仮想レジスタ内の各仮想レジスタは、前記サンドボックス内から1つの命令を介してアクセス可能である工程を含む、
    非一時的なコンピュータ可読媒体。
  11. 前記ネイティブ・クライアント環境用の前記サンドボックスは、ホスト・マシンにおいて利用可能であるメモリまたはレジスタ内に記憶された1セットのエミュレートされたゲスト・レジスタにアクセスし、前記ネイティブ・クライアント互換性マシン・コードと関連付けられているデータは前記ネイティブ・クライアント環境用の前記サンドボックス内に記憶され、エミュレートされた前記ゲスト・レジスタは、前記特定のゲスト・ハードウェア・アーキテクチャのレジスタに対応する、
    請求項9に記載の非一時的なコンピュータ可読媒体。
  12. 前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記特定のゲスト・ハードウェア・アーキテクチャのフィーチャと前記ゲスト・ソフトウェアのアプリケーション・プログラミング・インターフェース(API)呼出とを前記ネイティブ・クライアント内でエミュレートする工程を含む、
    請求項9に記載の非一時的なコンピュータ可読媒体。
  13. 前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記ゲスト・ソフトウェア内のコードを前記ネイティブ・クライアント環境との互換性があるコードに置き換える工程を含む、
    請求項9に記載の非一時的なコンピュータ可読媒体。
  14. 前記ゲスト・ソフトウェアは、ARMソフトウェアまたはx86ソフトウェアを含む、
    請求項9に記載の非一時的なコンピュータ可読媒体。
  15. 前記ネイティブ・クライアント互換性マシン・コードはセキュアおよびポータブルであって、前記ゲスト・ソフトウェアはセキュアでもポータブルでもない、
    請求項9に記載の非一時的なコンピュータ可読媒体。
  16. 1以上のプロセッサと、
    命令を含むメモリと、を備えるシステムであって、前記命令は前記1以上のプロセッサによって実行されるときに前記1以上のプロセッサに、
    ネイティブ・クライアント環境内で動作するようゲスト・ソフトウェアを受信する工程であって、前記ゲスト・ソフトウェアは、特定のゲスト・ハードウェア・アーキテクチャにおける実行用に構成されており、前記ネイティブ・クライアント環境内での実行用には構成されていない工程と、
    エミュレーション・ソフトウェアを用いて、前記ゲスト・ソフトウェアのネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供する工程であって、前記ネイティブ・クライアント互換性マシン・コードは、前記ネイティブ・クライアント環境用のサンドボックス内で実行され、前記ネイティブ・クライアント互換性マシン・コードはアプリケーション内で実行可能であり、前記サンドボックス内での実行用に前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへの前記バイナリ変換を提供することは、時間通りに、エミュレートされたゲスト・ソフトウェアの実行時に、および前記ゲスト・ソフトウェアをポーティングまたはリコンパイルすることなく起こり、前記バイナリ変換を提供することは、エミュレートされた前記ゲスト・ソフトウェアの実行とインターリーブし、前記ネイティブ・クライアント環境用の前記サンドボックスは、ホスト・マシンにおいて利用可能であるメモリまたはレジスタ内に記憶された1セットのエミュレートされたゲスト・レジスタにアクセスし、前記ネイティブ・クライアント互換性マシン・コードと関連付けられているデータは前記ネイティブ・クライアント環境用の前記サンドボックス内に記憶され、エミュレートされた前記ゲスト・レジスタは、前記特定のゲスト・ハードウェア・アーキテクチャのレジスタに対応する工程と、
    を備える方法を実装させる、システム。
  17. 前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記特定のゲスト・ハードウェア・アーキテクチャにおいて実行中の前記ゲスト・ソフトウェアによって用いられるレジスタを表現する1セットの仮想レジスタを生成する工程であって、前記仮想レジスタのアドレスは、所定のオフセットを加えたベース・ポインタ(RBP)によって参照され、前記1セットの仮想レジスタ内の各仮想レジスタは、前記サンドボックス内から1つの命令を介してアクセス可能である工程を含む、
    請求項16に記載のシステム。
  18. 前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記特定のゲスト・ハードウェア・アーキテクチャのフィーチャと前記ゲスト・ソフトウェアのアプリケーション・プログラミング・インターフェース(API)呼出とを前記ネイティブ・クライアント内でエミュレートする工程を含む、
    請求項16に記載のシステム。
  19. 前記ゲスト・ソフトウェアの前記ネイティブ・クライアント互換性マシン・コードへのバイナリ変換を提供することは、前記ゲスト・ソフトウェア内のコードを前記ネイティブ・クライアント環境との互換性があるコードに置き換える工程を含む、
    請求項16に記載のシステム。
  20. 前記ゲスト・ソフトウェアは、ARMソフトウェアまたはx86ソフトウェアを含む、
    請求項16に記載のシステム。
JP2017551221A 2015-04-10 2015-04-10 ネイティブ・クライアントへのバイナリ変換 Active JP6678185B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/IB2015/000883 WO2016162720A1 (en) 2015-04-10 2015-04-10 Binary translation into native client

Publications (2)

Publication Number Publication Date
JP2018510433A true JP2018510433A (ja) 2018-04-12
JP6678185B2 JP6678185B2 (ja) 2020-04-08

Family

ID=57071808

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017551221A Active JP6678185B2 (ja) 2015-04-10 2015-04-10 ネイティブ・クライアントへのバイナリ変換

Country Status (8)

Country Link
US (1) US10162617B2 (ja)
EP (1) EP3281105B1 (ja)
JP (1) JP6678185B2 (ja)
KR (1) KR102002143B1 (ja)
CN (1) CN107408053B (ja)
DE (1) DE112015006438T5 (ja)
GB (1) GB2554201B (ja)
WO (1) WO2016162720A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9335982B1 (en) * 2015-04-28 2016-05-10 Microsoft Technology Licensing, Llc Processor emulation using multiple translations
US11240268B1 (en) * 2017-09-27 2022-02-01 EMC IP Holding Company LLC Dynamic honeypots for computer program execution environments
CN112817812B (zh) * 2020-12-31 2022-11-04 深圳市联影高端医疗装备创新研究院 序列翻译模拟方法、装置、设备及存储介质
CN113076106A (zh) * 2021-03-29 2021-07-06 Oppo广东移动通信有限公司 编译应用的方法、运行应用的方法及电子设备
CN113741887B (zh) * 2021-08-19 2022-09-27 北京百度网讯科技有限公司 模型生产方法、系统、装置及电子设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001514411A (ja) * 1997-08-28 2001-09-11 マイクロソフト コーポレイション 信頼できない実行可能コードに関するセキュリティ向上
JP2011123917A (ja) * 2003-07-15 2011-06-23 Internatl Business Mach Corp <Ibm> 対象プログラム・コードを目的プログラム・コードに変換するための方法、並びにコンピュータ・プログラム及びコンピュータ

Family Cites Families (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4456954A (en) * 1981-06-15 1984-06-26 International Business Machines Corporation Virtual machine system with guest architecture emulation using hardware TLB's for plural level address translations
US6704925B1 (en) * 1998-09-10 2004-03-09 Vmware, Inc. Dynamic binary translator with a system and method for updating and maintaining coherency of a translation cache
US6463582B1 (en) * 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
JP4130713B2 (ja) * 1998-10-21 2008-08-06 松下電器産業株式会社 プログラム変換装置
US6732220B2 (en) * 1999-02-17 2004-05-04 Elbrus International Method for emulating hardware features of a foreign architecture in a host operating system environment
US7092869B2 (en) * 2001-11-14 2006-08-15 Ronald Hilton Memory address prediction under emulation
US20030093775A1 (en) * 2001-11-14 2003-05-15 Ronald Hilton Processing of self-modifying code under emulation
US20030093774A1 (en) * 2001-11-14 2003-05-15 Ronald Hilton State-specific variants of translated code under emulation
US7496494B2 (en) * 2002-09-17 2009-02-24 International Business Machines Corporation Method and system for multiprocessor emulation on a multiprocessor host system
US20050038892A1 (en) * 2003-08-13 2005-02-17 Sun Microsystems, Inc. Method for wireless communication and apparatus for conducting the same
US7290253B1 (en) * 2003-09-30 2007-10-30 Vmware, Inc. Prediction mechanism for subroutine returns in binary translation sub-systems of computers
US8214622B2 (en) * 2004-05-27 2012-07-03 International Business Machines Corporation Facilitating management of storage of a pageable mode virtual environment absent intervention of a host of the environment
US7496495B2 (en) * 2005-05-12 2009-02-24 Microsoft Corporation Virtual operating system device communication relying on memory access violations
US20070006178A1 (en) * 2005-05-12 2007-01-04 Microsoft Corporation Function-level just-in-time translation engine with multiple pass optimization
US20070074191A1 (en) * 2005-08-30 2007-03-29 Geisinger Nile J Software executables having virtual hardware, operating systems, and networks
US20070283324A1 (en) * 2005-08-30 2007-12-06 Geisinger Nile J System and method for creating programs that comprise several execution layers
US20070074192A1 (en) * 2005-08-30 2007-03-29 Geisinger Nile J Computing platform having transparent access to resources of a host platform
US20070050765A1 (en) * 2005-08-30 2007-03-01 Geisinger Nile J Programming language abstractions for creating and controlling virtual computers, operating systems and networks
US20070050770A1 (en) * 2005-08-30 2007-03-01 Geisinger Nile J Method and apparatus for uniformly integrating operating system resources
US20070067769A1 (en) * 2005-08-30 2007-03-22 Geisinger Nile J Method and apparatus for providing cross-platform hardware support for computer platforms
US8099730B2 (en) * 2006-03-30 2012-01-17 Intel Corporation Heterogeneous virtualization of host and guest OS having different register sizes using translation layer to extract device port numbers for host OS system memory addresses
US8875114B2 (en) * 2007-09-21 2014-10-28 International Business Machines Corporation Employing identifiers provided by an operating system of a processing environment to optimize the processing environment
US9740637B2 (en) * 2007-10-30 2017-08-22 Vmware, Inc. Cryptographic multi-shadowing with integrity verification
US8819676B2 (en) * 2007-10-30 2014-08-26 Vmware, Inc. Transparent memory-mapped emulation of I/O calls
CN100462922C (zh) * 2007-11-01 2009-02-18 上海交通大学 利用中间指令集的二进制翻译方法
US8176280B2 (en) * 2008-02-25 2012-05-08 International Business Machines Corporation Use of test protection instruction in computing environments that support pageable guests
US8086811B2 (en) * 2008-02-25 2011-12-27 International Business Machines Corporation Optimizations of a perform frame management function issued by pageable guests
US8095773B2 (en) * 2008-02-26 2012-01-10 International Business Machines Corporation Dynamic address translation with translation exception qualifier
US9058483B2 (en) * 2008-05-08 2015-06-16 Google Inc. Method for validating an untrusted native code module
US8424082B2 (en) * 2008-05-08 2013-04-16 Google Inc. Safely executing an untrusted native code module on a computing device
US8346531B2 (en) * 2008-11-05 2013-01-01 Oracle America, Inc. Handling mutex locks in a dynamic binary translation across heterogeneous computer systems
US9766911B2 (en) * 2009-04-24 2017-09-19 Oracle America, Inc. Support for a non-native application
US8640220B1 (en) * 2009-09-09 2014-01-28 Amazon Technologies, Inc. Co-operative secure packet management
US8428930B2 (en) * 2009-09-18 2013-04-23 International Business Machines Corporation Page mapped spatially aware emulation of a computer instruction set
US9158566B2 (en) * 2009-09-18 2015-10-13 International Business Machines Corporation Page mapped spatially aware emulation of computer instruction set
US8301434B2 (en) * 2009-09-18 2012-10-30 International Buisness Machines Corporation Host cell spatially aware emulation of a guest wild branch
US8447583B2 (en) * 2009-09-18 2013-05-21 International Business Machines Corporation Self initialized host cell spatially aware emulation of a computer instruction set
US8949106B2 (en) * 2009-09-18 2015-02-03 International Business Machines Corporation Just in time compiler in spatially aware emulation of a guest computer instruction set
US8555265B2 (en) * 2010-05-04 2013-10-08 Google Inc. Parallel processing of data
US8479176B2 (en) * 2010-06-14 2013-07-02 Intel Corporation Register mapping techniques for efficient dynamic binary translation
US8595469B2 (en) * 2010-06-24 2013-11-26 International Business Machines Corporation Diagnose instruction for serializing processing
US20120159127A1 (en) * 2010-12-16 2012-06-21 Microsoft Corporation Security sandbox
WO2012103253A2 (en) * 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
US8880851B2 (en) * 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9495183B2 (en) * 2011-05-16 2016-11-15 Microsoft Technology Licensing, Llc Instruction set emulation for guest operating systems
CN102314373B (zh) * 2011-07-07 2013-12-18 胡建斌 一种基于虚拟化技术实现安全工作环境的方法
US9098309B2 (en) * 2011-09-23 2015-08-04 Qualcomm Incorporated Power consumption optimized translation of object code partitioned for hardware component based on identified operations
US8281288B1 (en) * 2011-10-20 2012-10-02 Google Inc. Integrated development environment with network-based compilation and sandboxed native machine-language capabilities
US8812873B2 (en) * 2012-09-26 2014-08-19 Intel Corporation Secure execution of a computer program using binary translators
US9405551B2 (en) * 2013-03-12 2016-08-02 Intel Corporation Creating an isolated execution environment in a co-designed processor
US9525586B2 (en) * 2013-03-15 2016-12-20 Intel Corporation QoS based binary translation and application streaming
US9268549B2 (en) * 2013-03-27 2016-02-23 Vmware, Inc. Methods and apparatus to convert a machine to a virtual machine
US9658867B2 (en) * 2013-05-30 2017-05-23 Hewlett Packard Enterprise Development Lp Preserving object code translations of a library for future reuse by an emulator
CN104462962B (zh) * 2013-09-13 2018-07-03 北京安赛创想科技有限公司 一种检测未知恶意代码和二进制漏洞的方法
US9983894B2 (en) * 2013-09-25 2018-05-29 Facebook, Inc. Method and system for providing secure system execution on hardware supporting secure application execution
US9355246B1 (en) * 2013-12-05 2016-05-31 Trend Micro Inc. Tuning sandbox behavior based on static characteristics of malware

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001514411A (ja) * 1997-08-28 2001-09-11 マイクロソフト コーポレイション 信頼できない実行可能コードに関するセキュリティ向上
JP2011123917A (ja) * 2003-07-15 2011-06-23 Internatl Business Mach Corp <Ibm> 対象プログラム・コードを目的プログラム・コードに変換するための方法、並びにコンピュータ・プログラム及びコンピュータ

Also Published As

Publication number Publication date
DE112015006438T5 (de) 2018-01-04
JP6678185B2 (ja) 2020-04-08
EP3281105A1 (en) 2018-02-14
GB201715719D0 (en) 2017-11-15
WO2016162720A8 (en) 2017-11-23
CN107408053A (zh) 2017-11-28
KR20170129794A (ko) 2017-11-27
KR102002143B1 (ko) 2019-07-19
GB2554201B (en) 2022-05-11
EP3281105A4 (en) 2018-12-19
GB2554201A (en) 2018-03-28
CN107408053B (zh) 2021-04-16
WO2016162720A1 (en) 2016-10-13
EP3281105B1 (en) 2023-10-25
US10162617B2 (en) 2018-12-25
US20170039049A1 (en) 2017-02-09

Similar Documents

Publication Publication Date Title
JP6559793B2 (ja) 共有オブジェクト・レベルにおけるバイナリ変換
US8683462B2 (en) Handling calls to native code in a managed code environment
US8694988B2 (en) Runtime extensions
AU2012352754B2 (en) Facilitating system service request interactions for hardware-protected applications
US8528083B2 (en) Using a call gate to prevent secure sandbox leakage
JP6678185B2 (ja) ネイティブ・クライアントへのバイナリ変換
US20160085604A1 (en) Dynamic method invocation via proxy framework
US20130167150A1 (en) Application Management
US8768682B2 (en) ISA bridging including support for call to overidding virtual functions
Chen et al. A lightweight virtualization solution for android devices
EP2802983B1 (en) Isa bridging with callback
US9197446B2 (en) Address pinning
US20140358515A1 (en) Preserving object code translations of a library for future reuse by an emulator
US9756149B2 (en) Machine-specific instruction set translation
US10579373B2 (en) Seamless extension porting
Goonasekera et al. LibVM: an architecture for shared library sandboxing
Bertin et al. Compilation and virtualization in the HiPEAC vision
Liu et al. KMRE: An Efficient and Compatible Runtime to Execute Android Application on Linux System

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170929

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180926

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20181030

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190116

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190625

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200218

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200316

R150 Certificate of patent or registration of utility model

Ref document number: 6678185

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250