(57)【要約】      （修正有）【課題】ファイルの実行をエミュレートするシステム及び方法を提供する。【解決手段】ファイルから読み取られた命令から構成されるファイルのイメージが形成される２０１。解析モジュールは、ファイルから読み取られた部分の少なくとも１つの既知の命令セットを検出し２０２、ファイルのイメージの、少なくとも１つの既知の命令セットの先頭に対応する位置にブレークポイントを挿入する２０３。エミュレーションモジュールは、ファイルのイメージの命令の実行をエミュレートする２０４ことでファイルの実行をエミュレートするとともに、少なくとも１つの既知の命令セットのエミュレートされた実行に関連する対応するレコードをエミュレーションログに追加する。【選択図】図２Ａ
2019036278.tif 000002
【特許請求の範囲】
【請求項１】
ファイルの実行をエミュレートする方法であって、
前記ファイルから読み取られた命令からなるファイルのイメージを生成するステップと、
前記ファイルから読み取られた部分の少なくとも１つの既知の命令セットを検出するステップと、
前記生成されたファイルのイメージの、前記少なくとも１つの既知の命令セットの先頭に対応する位置にブレークポイントを挿入するステップと、
前記生成されたファイルのイメージの命令の実行をエミュレートすることで前記ファイルの実行をエミュレートするとともに、前記少なくとも１つの既知の命令セットのエミュレートされた実行に関する対応するレコードをエミュレーションログに追加するステップとを備える、方法。
【請求項２】
請求項１に記載の方法であって、
前記ファイルのイメージは、前記ファイルに含まれるプログラムコードの命令と、前記プログラムコードのエントリーポイントに関するサービス情報とを含む、方法。
【請求項３】
請求項１に記載の方法であって、
前記ファイルの実行をエミュレートするステップは、
前記挿入されたブレークポイントに到達したことに応じて、前記既知の命令セットの実行のエミュレーションを示すレコードを前記エミュレーションログに追加することと、
前記挿入されたブレークポイントに到達したことに応じて、前記少なくとも１つの既知の命令セットの実行をエミュレートすることは控え、記少なくとも１つの既知の命令セットに対応する代替の命令セットの実行をエミュレートすることとをさらに備える、方法。
【請求項４】
請求項３に記載の方法であって、
前記代替の命令セットは、実行をエミュレートするのと同じ結果を有し且つ前記既知の命令セットよりも少ないリソースを消費するよう構成された最適化された命令セットを含む、方法。
【請求項５】
請求項３に記載の方法であって、
前記少なくとも１つの既知の命令セットは、前記ファイルの実行のエミュレーションを妨げるよう構成されたアンチエミュレーション命令を含み、前記アンチエミュレーション命令に対応する前記代替の命令セットは、実行をエミュレートするのと同じ結果を有し且つ前記ファイルの実行のエミュレーションを妨げないよう構成される、方法。
【請求項６】
請求項１に記載の方法であって、
前記少なくとも１つの既知の命令セットは、機械語命令とは異なるファイルの命令を処理するよう構成されたインタプリタライブラリの命令セットを含む、方法。
【請求項７】
請求項１に記載の方法であって、
前記少なくとも１つの既知の命令セットは、既知の命令セットのデータベースの１つ以上のシグネチャを使用して検出される、方法。
【請求項８】
請求項１に記載の方法であって、
前記ファイルの命令のインタプリタのライブラリファイルのイメージを生成するステップを備える、方法。
【請求項９】
ファイルの実行をエミュレートするシステムであって、
ファイル、ファイルのイメージ及びエミュレーションログを記憶する記憶装置と、ハードウェアプロセッサとを備え、
前記ハードウェアプロセッサは、
前記ファイルから読み取られた命令からなるファイルのイメージを生成し、
前記ファイルから読み取られた部分の少なくとも１つの既知の命令セットを検出し、
前記生成されたファイルのイメージの、前記少なくとも１つの既知の命令セットの先頭に対応する位置にブレークポイントを挿入し、
前記生成されたファイルのイメージの命令の実行をエミュレートすることで前記ファイルの実行をエミュレートするとともに、前記少なくとも１つの既知の命令セットのエミュレートされた実行に関連する対応するレコードをエミュレーションログに追加する、システム。
【請求項１０】
請求項９に記載のシステムであって、前記ファイルのイメージは、前記ファイルに含まれるプログラムコードの命令と、前記プログラムコードのエントリーポイントに関するサービス情報とを含む、システム。
【請求項１１】
請求項９に記載のシステムであって、
前記プロセッサはさらに、
前記挿入されたブレークポイントに到達したことに応じて、
前記既知の命令セットの実行のエミュレーションを示すレコードを前記エミュレーションログに追加し、
前記少なくとも１つの既知の命令セットの実行をエミュレートすることは控え、記少なくとも１つの既知の命令セットに対応する代替の命令セットの実行をエミュレートするよう構成される、システム。
【請求項１２】
請求項１１に記載のシステムであって、
前記代替の命令セットは、実行をエミュレートするのと同じ結果を有し且つ前記既知の命令セットよりも少ないリソースを消費するよう構成された最適化された命令セットを含む、システム。
【請求項１３】
請求項１１に記載のシステムであって、
前記少なくとも１つの既知の命令セットは、前記ファイルの実行のエミュレーションを妨げるよう構成されたアンチエミュレーション命令を含み、前記アンチエミュレーション命令に対応する前記代替の命令セットは、実行をエミュレートするのと同じ結果を有し且つ前記ファイルの実行のエミュレーションを妨げないよう構成される、システム。
【請求項１４】
請求項９に記載のシステムであって、
前記少なくとも１つの既知の命令セットは、機械語命令とは異なるファイルの命令を処理するよう構成されたインタプリタライブラリの命令セットを含む、システム。
【請求項１５】
請求項９に記載のシステムであって、
前記少なくとも１つの既知の命令セットは、既知の命令セットのデータベースの１つ以上のシグネチャを使用して検出される、システム。
【請求項１６】
請求項９に記載のシステムであって、
前記プロセッサはさらに、前記ファイルの命令のインタプリタのライブラリファイルのイメージを生成するよう構成される、システム。
【請求項１７】
ファイルの実行のエミュレートするためのコンピュータ実行可能命令を含む非一時的コンピュータ可読媒体であって、
前記ファイルから読み取られた命令からなるファイルのイメージを生成させる命令と、
前記ファイルから読み取られた部分の少なくとも１つの既知の命令セットを検出させる命令と、
前記生成されたファイルのイメージの、前記少なくとも１つの既知の命令セットの先頭に対応する位置にブレークポイントを挿入させる命令と、
前記生成されたファイルのイメージの命令の実行をエミュレートさせることで前記ファイルの実行をエミュレートさせるとともに、前記少なくとも１つの既知の命令セットのエミュレートされた実行に関連する対応するレコードをエミュレーションログに追加させる命令とを備える、非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、一般にはファイル実行のエミュレーションの分野に関し、具体的には、ファイルの実行をエミュレートするシステム及び方法に関する。
【背景技術】
【０００２】
現在、実行可能ファイルの開発には様々な手段がある。ソフトウェアの開発中、特に実行可能ファイルの作成時にはしばしば、中間コード形式の命令（共通中間言語（CIL）命令等）やスクリプト形式の命令など、機械語命令とは異なる命令がそのファイルに置かれることがある。
【０００３】
ファイル（移植可能な実行可能ファイル（Portable Executable files：PEファイル）等）の実行をエミュレートする場合、関数呼び出しのログを可能な限り完全に作成することが重要である。このようなログの完全性は、実行をエミュレートする際の悪質なファイルの検出品質（検出率等）に特に影響する。実行可能ファイルが動的ライブラリのデータ型又は関数型を使用する場合、エミュレータはオペレーティングシステム（OS）ローダのいくつかのステップを実行する。例えば、Windows OS用の実行可能ファイルの場合、エミュレータは、IAT（インポートアドレステーブル：Import Address Table）における実行可能ファイルのイメージのセクションの変更を行う。ここで、セクションは、ファイルの実行中に呼び出す必要のある（、したがって実行のエミュレーション中にも呼び出す必要のある）関数のアドレスの固定に関するものである。エミュレータは、IATに入力された情報を、関数のアドレスとその名前との対応関係として保存する。したがって、ファイルのエミュレーション中に特定の関数が呼び出されると、エミュレータは特定のライブラリ関数が呼び出されたと判断し、関数呼び出しログを適切に変更する。
【０００４】
しかし、機械語命令とは異なる命令を含むファイルの実行をエミュレートしている間は、機械語命令とは異なる方法で形式化された関数に関する情報がIATに全く保存されない。したがって、機械語命令とは異なる方法で形式された機能も含め、命令の記録（ログにおける機能呼び出しの記録）に問題が生じる。
【発明の概要】
【０００５】
したがって、ファイルの実行をエミュレートするためのシステム及び方法が開示され、より詳細には、機械語命令とは異なる命令を含むファイルの実行をエミュレートするためのシステム及び方法が開示される。
【０００６】
１つの例示的な態様において、ファイルの実行をエミュレートするシステム及び方法が提供される。方法は、前記ファイルから読み取られた命令からなるファイルのイメージを生成するステップと、前記ファイルから読み取られた部分の少なくとも１つの既知の命令セットを検出するステップとを備える。方法はまた、前記生成されたファイルのイメージの、前記少なくとも１つの既知の命令セットの先頭に対応する位置にブレークポイントを挿入するステップを備える。方法は、前記生成されたファイルのイメージの命令の実行をエミュレートすることで前記ファイルの実行をエミュレートするとともに、前記少なくとも１つの既知の命令セットのエミュレートされた実行に関連する対応するレコードをエミュレーションログに追加するステップを備える。
【０００７】
他の態様によれば、ファイルのイメージは、方法は、前記ファイルに含まれるプログラムコードの命令と、前記プログラムコードのエントリーポイントに関するサービス情報とを含む。
【０００８】
他の態様によれば、前記ファイルの実行をエミュレートするステップは、前記挿入されたブレークポイントに到達したことに応じて、前記既知の命令セットの実行のエミュレーションを示すレコードを前記エミュレーションログに追加するステップと、前記挿入されたブレークポイントに到達したことに応じて、前記少なくとも１つの既知の命令セットの実行をエミュレートすることは控え、記少なくとも１つの既知の命令セットに対応する代替の命令セットの実行をエミュレートするステップとを備える。
【０００９】
他の態様によれば、前記代替の命令セットは、実行をエミュレートするのと同じ結果を有し且つ前記既知の命令セットよりも少ないリソースを消費するよう構成された最適化された命令セットを含む。
【００１０】
他の態様によれば、前記少なくとも１つの既知の命令セットは、前記ファイルの実行のエミュレーションを妨げるよう構成されたアンチエミュレーション命令を含み、前記アンチエミュレーション命令に対応する前記代替の命令セットは、実行をエミュレートするのと同じ結果を有し且つ前記ファイルの実行のエミュレーションを妨げないよう構成される。
【００１１】
他の態様によれば、前記少なくとも１つの既知の命令セットは、機械語命令とは異なるファイルの命令を処理するよう構成されたインタプリタライブラリの命令セットを含む。
【００１２】
他の態様によれば、前記少なくとも１つの既知の命令セットは、既知の命令セットのデータベースの１つ以上のシグネチャを使用して検出される。
【００１３】
他の態様によれば、方法は、前記ファイルの命令のインタプリタのライブラリファイルのイメージを生成するステップを備える。
【００１４】
他の例示的な態様によれば、本願に開示される方法の何れかを実行するためのコンピュータ実行可能命令を含む非一時的コンピュータ可読媒体が提供される。
【００１５】
上述した実施形態の簡単な概要は、本発明の基本的な理解を提供するのに役立つ。この説明は、全ての考えられる態様の詳細な概要ではなく、全ての態様の鍵となるものや重要な要素を特定することを意図していないし、本発明の全ての態様を描写することも意図していない。その唯一の目的は、前置きとして、１つ又は複数の態様を表し、その後、本発明のより詳細な説明を導くものである。これを達成するため、本発明の１つ又は複数の態様が説明され、特許請求の範囲において主張される。
【図面の簡単な説明】
【００１６】
添付の図面は、本明細書に組み込まれ、本明細書の一部を構成し、本開示の１つ以上の例示的な態様を示し、詳細な説明とともに、それらの原理および実施形態を説明する役割を果たす。
【００１７】
図１は、例示的な態様に係る、ファイルの実行をエミュレートするシステムを示すブロック図である。
【００１８】
図２Ａは、例示的な態様に係る、ファイルの実行をエミュレートする方法を示すフローチャートである。
【００１９】
図２Ｂは、他の例示的な態様に係る、ファイルの実行をエミュレートする他の方法を示すフローチャートである。
【００２０】
図３は、例示的な態様に係る、本願のシステム及び方法によって実装される汎用コンピュータシステムのブロック図である。
【発明を実施するための形態】
【００２１】
本明細書では、ファイルの実行をエミュレートするシステム、方法及びコンピュータプログラム製品の例示的な態様が説明される。当業者であれば、以下の説明は例示的なものにすぎず、いかなる限定をも意図するものではないことを理解するであろう。本開示の恩恵を受ける当業者であれば、異なる態様が容易に示唆されるであろう。添付の図面に例示される例示的な態様の実装の詳細が以下に参照される。図面全体及び以下の記載に亘って、同じ参照符号が可能な限り使用され、同一の符号は同一又は類似の対象を参照する。
【００２２】
本願では、様々な態様の説明のため、いくつかの用語が導入される。
【００２３】
エミュレーションは、あるデバイスの機能を、他のデバイス又は他のコンピュータのデバイスによって模倣するものである。模擬する側のデバイスは、同一のデータを受け取り、同一のプログラムを実行し、模擬される側のデバイスと同一の結果を達成する。
【００２４】
ファイルの実行をエミュレートするとは、他のデバイス又は他のコンピュータのデバイスによって、あるデバイス上のファイルの実行を模倣することである。
【００２５】
命令の実行をエミュレートするとは、あるデバイス上の命令の実行を、別のデバイス又は他のコンピュータのデバイスによって模倣することである。命令とは、実行可能なコードの命令を意味し、特に、実行可能なファイルに含まれるものであっても良く、実行可能なファイルの形式のものであっても良い。
【００２６】
ファイルのイメージは、その実行をエミュレートする過程でのファイルの表現（representation）、具体的には、少なくともその実行（及びその実行のエミュレート）に必要な完全性を備えた、ファイルを記述するデータのセットである。ファイルの実行をエミュレートする場合、エミュレータ（ハードウェア又はソフトウェア）は、当該ファイルのイメージの実行をエミュレートする。ファイル命令は、機械語命令形式及び中間コード形式（例えば、MSIL（Microsoft Intermediate Language）やPコード（portable code））の両方、又はスクリプトにより形式化される。それらの命令はそれぞれ、機械語命令、中間コード命令及びスクリプト命令である。
【００２７】
本願において、ファイルの実行をエミュレートするシステムの手段とは、実デバイス、システム、コンポーネント、ハードウェアにより実現されるコンポーネントのグループ（例えば、統合マイクロ回路（特定用途向け集積回路、ASIC）又はプログラマブルゲートアレイ（フィールドプログラマブルゲートアレイ、FPGA））を意味する。また、本願のファイルの実行をエミュレートするシステムの手段とは、例えば、マイクロプロセッサシステム及びソフトウェア命令セットのようなソフトウェアとハードウェアを組み合わせた形態や、ニューロモルフィックチップ（ニューロシナプティックチップ）等をも意味する。システムのこのような手段の機能は、ハードウェアのみによっても実現され得るが、組み合わせの形態でも実現することができる。つまり、システムの手段のいくつかの機能をソフトウェアにより実現し、他のいくつかの機能をハードウェアにより実現しても良い。いくつかの様態では、手段の一部又は全部を（図３に記載されているような）汎用コンピュータのプロセッサ上で実施することができる。システムの構成要素は、単一のコンピューティングデバイスだけで実現しても良く、いくつかの相互接続されたコンピューティングデバイスに分散されていても良い。
【００２８】
図１は、例示的な態様によるファイルの実行をエミュレートするシステム１００を示すブロック図である。システム１００は、エミュレーションモジュール１２０と、解析モジュール１２１と、エミュレーションログ１３０と、既知の命令セット及び／又は既知の機能を格納するよう構成されたデータベース１２５と、を備える。エミュレーションモジュール１２０は、解析モジュール１２１及びエミュレーションログ１３０に通信可能に接続される。解析モジュール１２１は、既知の命令セットのデータベース１２５に通信可能に接続される。一態様では、解析モジュール１２１はエミュレーションモジュール１２０の一部である。
【００２９】
エミュレーションモジュール１２０は、ファイル１１０の実行をエミュレートするよう構成される。一般的なケースでは、ファイル１１０は、命令を含むファイルである。一態様では、このファイルはPE（portable executable）フォーマットの実行可能ファイルであり、ファイルに含まれる命令は機械語命令である。ここで、この命令は、x86ファミリのプロセッサ、x86-64ファミリのプロセッサ又はこれらのファミリのプロセッサ用の命令を実行可能な他の任意のプロセッサにより実行可能なものである。さらに別の態様では、ファイル１１０は、他のタイプの命令及び異なるタイプの命令（例えば、機械語命令及び中間コード命令又はスクリプト、時にシナリオとも呼ばれる）を含む。ファイル１１０の実行のエミュレーションの間、エミュレーションモジュール１２０は１つ又は複数のエミュレーションログ１３０を作成する。エミュレーションログ１３０は、実行中に既知の命令セット（例えば、任意のWinAPI関数の命令）がエミュレートされたことを記述したレコードを含む。これらのレコードは、対応する命令セットの実行のエミュレーションの開始前又は実行のエミュレーション後のいずれかに、エミュレーションログ１３０に格納される。
【００３０】
ファイル１１０は、データ記憶装置に保存された任意のファイルであっても良い。一態様では、このファイル１１０は、コンピューティングデバイス（コンピュータ等）のデータ記憶装置に保存される。データ記憶装置には、ファイルの実行をエミュレートするシステムのコンポーネントも存在する。一態様では、このファイル１１０は、ヒューリスティックルールを用いたアンチウィルススキャンが実行されたファイルとされる。ここで、ヒューリスティックルールは、ファイル１１０の実行のエミュレーションの結果、特にエミュレーションログ１３０に適用される。このようなアンチウィルススキャンの結果、ファイル１１０に悪意があると分かると、当該ファイル１１０はデータ記憶装置から除去されるか、又は隔離された状態にされる。したがって、データ記憶装置上にファイル１１０が保持されたコンピューティングデバイスのセキュリティの実施という、他の技術的結果を達成することができる。
【００３１】
ファイル１１０の実行のエミュレーション（上述したように、これは１つのデバイス上のファイル１１０の実行を別のデバイス、つまりエミュレーションモジュール１２０により模倣することである）を行うため、エミュレーションモジュール１２０はファイル１１０のイメージを作成する。ファイルのイメージは、ファイル１１０の実行のエミュレート中にエミュレーションモジュール１２０によって使用されるファイルの表現である。
【００３２】
一態様では、ファイル１１０のイメージは、その実行のエミュレートに使用される情報を含む、データのセット（１つ又は複数のデータ構造の形式で表現できるもの）である。ファイル１１０の実行のエミュレートに使用される情報は、サービス情報と、ファイル１１０の命令（ファイル１１０に含まれるプログラムコードの命令）とを含む。サービス情報の例には、ファイル１１０のヘッダのエントリーポイント（相対仮想アドレス、RVAなど）や他のデータの情報、IAT（インポートアドレステーブル）の内容、ファイル１１０のセクションの位置情報等が含まれる。一態様では、サービス情報は、エントリーポイントから開始される命令（例えば、１００などの命令の数によって、又は、ファイル１１０の部分のサイズと等しいバイト（byte）等の累積的な量によって範囲が規定される命令）のセットでもある。一態様では、エミュレーションモジュール１２０は、ファイル１１０のイメージを作成するため、オペレーションシステム（OS）でプロセスを生成する際に、OSのローダの機能を模倣する。この場合、ファイル１１０の表現として生成されるファイル１１０のイメージは、OSによってこのファイル１１０から作成されるプロセスのアドレス空間における表現と同様のファイル１１０の表現である。
【００３３】
エミュレーションモジュール１２０は、ファイル１１０のイメージを作成するため、ファイル１１０からサービス情報を読み取る。ファイル１１０のイメージの作成には、ファイル１１０から読み取り、ファイル１１０のイメージにファイル１１０の命令を加えるステップも含まれる。一態様では、エミュレーションモジュール１２０は、ファイル１１０から命令を読み取り、これをファイル１１０のイメージの、一定サイズの部分１０５に追加する。
一態様では、部分１０５のサイズには、一度にファイル１１０の全ての命令を読み取れるサイズが選択される。他の態様では、ファイル１１０の命令は必要に応じて複数の部分１０５のために複数回読み取られる。
一態様では、ファイル１１０の次の部分１０５を読み取る必要性は、（ファイル１１０のイメージ又は別のファイルのイメージの）命令の実行のエミュレーションの際、エミュレーションモジュール１２０がそのファイル１１０のイメージに存在しない命令又はデータ（すなわち、ファイル１１０からまだ読み取られていない命令）にアクセスする場合、例えば、条件付き分岐命令を実行した結果としてアクセスする場合に生じる。一態様では、そのような部分１０５のサイズは４KBである。さらに別の態様では、そのような部分１０５のサイズは、ファイル１１０が保持されるデータ記憶装置上のクラスタのサイズに等しいとみなされる。なお、読み取られていない命令のファイル１１０のイメージ（ファイル１１０のまだ読み取られていない部分に存在する命令）が存在しない場合でも、ファイル１１０のイメージの命令（すでにイメージに存在する命令）の実行をエミュレートすることができる。一態様では、ファイル１１０の命令を含み、ファイル１１０から読み取られるファイル１１０の最初の（場合によっては唯一の）部分は、ファイルエントリーポイントによって示される命令を含むファイルの部分である。
【００３４】
エミュレーションモジュール１２０によってファイル１１０の部分を読み取った後、解析モジュール１２１は、ファイル１１０の読み採った部分にある既知の命令セットを検出する。既知の命令セットの探索において、解析モジュール１２１は、既知の機能のデータベース１２５に保持されている（少なくとも１つの）シグネチャを利用する。したがって、一態様では、各既知の命令セットは、少なくとも１つのシグネチャに対応する。一態様では、データベース１２５は、解析モジュール１２１の一部である。シグネチャは、特定の既知の命令セットの先頭を示す。一態様では、シグネチャは、一連のバイト、ハッシュサムや、ビット／バイト又は他の任意のマスクの形式を有する。さらに別の態様では、シグネチャはヒューリスティックルールを含み、ヒューリスティックルールをファイル１１０の命令セット（又は命令のうちのいくつか）へ適用することにより、既知の命令セットを検出することが可能になる。解析モジュール１２１は、既知の機能セットのデータベース１２５のシグネチャを使用し、その助けを借りて既知の命令セットの先頭を検出する。
【００３５】
既知の命令セットの一例には、静的ライブラリのサブプログラムが含まれる。一態様では、静的ライブラリは、例えばDelphi言語などのファイルの開発環境のライブラリ（開発環境を構成するライブラリ）である。既知の命令セットの別の例は、インタプリタファイル（例えば、インタプリタのライブラリ）の命令セットを含み、これは、スクリプトの命令又は中間コード命令を処理（解釈）するよう構成される。いくつかの態様では、インタプリタファイルはライブラリであって、当該ライブラリの命令（例えば、サブプログラム）は、機械語命令と異なるファイル１１０の命令の実行（解釈）のために用いられる（例えば、ファイル１１０がスクリプト又は中間コード命令を含む場合）。さらに別の例では、解析モジュール１２１は、ファイルの実行のエミュレートを妨げる既知の命令セット（すなわち、アンチエミュレーション命令セット）を検出する。例えば、このアンチエミュレーション命令は、エミュレーションモジュール１２０による特定のWinAPI機能の実現を検証する命令を含んでおり、そのような機能が実現されていない場合には、ファイル１１０の実行のエミュレーションを終了させるか又はファイル１１０の実行のエミュレート時間を増加させる命令を含んでいる。
【００３６】
既知の命令セットのシグネチャは、シンボリック名（例えば、「string_comparison」）又はチェックサムを含んでいても良い。これらは、エミュレーションモジュール１２０によるエミュレーション中に作成される既知の命令セットの実行のエミュレーションについてのレコードに追加され、その後、エミュレーションログ１３０に送信される。
【００３７】
解析モジュール１２１によるファイル１１０の読み取った部分の既知の命令セットの検出後、解析モジュール１２１は、当該ファイル１１０に対応するイメージの既知の命令セットの先頭に、ブレークポイントを設定する。ブレークポイントは、ファイル１１０のイメージの位置、すなわち、ファイル１１０の上述した部分を読み取ることによって配置される上述したイメージの位置に設定される。ブレークポイントは、エミュレーションモジュール１２０によって使用され、既知の命令セットの実行のエミュレーションに関するレコードを作成する時間と、このレコードのエミュレーションログ１３０への配置を決定する。
【００３８】
エミュレーションモジュール１２０は、ファイル１１０のイメージの命令の実行のエミュレートを実行する。上述したように、エミュレーションの過程においては命令の実行が模倣される。特に、実際のプロセッサ（物理プロセッサ）上の命令の実行が模倣される。エミュレーションの過程において、エミュレーションモジュール１２０はエミュレーションログ１３０を生成する。
【００３９】
一態様では、エミュレーションモジュール１２０はエミュレーションログ１３０に、動的ライブラリ（例えば、実際のコンピューティングデバイス上でファイル１１０を実行するときにファイル１１０から起動されるプロセスのアドレス空間にロードされるもの）に含まれるサブプログラムと命令（すなわち、実行可能なコード）の呼び出しのレコードを追加する。一態様では、サブプログラム呼び出し命令（例えば、これはアセンブラ言語での呼び出し命令である）の実行をエミュレートするとき、そのようなレコードがエミュレーションログ１３０に追加される。ここで、サブプログラムの命令が配置されることになっているアドレスは、IATレコードの１つのアドレスである。したがって、エミュレーションログ１３０にはIATからのレコードによって参照される既知の命令セット（サブプログラム）のエミュレーションのレコードが追加される。一態様では、このレコードは、fwrite、GetProcAddress等のシンボリック名など、既知の命令セットの識別子をさらに含む。
【００４０】
本開示のさらに別の態様では、ファイル１１０のイメージの命令の実行をエミュレートするプロセスにおいてエミュレーションモジュール１２０がブレークポイントに達した場合に、エミュレーションモジュール１２０はエミュレーションログ１３０に既知の命令セットの実行のエミュレートに関するレコードを追加する。エミュレーションモジュール１２０は、特定の命令からブレークポイントが設定された命令へのコントロールの転送を模倣する。先に述べたように、解析モジュール１２１がデータベース１２５のシグネチャの助けを借りてこの既知の命令セットを検出すると、ファイル１１０のイメージ内の既知の命令セットの先頭にブレークポイントが設定される。
【００４１】
エミュレーションモジュール１２０によるエミュレーションの過程において、ファイル１１０の次の部分１０５を読み取る必要が生じた場合、ファイル１１０からこの部分１０５の読み取りが行われ、上述したステップ（例えば、既知の命令セットの検出及びブレークポイントの設定）が繰り返され、エミュレーションモジュール１２０がそれをファイル１１０の部分１０５に追加することによって、ファイル１１０のイメージが更新される。その後、ファイル１１０の命令の実行をエミュレートするプロセスは、上述したシナリオに続く。
【００４２】
一態様では、エミュレーションモジュール１２０が既知の命令セットの先頭に設定されたあるブレークポイントに達すると、エミュレーションモジュール１２０は対応するレコードをエミュレーションログ１３０に追加するが、この既知の命令の実行のエミュレーションは行われない（すなわち、エミュレーションモジュールは実行をエミュレートすることを控える）。代わりに、エミュレーションモジュール１２０は、他の代替の命令セットの実行をエミュレートする。一態様では、データベース１２５はあらゆる既知の命令セットの代替の命令セットを含む。
【００４３】
一態様では、特定の既知の命令セットに対応する代替の命令セットは、最適化された命令セットである。つまり、その命令セットの実行をエミュレートした結果（例えば、模倣されているデバイスの状態：RAM、ROMやプロセッサのレジスタの値）は既知の命令セットの実行をエミュレートするときと同じであるが、その代替の命令セットの実行をエミュレートすることで、要求がより少なくなる（例えば、要する時間が少なくなったり、RAMやプロセッサレジスタの容量が少なく済むなど）。既知の命令セットの代わりにそのような命令セットの実行をエミュレートすることにより、ファイル１１０の実行をエミュレートするプロセスを高速化することができ、ファイル１１０の実行のエミュレートのための時間を短縮することができる。
【００４４】
さらに別の態様では、特定の既知のアンチエミュレーションの命令セットに対応する代替の命令セットは、（既知のセットと違って）ファイルの実行のエミュレートを妨げない命令セットである。つまり、この命令セットの実行をエミュレートした結果（例えば、模倣されているデバイスの状態：RAM、ROMやプロセッサのレジスタの値）は既知の命令セットの実行をエミュレートするときと同じであるが、（ファイル１１０の実行のエミュレートを妨げる可能性のある）アンチエミュレーションの命令セットはエミュレートしない。既知の命令セット（所定の場合、ファイル１１０の実行のエミュレートを妨げるもの）に代わってこの命令セットの実行をエミュレートすることは、特定の場合（既知の命令セットがエミュレーションを妨げる命令を含む場合）、ファイル１１０の実行をエミュレートするプロセスの高速化及びファイル１１０の実行をエミュレートする時間の短縮を可能にする。いくつかの例では、このアプローチは、情報の完全性に関して信頼できるエミュレーションログ１３０の作成を可能にする。このように作成されたログ１３０は、既知の命令セットの実行のエミュレートについてのより多くのレコードを含む。これは、ファイル１１０の命令の実行のエミュレートが、エミュレーションを妨げる既知の命令セットによって妨げられないためである。
【００４５】
一態様では、データベース１２５に保持されたデータは、専門家、特にコンピュータ技術の専門家によってデータベース１２５に格納されたものである。一態様では、そのようなデータは、インターネットなどのネットワークを介してサーバ（例えば、第三者サーバ）から解析モジュール１２１に送信される。解析モジュール１２１は、受信したデータをデータベース１２５に保存する。
【００４６】
一態様では、エミュレーションモジュール１２０は、（ファイル１１０に対するステップと同様のステップを実行することで）他のファイルのイメージを追加で生成することができる。いくつかの態様では、そのようなファイルは、ファイル１１０の命令の実行をエミュレートするために必要なファイルである。例えば、ファイル１１０の命令の実行（つまり実行のエミュレート）中に使用可能な動的ライブラリファイルである。動的ライブラリファイルは、ファイル１１０の命令のインタプリタのライブラリファイルを含む。ファイル１１０が機械語命令だけでなく他の種類の命令（スクリプト形式の命令等：機械語命令とは異なる命令を含むファイルと呼ばれる）を含む場合、動的ライブラリファイルは、ファイル１１０の命令のインタプリタのライブラリファイルを含み得る。インタプリタのライブラリ（したがって、別々の命令セット）は、機械語命令とは異なる命令を解釈するために使用される。
エミュレーションモジュール１２０は、もしファイル１１０のイメージの命令から他のファイルのイメージの命令に制御の転送（制御の転送のエミュレーション）が生じた場合、他のファイルのイメージの命令を実行する。例えば、その命令が他のファイルのイメージに存在するサブプログラムの、（例えば呼び出しの実行又はjmp命令のエミュレートによる）呼び出しにより、制御の転送が生じる。一態様では、ファイル１１０のイメージの命令の実行のエミュレーションのプロセスは、他のファイルのイメージの命令の実行のエミュレーションを含む。したがって、他のファイルのイメージの命令の実行のエミュレートの際、他のファイルのイメージに含まれる既知の命令セットのエミュレーションに関するレコードも、エミュレーションログ１３０に追加される。
【００４７】
なお、ファイルのイメージの追加的な生成は、必要な場合、例えば、ファイル１１０の実行のエミュレート中に、他のファイルからデータを読み取るか、又は他のファイルのイメージの命令の実行をエミュレートする必要がある場合にのみ行われる。例えば、他のファイルのイメージの命令に制御を転送するサブプログラム、分岐命令（無条件のジャンプ等）あるいは他の状況を呼び出すための（ファイル１１０のイメージ内に存在する）命令の実行をエミュレートする場合である。このようなファイルのイメージ生成プロセスは、上述したものと同様である。したがって、本願のコンテキストにおける方法のすべてのステップは、ファイル１１０だけでなく、ファイル１１０のエミュレーションに必要な他のファイルにも適用することができる。
【００４８】
一態様では、ファイル１１０の命令の実行のエミュレーションに必要なファイルは、ファイル１１０の命令のインタプリタのライブラリファイルである。このようなライブラリファイルの例としては、Microsoft Visual Basicの仮想マシンのモジュールであるmsvbvm60.dllファイルがある。一例としては、中間Pコードサブプログラムの実現（言い換えると、機械語命令以外の命令の処理（すなわち解釈）を意図する）のための命令の、このmsvbvm60.dllファイルの以下の既知の（アセンブリ言語のコードと特定のメモリアドレスの名前によって補完される）命令セットを挙げることができる。
LitStr:
E8 6C 9F F2 FF    (call _vbaStrVarCopy(x))
50       push eax
33 C0      xor eax, eax
8A 06      mov al, [esi]
46       inc esi
FF 24 85 58 FA 4D 73 jmp ds:VM_Table[eax*4]
【００４９】
さらに、この既知の命令セットに対して、データベース１２５は、その識別子を「プッシュ<定数列>（push <constant string>）」のままにする。これは、それが実行される（したがって実行がエミュレートされる）際、文字列（string）に対するポインタがスタックに配置されることを意味する。この命令セットの実行をエミュレートする際、エミュレーションモジュール１２０は、既知の命令セットの識別子を示す対応するレコードをエミュレーションログ１３０に追加する。特定の既知の命令セットの実行をエミュレートする際、エミュレーションモジュール１２０は、エミュレーションの経過に関してエミュレーションログに置かれたレコードに他の情報、すなわち、模倣されているレジスタの内容、呼び出されたサブプログラムの引数などを追加することもできる。上記の方法の助けを借りることで、技術的問題が解決される。すなわち、機械語命令以外の形式（言い換えると、機械語命令とは異なった形式）の命令、例えばスクリプト形式又は中間コード形式の命令を含むファイルのエミュレーションログを作成することができる。インタプリタライブラリファイルの実行をエミュレートすることによって、このようなエミュレーション方法により、機械語命令の形式とは異なる形式の命令を含むファイルの実行のエミュレーションという形で、技術的結果を達成することができる。
【００５０】
一態様では、インタプリタライブラリファイルのイメージのブレークポイントの設定は（そのようなファイルの命令セットは一般的に変更されないので）１回実行され、設定されたブレークポイントに関する情報は解析モジュール１２１に保持され、既知の命令セットのシグネチャを使用することなく当該既知の命令セットを検出するために使用される。
【００５１】
エミュレーションモジュール１２０を、ファイル１１０の実行のエミュレーションのプロセスを停止させるよう構成してもよい。一態様では、エミュレーションモジュールは、確立されたエミュレーション時間、例えば１０秒が経過したときにエミュレーションのプロセスを停止することができる。さらに別の態様では、エミュレーションモジュールは、割り込み呼び出し又は実行完了機能のための命令の実行をエミュレートすることに応じて、エミュレーションのプロセスを停止することができる。
【００５２】
図２Ａは、例示的な態様に係るファイルの実行をエミュレートする方法２００Ａを示すフローチャートである。ステップ２０１において、エミュレーションモジュールはファイル１１０のイメージを作成する。このステップには、ファイル１１０の部分１０５の読み取りも含まれる。このように、エミュレーションモジュールは、ファイルから読み取られた命令からなるファイルのイメージを生成する。いくつかの態様では、ファイルのイメージは、ファイルに含まれるプログラムコードの命令と、プログラムコードのエントリーポイントに関するサービス情報とを含む。いくつかの態様では、エミュレーションモジュール１２０は、ファイルの命令のインタプリタのライブラリファイルのイメージを生成する。
【００５３】
次に、ステップ２０２において、解析モジュール１２１は、エミュレーションモジュール１２０によって読み取られたファイル１１０の部分１０５内の少なくとも１つの既知の命令セットを検出する。検出は、既知の命令セットのデータベース１２５のシグネチャを用いて行うことができる。一態様では、検出された少なくとも１つの既知の命令セットは、対応する最適化された命令を有する命令である。別の態様では、検出された少なくとも１つの既知の命令セットは、ファイルの実行のエミュレーションを妨げるよう構成されたアンチエミュレーション命令を含む。いくつかの態様では、検出された少なくとも１つの既知の命令セットは、機械語命令とは異なるファイルの命令を処理するよう構成されたインタプリタライブラリの命令セットを含む。ステップ２０３において、解析モジュール１２１は、ファイル１１０の読み取った部分１０５で検出された全ての既知の命令の先頭に対応する、作成されたファイル１１０のイメージの場所（位置）に、ブレークポイントを設定する。
【００５４】
その後、ステップ２０４において、エミュレーションモジュール１２０は、ファイル１１０のイメージの命令の実行のエミュレーションを実行し、エミュレーションログ１３０に既知の命令セットの実行のエミュレーションに関する対応するレコードを追加する。いくつかの態様では、ファイルのイメージにある命令の実行をエミュレートするプロセスにおいて、エミュレーションモジュール１２０は、挿入されたブレークポイントに到達したことに応じて、エミュレーションログに既知の命令セットの実行のエミュレーションを示すレコードを追加し、検出された少なくとも１つの既知の命令セットに対応する代替の命令セットの実行をエミュレートする（すなわち、検出された少なくとも１つの既知の命令セットの実行をエミュレートすることを控える）。いくつかの態様では、代替の命令セットは、実行をエミュレートするのと同じ結果を有し既知の命令セットよりも少ないリソースを消費するよう構成された最適化された命令セットを含む。いくつかの態様では、アンチエミュレーション命令に対応する代替の命令セットは、実行をエミュレートするのと同じ結果を有し、ファイルの実行のエミュレーションを妨げないように構成される。
【００５５】
ファイル１１０のイメージから命令の実行をエミュレートするステップ２０４において、ファイル１１０の次の部分１０５を読み取る必要が生じた場合、エミュレーションモジュール１２０は、ステップ２０５において、ファイル１１０の次の部分１０５を読み取る。そしてその後、ステップ２０２〜２０５（２０５は必要な場合のみ）が繰り返される。エミュレーションモジュールは、例えば規定のエミュレーション時間が経過すると、ステップ２０６において、ファイル１１０の実行をエミュレートするプロセスを停止（終了）する（ステップ２０２〜２０５のいずれかを実行する際に停止することもあるが、その遷移は破線で示される）。
【００５６】
図２Ｂは、別の例示的な態様に係るファイルの実行をエミュレートする方法２００Ｂを示すフローチャートである。ステップ２２１において、エミュレーションモジュール１２０は、ファイル１１０のイメージを作成する。このステップはまた、ファイル１１０の部分１０５の読み取りを含む。次に、ステップ２２２において、解析モジュール１２１は、エミュレーションモジュール１２０によって読み取られたファイル１１０の部分１０５の少なくとも１つの既知の命令セットを検出する。検出は、既知の命令セットのデータベース１２５のシグネチャを用いて行うことができる。ステップ２２３において、解析モジュール１２１は、作成されたファイル１１０のイメージの、当該ファイル１１０の読み取り部分１０５にある検出された全ての既知の命令の先頭に対応する場所に、ブレークポイントを設定する。
その後、ステップ２２４において、エミュレーションモジュール１２０は、ファイル１１０のイメージの命令の実行のエミュレーションを実行し、エミュレーションログ１３０に、既知の命令セットの実行のエミュレーションに関する対応するレコードを追加する。
ファイル１１０のイメージの命令の実行をエミュレートするステップ２２４において、ファイル１１０の次の部分１０５を読み取る必要が生じた場合、エミュレーションモジュール１２０は、ステップ２２５において、ファイル１１０の次の部分１０５を読み取る。そしてその後、ステップ２２２〜２２５（２２５は必要な場合のみ）が繰り返される。
【００５７】
ファイル１１０のイメージの命令の実行をエミュレートする過程で、別のファイルのイメージの命令の実行のエミュレーションを実行する必要が生じた場合、エミュレーションモジュール１２０はステップ２２８において、当該他のファイルのイメージを形成する。ステップ２２８における他のファイルのイメージの形成はステップ２２１と同様である。この後、ステップ２２２〜２２５は、当該他のファイルに関して実行される。他のファイルのイメージの命令の実行をエミュレートする間、同様に、さらに別のファイルのイメージの命令の実行をエミュレートする必要が生じる可能性がある。この場合、ステップ２２８，２２２〜２２５は、上述のシナリオと同様に繰り返される。エミュレーションモジュールは、例えば規定のエミュレーション時間が経過すると、ステップ２２６において、ファイル１１０の実行をエミュレートするプロセスを停止（終了）することができる（ステップ２０２〜２０５のいずれかを実行する際に停止することもあるが、その遷移は破線で示される）。
【００５８】
一態様では、ファイル１１０及び当該ファイル１１０のイメージが機械語命令とは異なる命令を含む場合、別のファイルの命令、特に他のファイルのイメージの命令の実行をエミュレートする必要性、したがって、他のファイルのイメージを作成する必要性が生じる。そのため、インタプリタ（ライブラリ）ファイルである他のファイルのイメージの命令の実行をエミュレートする必要性が生じる。また、ファイル１１０のイメージの機械語命令とは異なる命令の解釈には、ファイルのイメージの命令の実行のエミュレートが必要となる。例えば、ファイル１１０のイメージはCILコードを含み、エミュレーションモジュール１２０は、ファイル１１０のイメージの命令の実行のエミュレート中に_coreexemain関数の呼び出しのエミュレーションを実行する必要がある場合、他のファイルのイメージ、特にファイルのイメージMSCoreEE.dllの命令の実行をエミュレートする必要が生じ、その結果、コントロールは、ファイル１１０のイメージから.NET実行環境（.NET Execution Environment、MSCoreEE.dllファイルのイメージ）に転送される。このような必要性が生じると、エミュレーションモジュール１２０は、インタプリタファイル、特にMSCoreEE.dllファイルのイメージを作成し、当該ファイルのイメージの命令の実行のエミュレーションを開始する。そして、MSCoreEE.dllファイルのイメージの_coreexemain関数の命令の実行のエミュレート中に、ファイル１１０のイメージのCILコードの解釈（処理）のために設計された命令のエミュレーションが実行される。他の態様では、既知の命令セットは、インタプリタ（ライブラリ）ファイル（MSCoreEE.dll）の命令セットであり、したがって、このファイルのイメージの命令でもある。これは、ファイル１１０のイメージに含まれる機械語命令とは異なる命令（CILコード）の処理（解釈）のために設計される。
【００５９】
一態様では、ファイル１１０に関するステップ２２２及び２２３はスキップされる。したがって、ファイル１１０の実行のエミュレーション中に既知の命令セットの実行のエミュレートに関するレコードがエミュレーションログ１３０に追加されることはなく、他のファイルのイメージ、特にステップ２２８において作成されたイメージの、既知の命令セットの実行のエミュレーションのレコードのみが追加される。
【００６０】
図３は、ファイルの実行をエミュレートするシステム及び方法の態様が例示的な態様に従って実施され得る汎用コンピュータシステム２０を示すブロック図である。コンピュータシステム２０は、例えば、先に説明したシステム１００に対応する。
【００６１】
図示のように、コンピュータシステム２０（パーソナルコンピュータ又はサーバ）は、ＣＰＵ２１と、システムメモリ２２と、ＣＰＵ２１に関連付けられたメモリを含む様々なシステムコンポーネントを接続するシステムバス２３とを含む。当業者に理解されるように、システムバス２３は、バスメモリ又はバスメモリコントローラ、周辺バス、及び他のバスアーキテクチャと相互作用するローカルバスを含むことができる。システムメモリは、永久メモリ（ROM）２４及びランダムアクセスメモリ（RAM）を含む。基本入出力システム（BIOS）２６は、ROM２４を使用してオペレーションシステムをロードする際のように、コンピュータシステム２０の要素間で情報を転送するための基本的な手順を記憶する。
【００６２】
ハードディスク２７、磁気ディスクドライブ２８、及び光学式のドライブ３０は、ハードディスクインターフェース３２、磁気ディスクインターフェース３３、及び光学式のドライブインターフェース３４それぞれを介してシステムバス２３と接続される。ドライブ及び対応するコンピュータ情報メディアは、コンピュータ命令、データ構造体、プログラムモジュール、及びコンピュータシステム２０の他のデータを蓄積するための電源依存のモジュールである。
【００６３】
当業者であれば、コンピュータによって読み取り可能な形式でデータを記憶することのできる任意のタイプのメディア５６（ソリッド・ステート・ドライブ、フラッシュメモリカード、デジタルディスク、ランダムアクセスメモリ（RAM）等）を使用できることが理解されよう。
【００６４】
コンピュータシステム２０は、オペレーティングシステム３５が格納されるファイルシステム３６と、追加のプログラムアプリケーション３７と、他のプログラムモジュール３８と、プログラムデータ３９とを有する。コンピュータシステム２０のユーザは、キーボード４０、マウス４２、又は当業者に知られた任意の他の入力デバイス（非限定的な例：マイクロフォン、ジョイスティック、ゲームコントローラ、スキャナ等）を用いて命令を入力する。このような入力デバイスは、典型的には、シリアルポート４６を介してコンピュータシステム２０に接続され、シリアルポートはシステムバスに接続される。ただし、当業者であれば、入力デバイスを、パラレルポート、ゲームポート、又はユニバーサル・シリアル・バス（USB）など（これらに限定されない）を介して接続することができることを理解するであろう。モニタ４７又は他のタイプの表示装置もまた、ビデオアダプタ４８などのインタフェースを介してシステムバス２３に接続することができる。パーソナルコンピュータは、モニタ４７に加えて、ラウドスピーカやプリンタなどの他の周辺出力装置（図示せず）を備えていても良い。
【００６５】
コンピュータシステム２０は、１つ又は複数のリモートコンピュータ４９へのネットワーク接続により、ネットワーク環境で動作することができる。リモートコンピュータ（又は複数のコンピュータ）４９は、コンピュータシステム２０の性質を説明する上で前述した要素のほとんど又は全てを含むローカルコンピュータワークステーション又はサーバであっても良い。ルータ、ネットワークステーション、ピアデバイス、又は他のネットワークノードなどの他のデバイスも、コンピュータネットワークに存在することができるが、これに限定されるものではない。
【００６６】
ネットワーク接続は、ローカルエリアコンピュータネットワーク（LAN）５０及びワイドエリアコンピュータネットワーク（WAN）を形成することができる。このようなネットワークは、企業のコンピュータネットワーク及び社内ネットワークで使用され、一般にインターネットにアクセスする。LAN又はWANネットワーク内では、パーソナルコンピュータ２０は、ネットワークアダプタ又はネットワークインタフェース５１を介してローカルエリアネットワーク５０に接続される。ネットワークが使用される場合、コンピュータ２０は、モデム５４又はインターネットなどのワイドエリアコンピュータネットワークとの通信を可能にする当業者に周知の他のモジュールを使用することができる。モデム５４は、内部又は外部のデバイスとすることができ、シリアルポート４６によってシステムバス２３に接続される。上記のネットワークシステムが、通信モジュールを使用して１つのコンピュータが他のコンピュータへの接続を確立するための多くの周知の方法のうちの非限定的な例であることは、当業者には理解されるだろう。
【００６７】
様々な実施形態において、ハードウェア、ソフトウェア、ファームウェア、又はこれらのあらゆる組み合わせにより、ここで説明されたシステム及び方法を実施し得る。ソフトウェアにおいて実装される場合は、方法は非一時的コンピュータ可読媒体の１つ又は複数の命令又はコードとして保存され得る。コンピュータ可読媒体は、データストレージを含む。あくまでも例であり限定するものではないが、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROM、フラッシュメモリ、若しくは他のタイプの電気、磁気、光学式の記憶媒体、又はその他のメディアであってもよい。すなわち、これらによって命令又はデータ構造体という形で、要求されたプログラムコードを運ぶか又は保存することができ、汎用コンピュータのプロセッサによってアクセスすることができる。
【００６８】
様々な実施形態で、本願のシステム及びメソッドはモジュールとして実装され得る。ここで用語「モジュール」は、実世界の機器、コンポーネント、又はハードウェアを用いて実装されたコンポーネント配置であり、例えばASIC（Application Specific Integrated Circuit）、FPGA（Field-Programmable Gate Array）等の、又は例えばモジュールの機能を実行するマイクロプロセッサシステムや命令セットによる等、ハードウェアとソフトウェアの組み合わせとして実装され得る。これらは、実行中にマイクロプロセッサシステムを特定の機器に変換する。モジュールは、ハードウェア単体により促進される一定の機能とハードウェア及びソフトウェアの組み合わせによって促進される他の機能という２つの組み合わせとして実施されてもよい。モジュールの少なくとも一部又は全部は、汎用コンピュータのプロセッサにおいて実行できる（図３を用いて上記において詳述したもの等）。したがって、各モジュールは様々な適当な構成で実現することができて、ここに例示した特定の実装に限られるものではない。
【００６９】
なお、実施形態の通常の機能のうちの全てをここで開示しているわけではない。本発明のいずれの実施形態を開発する場合においても、開発者の具体的な目標を達成するためには実装に係る多くの決定が必要であり、これらの具体的な目標は実施形態及び開発者ごとに異なることに留意されたい。このような開発努力は、複雑で時間を要するものであるが、本発明の利益を享受し得る当業者にとっては当然のエンジニアリングであると理解されたい。
【００７０】
さらに、本明細書で使用される用語又は表現は、あくまでも説明のためであり、限定するものではない。つまり、本明細書の用語又は表現は、関連する技術分野の当業者の知識と組み合わせて、ここに示される教示及び指針に照らして当業者によって解釈されるべきであると留意されたい。明示的な記載がない限り、明細書又は特許請求の範囲内における任意の用語に対して、一般的でない又は特別な意味を持たせることは意図されていない。
【００７１】
本明細書で開示された様々な態様は、例示のために本明細書に言及した既知のモジュールの、現在及び将来の既知の均等物を包含する。さらに、複数の態様及び用途を示し、説明してきたが、本明細書に開示された発明の概念から逸脱することなく、上述したよりも多くの改変が可能であることが、この開示の利益を有する当業者には明らかであろう。
【図１】
2019036278.tif 000003
【図２Ａ】
2019036278.tif 000004
【図２Ｂ】
2019036278.tif 000005
【図３】
2019036278.tif 000006
【外国語明細書】
2019036278000001.pdf