(57)【特許請求の範囲】
【請求項１】
コンピュータプログラムの実行を制御するためにコンピュータに実装される方法であって、
前記方法は、メモリセクタ決定工程と、ページ決定工程と、複製工程と、タグ付け工程と、通知受信工程と、転送工程を含み、
前記メモリセクタ決定工程は、仮想メモリアドレス空間において、コンピュータプログラムの実行命令の少なくとも一部を格納するメモリセクタをプロセッサによって決定し、
前記ページ決定工程は、前記メモリセクタに関連するコード命令及びデータを含む１つ又は複数のページを前記仮想メモリアドレス空間内で決定し、
前記複製工程は、前記メモリセクタと前記１つ又は複数のページを含む前記仮想メモリアドレス空間の複製を作成し、
前記タグ付け工程は、前記仮想メモリアドレス空間とその複製の両方において、前記メモリセクタと前記１つ又は複数のページをタグ付けし、
前記通知受信工程は、前記仮想メモリアドレス空間又はその複製に格納された命令を実行する間、それぞれのメモリセクタ間で前記コンピュータプログラムの実行を転送するための通知を受信し、
前記転送工程は、前記コンピュータプログラムの実行を、前記通知を受信したメモリロケーションとは別のメモリロケーションに転送する、方法。
【請求項２】
前記コンピュータプログラムの実行命令を格納する前記仮想メモリアドレス空間を取得する工程をさらに含む、請求項１に記載の方法。
【請求項３】
前記１つ又は複数のページで１つ又は複数のメモリセクタを特定する工程をさらに含み、前記１つ又は複数のページには、前記メモリセクタに関連付けられていないコード命令及びデータが含まれる、請求項１に記載の方法。
【請求項４】
前記１つ又は複数の各ページを以下のように特定する工程をさらに含み、
第１のタイプのページは、特定された前記メモリセクタに関するものだけのコード命令及びデータ、或いは特定された前記メモリセクタではないメモリセクタに関するものだけのコード命令及びデータを含み、
第２のタイプのページは、特定された前記メモリセクタ及び特定された前記メモリセクタではないメモリセクタの両方に関するコード命令及びデータを含む、請求項３に記載の方法。
【請求項５】
前記タグ付け工程は、前記仮想メモリアドレス空間と前記仮想メモリアドレス空間の複製の両方において、前記第１のタイプのページと前記第２のタイプのページについて互いに同じタグでタグ付けする工程を含む、請求項４に記載の方法。
【請求項６】
前記タグ付け工程は、前記仮想メモリアドレス空間と前記仮想メモリアドレス空間の複製の両方において、前記第１のタイプのページと前記第２のタイプのページについて互いに異なるタグでタグ付けする工程を含む、請求項４に記載の方法。
【請求項７】
以下の転送を検出すると、前記仮想メモリアドレス空間で前記通知を作成する工程をさらに含み、
前記両タイプのページに関連付けられた２つのセクタ間で制御の転送、
或いは前記第２のタイプのページにおけるページのセクタのタグ付けされたコード命令又はデータへの制御の転送である、請求項４に記載の方法。
【請求項８】
以下の２つのセクタ間で制御の転送を検出すると、前記仮想メモリアドレス空間の複製で前記通知を作成する工程をさらに含み、
前記２つのセクタ間とは、別々のタグを有するがどちらも前記第１のタイプのページに関連しているセクタ間、或いは、
前記第２のタイプのページのページに関連付けられたセクタから、
別のタグを有し前記第１のタイプのページのページに関連付けられたセクタとの間である、
請求項４に記載の方法。
【請求項９】
コンピュータプログラムの実行を制御する例示的なシステムであって、前記システムは、メモリに接続されたハードウェアプロセッサを備え、前記プロセッサは、
コンピュータプログラムの実行命令の少なくとも一部を仮想メモリアドレス空間に格納するために、前記プロセッサによってメモリセクタを決定し、
前記メモリセクタに関連するコード命令及びデータを含む１つ又は複数のページを仮想メモリアドレス空間内で決定し、
前記メモリセクタと、前記１つ又は複数のページを含む前記仮想メモリアドレス空間の複製を作成し、
前記仮想メモリアドレス空間と前記仮想メモリアドレス空間の複製との両方において、前記メモリセクタと前記１つ又は複数のページをタグ付けし、
前記仮想メモリアドレス空間又は前記仮想メモリアドレス空間の複製に格納された命令を実行する間、それぞれのメモリセクタ間で前記コンピュータプログラムの実行を転送するための通知を受信し、
前記コンピュータプログラムの実行を、前記通知を受信したメモリロケーションとは別のメモリロケーションに転送するように構成される、システム。
【請求項１０】
前記プロセッサは、前記１つ又は複数のページで１つ又は複数のメモリセクタを特定するようにさらに構成され、前記１つ又は複数のページには、前記メモリセクタに関連付けられていないコード命令及びデータを有する、請求項９に記載のシステム。
【請求項１１】
前記プロセッサは、前記１つ又は複数の各ページを以下のように特定するようにさらに構成され、
第１のタイプのページは、特定された前記メモリセクタに関するものだけのコード命令及びデータ、或いは特定された前記メモリセクタではないメモリセクタに関するものだけのコード命令及びデータを含み、
第２のタイプのページは、特定された前記メモリセクタ及び特定された前記メモリセクタではないメモリセクタの両方に関するコード命令及びデータを含む、請求項９に記載のシステム。
【請求項１２】
前記プロセッサは、前記仮想メモリアドレス空間と前記仮想メモリアドレス空間の複製の両方において、前記第１のタイプのページと前記第２のタイプのページについて互いに同じタグでタグ付けするように構成される、請求項１１に記載のシステム。
【請求項１３】
前記プロセッサは、前記仮想メモリアドレス空間と前記仮想メモリアドレス空間の複製の両方において、前記第１のタイプのページと前記第２のタイプのページについて互いに異なるタグでタグ付けするように構成される、請求項１１に記載のシステム。
【請求項１４】
前記プロセッサは、以下の転送を検出すると、前記仮想メモリアドレス空間で前記通知を作成するようにさらに構成され、
前記両タイプのページに関連付けられた２つのセクタ間で制御の転送、
或いは前記第２のタイプのページにおけるページのセクタのタグ付けされたコード命令又はデータへの制御の転送である、請求項１１に記載のシステム。
【請求項１５】
前記プロセッサは、以下の２つのセクタ間で制御の転送を検出すると、前記仮想メモリアドレス空間の複製で前記通知を作成するようにさらに構成され、
前記２つのセクタ間とは、別々のタグを有するがどちらも前記第１のタイプのページに関連しているセクタ間、或いは、前記第２のタイプのページのページに関連付けられたセクタから、
別のタグを有し前記第１のタイプのページのページに関連付けられたセクタとの間である、
請求項１１に記載のシステム。
【請求項１６】
コンピュータプログラムの実行を制御するためのコンピュータ実行可能命令を格納する非一時的なコンピュータ可読媒体であって、前記命令は、メモリセクタ決定命令と、ページ決定命令と、複製命令と、タグ付け命令と、通知受信命令と、転送命令を含み、
前記メモリセクタ決定命令は、コンピュータプログラムの実行命令の少なくとも一部を仮想メモリアドレス空間に格納するために、プロセッサによってメモリセクタを決定し、
前記ページ決定命令は、前記メモリセクタに関連するコード命令及びデータを含む１つ又は複数のページを前記仮想メモリアドレス空間内で決定し、
前記複製命令は、前記メモリセクタと前記１つ又は複数のページを含む前記仮想メモリアドレス空間の複製を作成し、
前記タグ付け命令は、前記仮想メモリアドレス空間と前記仮想メモリアドレス空間の複製の両方において、前記メモリセクタと前記１つ又は複数のページをタグ付けし、
前記通知受信命令は、前記仮想メモリアドレス空間又は前記仮想メモリアドレス空間の複製に格納された命令を実行する間、それぞれのメモリセクタ間で前記コンピュータプログラムの実行を転送するための通知を受信し、
前記転送命令は、前記コンピュータプログラムの実行を、前記通知を受信したメモリロケーションとは別のメモリロケーションに転送する、非一時的なコンピュータ可読媒体。
【請求項１７】
前記命令は、取得命令と、メモリセクタ特定命令と、ページ特定命令をさらに含み、前記取得命令は、前記コンピュータプログラムの実行命令を格納する前記仮想メモリアドレス空間を取得し、
前記メモリセクタ特定命令は、前記１つ又は複数のページの中に１つ又は複数のメモリセクタを特定し、前記１つ又は複数のページには、前記メモリセクタに関連付けられていないコード命令及びデータを有し、
前記ページ特定命令は、前記１つ又は複数の各ページを以下のように特定し、
第１のタイプのページは、特定された前記メモリセクタに関するものだけのコード命令及びデータ、或いは特定された前記メモリセクタではないメモリセクタに関するものだけのコード命令及びデータを含み、
第２のタイプのページは、特定された前記メモリセクタ及び特定された前記メモリセクタではないメモリセクタの両方に関するコード命令及びデータを含む、請求項１６に記載の非一時的なコンピュータ可読媒体。
【請求項１８】
前記タグ付け命令は、前記仮想メモリアドレス空間と前記仮想メモリアドレス空間の複製の両方において、前記第１のタイプのページと前記第２のタイプのページについて互いに同じタグ又は異なるタグでタグ付けする命令を含む、請求項１７に記載の非一時的なコンピュータ可読媒体。
【請求項１９】
以下の転送を検出すると、前記仮想メモリアドレス空間で前記通知を作成する命令をさらに含み、
前記両タイプのページに関連付けられた２つのセクタ間で制御の転送、
或いは前記第２のタイプのページにおけるページのセクタのタグ付けされたコード命令又はデータへの制御の転送である、請求項１７に記載の非一時的なコンピュータ可読媒体。
【請求項２０】
以下の２つのセクタ間で制御の転送を検出すると、前記仮想メモリアドレス空間の複製で前記通知を作成する命令をさらに含み、
前記２つのセクタ間とは、別々のタグを有するがどちらも前記第１のタイプのページに関連しているセクタ間、或いは、
前記第２のタイプのページのページに関連付けられたセクタから、
別のタグを有し前記第１のタイプのページのページに関連付けられたセクタとの間である、
請求項１７に記載の非一時的なコンピュータ可読媒体。
【請求項２１】
前記命令は、あるタグでタグ付けされたメモリセクタから別のタグでタグ付けされたメモリセクタへ、プログラム制御を転送したプログラム命令に関する情報をログに保存する命令をさらに含む、請求項１６に記載の非一時的なコンピュータ可読媒体。
【請求項２２】
メモリロケーションを選択することは、
プログラム命令の実行のために、関連あるメモリセクタを選択する命令と、
プログラムＡＰＩ関数ライブラリの実行のために複製メモリセクタを選択する命令を含む、
請求項１６に記載の非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連アプリケーションへの相互参照
本出願は、2016年6月2日に出願されたロシア出願第2016121876号に記載に対して35U.S.C.（a）から（d）に基づく優先権の利益を主張し、本願に引用する。
【０００２】
本開示は、一般的にコンピュータ分野に関するものであり、より詳細には、メモリロケーション間で制御を転送するシステム及び方法に関するものである。
【背景技術】
【０００３】
プログラム実行中にAPI関数コールのログを作成するための現在の技術は、ハードドライブディスクのプロセス又はファイルのアドレス空間の内容に介入する必要がある。つまり、メモリ内及びディスクにあるオペレーティングシステムのシステムライブラリにあるコードを変更する等である。そのような変更の為には、API関数コールのロギング（ログ作成）のメカニズムを担っている「コードの導入」がある。このメカニズムの主な工程は、以下の通りである。
・ライブラリ管理の傍受（例えば、目的である関数のコードを変更してAPI機能を傍受する等）
・API関数がコールされている間に、メモリ領域（API関数及びロギングコールの処理を担うハンドラコードを含むメモリ領域）へ（コードを）転送
・ロギングシステムのハンドラのコードの実行
・ライブラリへの制御のリターン
【０００４】
ロギングシステムにおいて制御をキャプチャーするために、実行可能ファイルのインポートテーブルにあるライブラリからのAPI関数コールのアドレスを変更する方法が用いられ、及び/又は"中間"ライブラリの配置を使用する方法も用いられる。オリジナルライブラリから元のコールされたAPI関数に移行する前に、中間ライブラリへ最初のコールを送るという方法である。
【０００５】
既存のロギングシステムの1つの欠点は、別のオペレーティングシステム及びそれぞれのバージョンに対してロギングシステムを実装することが困難であることである。例えば、OSの更新により、ロギングシステムの動作が停止し、更新されたOSで動作するための変更が必要になるかもしれない。もう1つの欠点としては、ロギングシステムの存在が、悪意のあるプログラムによって検出される可能性がある。その権限に関係なく、プロセスのアドレス空間への実質的に"侵入"することを悪意のあるプログラムによって検出される可能性がある。
【０００６】
したがって、API関数コールをロギングするためのメカニズムを改善する必要がある。
【発明の概要】
【０００７】
別々の仮想メモリロケーションの間でプログラム実行を転送するという管理を行うことによって、プログラムの実行を制御するためのシステム、方法、およびコンピュータプログラム製品の例示的な態様が開示される。開示される態様における1つの用途は、プログラムの実行中にコールされるAPI関数のコールのログを作成することである。開示された1つの態様において、ある仮想メモリロケーションから他の仮想メモリロケーションへ命令の実行を交互に転送することよって、システムメモリに埋め込まれたプログラムコードの、プロセッサによる実行を追跡するという技術的な結果をもたらす。
【０００８】
コンピュータプログラムの実行を制御する例示的なコンピュータ実装方法は、
コンピュータプログラムの実行命令の少なくとも一部を仮想メモリアドレス空間に格納するために、プロセッサによってメモリセクタを決定する工程と、
上記メモリセクタに関連するコード命令及びデータを含む1つ又は複数のページを仮想メモリアドレス空間内で決定する工程と、
上記メモリセクタと上記1つ又は複数のページを含む仮想メモリアドレス空間の複製を作成する工程と、
仮想メモリアドレス空間と仮想メモリアドレス空間の複製の両方において、上記メモリセクタと上記1つ又は複数のページをタグ付けする工程と、
仮想メモリアドレス空間又は仮想メモリアドレス空間の複製に格納された命令を実行する間、それぞれのメモリセクタ間でコンピュータプログラムの実行を転送するための通知を受信する工程と、
コンピュータプログラムの実行を、上記通知を受信したメモリロケーションとは別のメモリロケーションに転送する工程を含む。
【０００９】
1つの例示的な態様では、本方法は、コンピュータプログラムの実行命令を格納する仮想メモリアドレス空間を取得する工程をさらに含む。
【００１０】
1つの例示的な態様では、本方法は、上記1つ又は複数のページで１つ又は複数のメモリセクタを特定する工程をさらに含み、上記１つ又は複数のページには、上記メモリセクタに関連付けられていないコード命令及びデータを有している。
【００１１】
1つの例示的な態様では、本方法は、1つ又は複数のページの各々を以下のように特定する工程をさらに含む。
第1のタイプのページは、上記メモリセクタに関するものだけのコード命令及びデータ、或いは上記1つ又は複数のメモリセクタに関するものだけのコード命令及びデータを含み、
第2のタイプのページは、上記メモリセクタ及び上記1つ又は複数のメモリセクタの両方に関するコード命令及びデータを含む。
【００１２】
1つの例示的な態様では、上記タグ付け工程は、仮想メモリアドレス空間と仮想メモリアドレス空間の複製の両方において、第1のタイプのページと第2のタイプのページについて互いに同じタグ又は異なるタグでタグ付けする工程を含む。
【００１３】
1つの例示的な態様では、本方法は、以下の転送を検出すると、仮想メモリアドレス空間で通知を作成する工程を含む。
上記両タイプのページに関連付けられた2つのセクタ間での制御の転送、
或いは第2のタイプのページのセクタにおけるタグ付けされたコード命令又はデータへの制御の転送である。
【００１４】
1つの例示的な態様では、以下の2つのセクタの間で制御の転送を検出すると仮想メモリアドレス空間の複製で通知を作成する工程をさらに含む。
2つのセクタ間とは、別々のタグを有するが、どちらも第1のタイプのページに関連しているセクタ間、或いは、第2のタイプのページに関連付けられたセクタから、別のタグを有し第1のタイプのページに関連付けられたセクタとの間のセクタ間である。
【００１５】
一態様では、コンピュータプログラムの実行を制御する例示的なシステムは、メモリに接続されたハードウェアプロセッサを備え、
コンピュータプログラムの実行命令の少なくとも一部を仮想メモリアドレス空間に格納するために、上記プロセッサによってメモリセクタを決定し、
上記メモリセクタに関連するコード命令及びデータを含む1つ又は複数のページを仮想メモリアドレス空間内で決定し、
上記メモリセクタと、上記1つ又は複数のページを含む仮想メモリアドレス空間の複製を作成し、
仮想メモリアドレス空間と仮想メモリアドレス空間の複製との両方において、上記メモリセクタと上記１つ又は複数のページをタグ付けし、
仮想メモリアドレス空間又は仮想メモリアドレス空間の複製に格納された命令を実行する間、それぞれのメモリセクタ間でコンピュータプログラムの実行を転送するための通知を受信し、
コンピュータプログラムの実行を、上記通知を受信したメモリロケーションとは別のメモリロケーションに転送することができるように構成される。
【００１６】
別の態様では、コンピュータプログラムの実行を制御するためのコンピュータ実行可能命令を格納する例示的な非一時的なコンピュータ可読媒体であって、上記命令は、
コンピュータプログラムの実行命令の少なくとも一部を仮想メモリアドレス空間に格納するために、プロセッサによってメモリセクタを決定する命令と、
上記メモリセクタに関連するコード命令及びデータを含む1つ又は複数のページを仮想メモリアドレス空間内で決定する命令と、
上記メモリセクタと上記1つ又は複数のページを含む仮想メモリアドレス空間の複製を作成する命令と、
仮想メモリアドレス空間と仮想メモリアドレス空間の複製の両方において、上記メモリセクタと上記1つ又は複数のページをタグ付けする命令と、
仮想メモリアドレス空間又は仮想メモリアドレス空間の複製に格納された命令を実行する間、それぞれのメモリセクタ間でコンピュータプログラムの実行を転送するための通知を受信する命令と、
コンピュータプログラムの実行を、上記通知を受信したメモリロケーションとは別のメモリロケーションに転送する命令を含む。
【００１７】
例示的な態様における上記の簡略化された概要は、本開示の基本的な理解を提供するものである。つまり、すべての企図された態様の広範な概要ではなく、すべての態様の重要な要素を特定することも、本開示における任意又は全ての態様の範囲について記載することも意図していない。唯一の目的は、以下の開示のより詳細な説明に先立って、1つ又は複数の態様を簡略化した形で提示することを目的としている。前述の目的を達成するために、本開示の1つ又は複数の態様は記載され且つ例示的に示される特徴を請求項に含む。
【図面の簡単な説明】
【００１８】
添付の図面は本明細書に組み込まれ本明細書の一部を構成する。さらに、本開示の1つ又は複数の例示的な態様を示し、詳細な説明と共にそれらの原理及び実施形態を説明するものである。
【図１】図1は、1つの態様に係る、プログラム実行を制御するために開示されたシステム及び方法を実施するために使用されるコンピュータシステムの一例である。
【図２】図2は、一態様に係る、仮想メモリシステムを示す。
【図３】図3は、一態様に係る、メモリ複製を示す。
【図４】図4は、一態様に係る、仮想メモリ複製を示す。
【図５】図5は、1つの態様に係る、1つの仮想メモリロケーションから別の仮想メモリロケーションへのプログラム命令の実行の制御の転送のための例示的な方法を示す。
【図６】図6は、一態様に係る、仮想メモリ複製のための例示的なシステムを示す。
【図７】一態様に係る、プログラムの実行をロギングするための仮想メモリ複製の例示的な方法を示す。
【図８】図8は、一態様に係る、プログラムの実行をロギングする方法の一例である。
【図９】図9は、一態様に係る、ロギングシステム準備でのアドレス空間を示す。
【図１０】図10は、1つの態様に係る、あるアドレス空間から別のアドレス空間への命令の実行の制御を転送する例示的な方法を示す。
【発明を実施するための形態】
【００１９】
例示的な態様は、別々の仮想メモリロケーション間でプログラム実行を転送するということを管理し、プログラムの実行を制御するためのシステム、方法、及びコンピュータプログラム製品に関連して本明細書で説明される。当業者であれば、以下の説明は例示的なものにすぎず、決して限定することを意図するものではないことを理解するであろう。他の態様は、本開示の利益を有する当業者に容易に示唆されるであろう。以下、添付の図面に例示されている例示的な態様の実装を詳細に参照する。同一の参照指標は、図面全体にわたって可能な限り使用され、以下の記載は、同じまたは同様のアイテムを参照する。
【００２０】
図１は、コンピュータシステム（パーソナルコンピュータ又はサーバであってもよい）の一例を開示しており、そこでは開示されたシステム及び方法は、実装することができる。コンピュータシステム20は、中央処理ユニット21、システムメモリ22及びシステムバス23を含み、システムバスは、様々なシステムコンポーネント（中央処理ユニット21に付随するメモリを含む）に接続している。システムバス23は、先行文献で知られている任意のバス構造のように実現され、順にバスメモリ又はバスメモリコントローラ、周辺バス、及びローカルバスを含み、それは、任意の他のバスアーキテクチャと相互作用することができる。システムメモリは、読み出し専用メモリ（ROM）24及びランダムアクセスメモリ（RAM）25を含む。基本入出力システム（BOIS）26は、パーソナルコンピュータ20の要素間で情報の転送を保証する基本的な手順を含み、ROM24を使用してオペレーティングシステムをロードする時にも同様である。
【００２１】
パーソナルコンピュータ20は、順に、データの読み書き用ハードディスク27、リムーバブル磁気ディスク29への読み書き用磁気ディスクドライブ28、及び、リムーバブル光ディスク31（CD-ROM、DVD-ROM又は他の光情報媒体等）への読み書き用光ドライブ30を含む。ハードディスク27、磁気ディスクドライブ28、及び光ドライブ30は、それぞれ、ハードディスクインターフェース32、磁気ディスクインターフェース33及び光ドライブインターフェース34を介してシステムバス23に接続されている。ドライブ及び対応するコンピュータ情報媒体は、パーソナルコンピュータ20のコンピュータ命令、データ構造、プログラムモジュール、及びその他のデータのための電力の面で独立した記憶装置である。
【００２２】
本開示は、ハードディスク27、リムーバブル磁気ディスク29及びリムーバブル光ディスク31を使用するシステムの実装を提供するが、コンピュータによって読み取り可能な形式でデータを保存することができる他の種類のコンピュータ情報媒体56（ソリッドステートドライブ、フラッシュメモリカード、デジタルディスク、ランダムアクセスメモリ（RAM）等）を使用することも可能であることが理解されるべきであり、それらは、コントローラ55を介してシステムバス23に接続される。
【００２３】
コンピュータ20は、ファイルシステム36を有し、そこには記録されたオペレーティングシステム35が保持され、及び、追加プログラムアプリケーション37、他のプログラムモジュール38及びプログラムデータ39、もまた同様である。ユーザは、入力デバイス（キーボード40、マウス42）で、パーソナルコンピュータ20に、コマンドと情報を入力することができる。他の入力デバイス（図示せず）として、マイクロホン、ジョイスティック、ゲームコントローラ、スキャナ等を用いることができる。そのような入力デバイスは、通常、シリアルポート46を介してコンピュータシステム20に接続され、それは、順番に、システムバスに接続される。それらは、他の方法（例えば、パラレルポート、ゲームポート、又はユニバーサルシリアルバス（USB））を用いて接続できる。モニター47又は他の種類の表示デバイスもまた、ビデオアダプタ48などのインターフェースを介してシステムバス23に接続される。モニター47に加えて、パーソナルコンピュータは、ラウドスピーカー、プリンタ等の他の周辺出力デバイス（図示せず）を搭載することができる。
【００２４】
パーソナルコンピュータ20は、1つ又は複数のリモートコンピュータ49を用いて、ネットワーク環境で作業することができる。図7に示すように、リモートコンピュータ（複数可）49も、前述の要素の大部分又は全てを有するパーソナルコンピュータ又はサーバであり、その要素は、パーソナルコンピュータ20の本質を示している。ルータ、ネットワーク局、ピアデバイスまたは他のネットワークノード等、他のデバイスも、コンピュータネットワークに存在できる。
【００２５】
ネットワーク接続は、ローカルエリアコンピュータネットワーク（LAN）50及びワイドエリアコンピュータネットワーク（WAN）を形成することができる。このようなネットワークは、企業のコンピュータネットワーク及び社内ネットワークで使用され、それらは一般にインターネットにアクセスすることができる。LAN又はWANネットワークでは、パーソナルコンピュータ20は、ネットワークアダプタ又はネットワークインタフェース51を介してローカルエリアネットワーク50に接続される。ネットワークが使用される場合、パーソナルコンピュータ20は、インターネットなどの広域コンピュータネットワークとの通信を提供するために、モデム54又は他のモジュールを使用することができる。モデム54は、内部又は外部の装置であり、シリアルポート46によってシステムバス23に接続されている。ネットワーク接続は単なる例であり、ネットワークの正確な構成を示す必要はない、すなわち、実際には、技術通信モジュールによる1つのコンピュータの接続を確立する別の方法がある。
【００２６】
一例の態様では、ランダムアクセスメモリ25はシステムメモリ22の一部であり、本開示の文脈では物理メモリとも呼ばれる。物理メモリ全体が物理ページ100に分割され、その一例が図2に示されている。物理メモリに対してアドレッシング（アドレスを指定）するアドレスセットにより、物理アドレス空間が形成される。物理メモリのサイズは限られているので、プログラムを実行するために仮想メモリが作成され、仮想メモリをアドレッシングするアドレスセットで仮想アドレス空間が形成される。本明細書では、仮想メモリという用語は、これらのページについて記述される構造（例えば、ページ・ディレクトリ・ポインタ、ページ・ディレクトリ、ページ・テーブル）に沿って、論理ページ全体を含む。これらの構造を以下に説明する。本明細書で使用される仮想アドレス空間及び仮想メモリという用語は同一であり、交換して使用が可能である。
【００２７】
仮想アドレス空間は、論理ページ100aに分割できる。論理ページはそれ自身の仮想アドレスを持ち、図2に示すように任意の物理アドレスにマッピングすることができる。このように、論理ページは物理ページに対応しており、言い換えると、論理ページは物理ページにマッピングされる。1つの例示的な態様では、論理ページは、図2に示すように、任意の順序で物理ページにマッピングされる。別の例示的な態様では、論理ページは物理ページに同一となるようにマッピングされる。いくつかの論理ページを1つの物理ページにマップできる。
【００２８】
論理ページ100aは、仮想のオブジェクト（すなわち、物理ページ100と異なり、実際には存在しない）であり、上記の各ページは特定の場合に2つのアドレスを有する。
・リニア・アドレス-このアドレスによってアドレス空間に配置される
・物理アドレス-このアドレスで物理的なメモリ25にマッピングされる（存在しない場合もある）
【００２９】
仮想メモリとは、ローカルコンピュータでシステムメモリ22を利用する技術であり、特定の場合にはローカルコンピュータ及びリモートコンピュータでシステムメモリを利用するものである。メモリのページ構成により、プロセッサレベルでの制御を有する仮想メモリのメカニズムを実現することが可能である。メモリの論理ページは、例えば、ハードディスク24にスワップすることができる。その内容（コンテンツ）が物理メモリ25からのものである場合には、実際に使用可能な仮想メモリのサイズを実質的に増加する。そこで、利用可能なハードディスクのサイズによって制限されることになる。ハードディスクにページをスワップする場合、ハードディスクがローカルコンピュータに配置されている必要はない。
【００３０】
図2は、通常の32ビットのページアドレッシング（ページング）である仮想メモリシステムを示す。ページを記述するために、データ構造とフラグ（属性）が用いられる。データ構造は、ページをマッピングしている物理アドレスで構成される。フラグは、このページのプロパティで定義されている。ページの開始の32ビットアドレスに関する情報は、主要な20ビットに配置される。その情報はページディスクリプションにも格納される。ページディスクリプションは、ページ・テーブル101にグループ化される。ページ記述子は4バイトのエントリである。ページ・テーブルは、ページ・ディレクトリ102にグループ化される。ページ・ディレクトリ102は4kbサイズのファイルであり、それは、4バイトのエントリ又はPDE（ページ・ディレクトリ・エントリ）により構成されている。各エントリはページ・テーブル101を指し、フォーマットにおいてPTEとほぼ一致する。PDEは、ページ・テーブルの位置を決定し、メモリの物理ページのアドレス、およびページ・テーブルの属性を指す。プロセッサがページ変換を使用できるようにするには、ページ・ディレクトリの開始アドレス103（ページ・ディレクトリベース-PDB）を指定する必要がある。このアドレスはCR3レジスタに保持される。
【００３１】
したがって、32ビットのアドレス空間でアドレッシングする目的として、ページ・テーブルでのページ番号を示すためには、10ビットの値（テーブルには1024のページディスクリプションが格納されるので）が必要である。ページ・ディレクトリ内のどのテーブルを使用するかを正確に示すために、やはり10ビットの値が必要である。ページ内のオフセットを示すには、12ビットの値が必要である。これらの値についてディメンションが追加された場合、メモリへのアクセスに32ビットのデータ構造を指定する必要があることがわかる。テーブル番号に対して10ビット、テーブルにあるページ番号に対してさらに10ビット、ページ内でのオフセットに対して12ビットである。
【００３２】
PAE（Physical Address Extension）技法が使用される場合、追加の階層レベル、すなわちPDPTE（ページ・ディレクトリ・ポインタ・テーブル・エントリ）を含むページ・ディレクトリ・テーブル104が追加される。この場合、CR3レジスタには、並んでいるページ・ディレクトリ・テーブル104の物理アドレス105が入ることになる。
【００３３】
IA-32e技術を用いる場合、追加の階層レベルがページ・テーブル、ページ・ディレクトリ及びディレクトリ・テーブルに追加される：ページアドレッシングレベルのテーブル107は、PML4E（ページマップレベルエントリ）を含む。この場合、CR3レジスタ106には、ページアドレッシングレベル107が並んでいるテーブルの物理アドレス108を示す（データ）構造が入る。
【００３４】
プログラムを起動すると、オペレーティングシステムはそのフローを実行するプロセスを作成する。プログラムファイルは、コンピュータの物理メモリの特定の場所（ロケーション）にロードされる。仮想メモリを用いる場合、ファイルは仮想メモリの特定の場所（ロケーション）にロードされる。仮想メモリは、システムによって物理アドレスの特定の箇所にマッピングされた場所である。次に、プログラムの実行が開始される。すなわち、プロセッサはプログラムファイルに記述された順序で機械命令を実行する。オペレーティングシステムで作成されるプロセスは、基本的にプログラムコードを実行するために必要なリソースの運び手である。マルチタスクのオペレーティングシステムでは、各プロセスはそれぞれの仮想アドレス空間に対応付けられている。仮想アドレス空間をアドレッシング（アドレス指定）するメカニズムを説明する。プロセスにおける仮想アドレス空間へのアクセス権を入手するためには、CR3制御レジスタ106にアクセスする必要がある。CR3制御レジスタ106に入っている情報に基づいてアクセス権を取得し、（データ）構造及びその要素を制御することによって、プロセスにおける仮想アドレス空間を制御できる。ある特定の態様において、32ビット・アドレッシングでは、各プロセスはそれぞれのページ・ディレクトリを有し、従って、プロセス間での切り替えが生じる場合、整列しているページ・ディレクトリの物理アドレスを格納しているCR3レジスタ106が上書きされる。プログラムは、少なくとも、すべてのページ、テーブル、及びディレクトリの要素を決定する必要はない。実際に利用されるものだけを決定し、動作しているプロセスにおいて新しい記述を動的に追加又は除去することで十分である。
【００３５】
図3は、実行を行う命令が特定の場所（ロケーション）301に書き込まれた場合のシステムメモリ22の一部を示す。一つ例として、メモリロケーションは、物理メモリ内の位置であってもよい。別の例では、メモリロケーションは、論理ページがマッピングされているシステムメモリ内にある位置、すなわち仮想メモリロケーションであってもよい。オリジナルのメモリロケーション301での制御に基づいてプログラムを実行するために、対象となるセクタが決定される。メモリロケーションにおける対象となるセクタは、メモリロケーション内の所与のいずれかのセクタであってもよい。その為に、プログラム命令の制御を転送する際に通知を作成する必要がある。1つの例示的な態様では、対象セクタとは、特定の特徴（セクタの内容、その配置及び目的を決定する特徴）に基づいて、他のものとは離れている特定のメモリロケーションにある特定のセクタである。例えば、対象セクタは、プログラム命令が含まれているメモリロケーションのセクタであってもよい。制御が転送されるときに、プログラム命令の実行シーケンスを評価するためにレジスタの状態をチェックする必要がある。対象セクタは、特定のアクション（ハードディスクへのアクセス、ネットワークによる情報の転送など）を実行するように設計された命令セットをまとめることもできる。
【００３６】
この後、オリジナルのメモリロケーションのセクタが複製されてもよく、少なくとも対象セクタ303が複製される。メモリの複製は、さまざまな方法で実行できる。一つの例示的な態様では、別のメモリロケーション301a（図3）へのセクタの命令及びデータの直接コピーがある。したがって、同一内容のセクタが物理メモリに現れる。別の例示的態様では、データのコピーでなく、新しいディレクトリ102及びページ・テーブル101が作成され、物理メモリにおけるそれらの同じ位置（ロケーション）を指し示すという手段でもよい（図4）。
【００３７】
この後、オリジナルのメモリロケーション301でのメモリセクタにタグを付けることができる。1つの例示的な態様では、対象セクタ303のタグは、オリジナルのロケーションにある他のセクタ304のタグとは異なっていてもよい。１つの例示的態様では、メモリセクタの命令バイトを修正したものをタグとして使用することができる。別の実施形態では、命令自体及びデータは決して変更されないが、これらのセクタを記述している（データ）構造の中にある属性が変更される。例えば、対象セクタのあるページには実行不可の属性が割り当てられ、他のセクタのあるページには実行可能の属性が割り当てられる。読み取り/書き込み及びその他の属性を使用することもできる。
【００３８】
次に、複製したメモリロケーション301aのセクタにタグを付けることができる。1つの例示的な態様では、対象セクタのタグは、複製されたメモリロケーション301aの他のセクタのタグとは異なってもよい。例えば、オリジナルのもの303と同じタグを、複製されたセクタ303aに使用することができる。別の例では、（オリジナルのものとは）異なるタグを使用することができる。例えば、オリジナルのメモリロケーションにおいて、対象セクタ303のページは、"実行不可（nonexecutable）"の属性を与えられ、一方、オリジナルのロケーションの他のセクタ304のページは、"実行可能（executable）"の属性を与えることができる。"実行不可"という属性を持つセクタはこの属性を保持する。複製された領域301aについては、属性を反転させることができる。ここで、対象セクタのページには"実行可能"の属性を与え、他のセクタのページには"実行不可"という属性を与えることができる。
【００３９】
次に、プロセッサによる実行に対して、対象のメモリセクタと複製されたメモリセクタとの間でメモリロケーションが選択される。プロセッサは、選択されたメモリロケーションに含まれるプログラム命令を実行する。
【００４０】
1つの例示的な態様では、選択されたメモリロケーションでの命令は、プログラムの実行を別のメモリセクタに転送する旨の通知が受信されるまで、プロセッサによって実行される。通知は、あるタグでタグ付けされたセクタから別のタグでタグ付けされたロケーションのセクタへの命令の制御が転送される際に作成されてもよい。そのような通知は、割り込み（interrupt）又は例外（exception）であってもよい。割り込み及び例外は、システム（ハードウェア）のどこか、或いはそこ（システム）で実行されている現状のプログラム又はルーチン内のどこかで、プロセッサが直ちに注意を向けるべき状態になったことを示すイベントである。割り込み及び例外とは、一般的に、実行中の現在のプログラム又はルーチンから、割り込みハンドラ又は例外ハンドラと呼ばれる特別なプログラム・プロシージャ又はルーチンへ制御を強制的に転送する。割り込み又は例外に応答するアクションは、割り込み又は例外の処理である。プロセッサが命令を実行する過程でエラーの発生であると判定した場合に例外が発生することがある。
【００４１】
1つの例示的な態様では、通知を受信することによって、通知を受信したメモリロケーションとは異なるメモリロケーションへプログラム命令の実行が転送されてもよい。例えば、プログラムがオリジナルのメモリロケーション301で実行されている場合、実行が複製されたメモリロケーション301aに転送され、複製されたメモリロケーション301aでプログラムが実行されている場合、実行はオリジナルのメモリロケーション301又は別の複製されたセクタに転送されるだろう。実行の転送は様々な方法で行われてもよく、オリジナルのメモリロケーションにおけるセクタの複製を実装するために使用される方法に依存するものであってもよい。1つの例示的な態様では、実行の次の命令を示すアドレスが変更される。別の実施形態では、図4に示すように、すべてのアドレスは変更されず保持され、CR3制御レジスタ106の値のみが変更される。
【００４２】
図5は、ある仮想メモリロケーションから別の仮想メモリロケーションへ、命令を実行するための制御を転送する例示的な方法を示す。少なくとも1つの論理ページで構成される対象メモリセクタが、オリジナルの仮想メモリロケーションで決定される（工程500）。少なくとも1つの追加の仮想メモリロケーションが作成され（工程501）、これは、一例では、オリジナルの仮想メモリロケーションと同じ物理ページにマッピングされる。このために、ページ・ディレクトリと少なくとも1つのページ・テーブルが作成される。仮想メモリロケーションの作成のために、ある特定の場合では、オリジナルの仮想ロケーションのPTE及びPDEがコピーされる。
【００４３】
次に、オリジナルの仮想メモリロケーションのセクタがタグ付けされる（工程502）。対象セクタのタグは、オリジナルのロケーションにある他のセクタのタグとは異なる。1つの特定の例では、PTE構造のNXビットが、以下のように使用される。ある特定の例では、対象セクタにおけるページに対してビットを設定することができ、このビットは他のセクタにおけるページに対してはクリアされる。別の特定の例では、対象セクタのページに対してビットがクリアされ、他のセクタのページに対してこのビットがセットされる。オリジナルのロケーションでタグが設定された後、セクタは少なくとも1つの複製されたメモリロケーションでタグ付けされ（工程503）、対象セクタに対するタグは、複製されたメモリロケーションの他のセクタのタグとは異なる。1つの例示的な態様では、オリジナルのセクタに対して用いられた手法と同じように、NXビットを設定するメカニズムがこの工程で使用される。1つの実施形態では、反転が採用されてもよい。すなわち、NXビットがオリジナルのメモリロケーションでの対象セクタのページに対してクリアされた場合、このビットは、対象セクタのページに対するオリジナルのロケーションの複製にセットされるだろう。他の例示的な態様では、PDE及びPTE構造の他のビット（R/Wビット等）が、セクタのページのタグに対して使用される。さらに別の例示的な態様では、ビットが結合され、例えば、NXビットが仮想ロケーションのオリジナルに使用され、R/Wビットが仮想ロケーションの複製に使用される。
【００４４】
メモリロケーションは、そこに含まれるプログラム命令を実行するために選択される（工程504）。メモリロケーションを切り替える目的（例えば、ロギング、デバッグ、脆弱性の悪用に対する反作用など）に応じて、オリジナルのメモリロケーション又は複製されたメモリロケーションの1つを選択することができる。
【００４５】
命令は、通知を受信するまで、プロセッサによって選択されたメモリロケーションにおいて実行される（工程505）。通知は、あるタグによってタグ付けされたセクタから、別のタグによってタグ付けされたロケーションのセクタへ命令の制御を転送する際に生成されてもよい。１つの例示的な態様では、NXビットをタグとして使用する場合、そのような通知はページフォールト例外（#PF-Page-Fault Exception）となる。この通知は、NXビットがクリアされたページのメモリロケーションのセクタの命令から、NXビットがセットされたページのメモリロケーションのセクタの命令へ制御を転送する際に作成される。
【００４６】
最後に、命令の実行は、通知を作成した命令が実行されたメモリロケーションとは別のメモリロケーションに転送される（工程506）。1つの例示的な態様において、制御の転送は、CR3の内容を上書きすることによって行うことができ、上書きされる内容（コンテンツ）の種類は、アドレッシングモード（ページングモード）によって決定される。
【００４７】
1つの例示的な態様で、前述のように実行を転送するアルゴリズムは、プログラムの実行中に、呼び出されるAPI関数コールのログを形成することを意図したロギングシステムで使用されてもよい。このプロセスは、仮想アドレス空間（VAS）を持ち、その中にプログラムファイルの必要なセクションがロードされ、それに関連付けられたダイナミックDLLライブラリも同様にロードされる。プログラムコードの実行中、API関数のコールは、別のDLLライブラリからも生じる。それについても、API関数コールのログに記録する必要がある。
【００４８】
図6ａは、OSによって作成されるプロセスのメモリの一例である。明確に示すために、プロセスメモリは、モジュール及びライブラリのプログラム命令を含むセクタを区別している。それは、"EXE"モジュール（作成されたプロセスが実行中のファイルのプログラム命令を含む）等のモジュール及び様々なダイナミックライブラリ（例えば、Unknown.dll、その他のknown.dll、kernel32.dll、及びNtdll.dll）である。"その他のメモリ（other memory）"及び"プロセスヒープ（process heap）"のセクタもあり、そのセクタに、所与のいずれかの補助データを格納できる。
【００４９】
膨大な量のライブラリが存在し（図6aはライブラリの多様性を完全に示すものではない）、ライブラリの全ては、ロギングシステムに対して2つのグループ（対象のライブラリ及び対象でないライブラリ）のみに分けられることに留意すべきである。メモリロケーションにおける対象のライブラリは、対象のメモリセクタ303及び303aを構成し、他のモジュールと共に対象でないライブラリは、他のすべてのメモリセクタ304及び304aを含む。対象のライブラリの例は、ライブラリ"kernel32.dll"と"Ntdll.dll"である。対象でないライブラリの例は、ライブラリ"Unknown.dll"と"その他のknown.dll"である。対象であるダイナミックライブラリのリストを作成することができ、これには、ロギングに必要なライブラリが含まれるだろう。原則として、すべてのプロセスで最もよく使われているライブラリのリストは、他のすべての作業をカバーすることができる。したがって、他のライブラリは全て、対象でないライブラリになる。
【００５０】
図6b、図6cは、VASの例を示し、1つ目のVASはオリジナル（図6b）であり、2つ目はオリジナルのVASの複製（図6c）である。1つ例示的な態様では、API関数コールのリストを形成するために、実行可能ファイルの実行中のロギングシステムは、オリジナルのVASの代わりに2つの新しいVASを作成する。別の実施形態では、2つの新しいVASが作成されるが、それらとともにオリジナルのVASが使用される。それは、後にVASにアクセスするイベント（事象）が生じたときに、OSに提示されるだろう。
【００５１】
それ故、プロセスのメモリは2つの部分に分けられる。上述の方法によって、１番目のオリジナルのVAS 301で、対象セクタ303は実行不可としてタグ付けされてもよい。対象セクタのページに含まれるプログラム命令、ライブラリのエクスポート可能な関数のコールがロギングされるだろう。他のセクタ304（EXEモジュール又は対象でないDLLライブラリ等）は、実行可能としてタグ付けされてもよい。VASの複製301aでは、反対のことが行われ、対象セクタ303aは実行可能としてタグ付けされ、他のセクタ304aは実行不可としてタグ付けされてもよい。
【００５２】
VASに関わらず、プロセスメモリの内容は常に同じままである（すなわち、アドレス空間の一貫性は妨げられない）ことに留意されたい。対応するテーブル/ページの属性のみが変更される。この記載については、メモリを物理的に区分することが行われるユーザ・モードの場合にのみ該当する。区分化は、VASの各コピーについてページ・ディレクトリ及びページ・テーブルを作成することで構成される。１つの例示的態様では、制御レジスタCR3の中にそれぞれ独自の値を有するディレクトリ・テーブル及びページアドレッシングレベルのテーブルで構成されてもよい。同じ物理ページを2つのディレクトリにマッピングすることができるが、ライブラリの属性はそれぞれ異なる。そのライブラリのコールをログに記録する必要がある。したがって、VAS間の切り替えは、制御レジスタCR3を上書き（内容変更）することによって行うことができる。
【００５３】
ロギングシステムがVASを制御（各VAS間で動作を切り替え）できるように、各VAS内で対応するページに対する、各ページの属性セクションにフラグ（NXビット）が配置される。NXビットとは、所与のメモリページに配置されたプログラムコードの実行の可能性を判断するため、又はコードを実行しようとする際の例外（ページフォールト（Page Fault）、以下#PF）の発生を判断するために使用される特別なフラグである。"#PF"は、実行が禁止されているメモリページからプログラムコードを実行しようとすると発生する例外を意味する。これらのNXビットを設定することにより、API関数がコールされた時点で、作成されたVASを切り替えることが可能になる。オリジナルのVAS301から複製VAS301aへ切り替える時に、及び、値が元に戻る反対の方向へ切り替える時にも、そのコールがログに記録され、関数のいくつかの出力パラメータがログに記録されることに留意されたい。この原理により、複製VAS301aで対象のダイナミックライブラリのみを実行し、且つオリジナルのVAS301で残りすべての実行可能コードを実行することが可能になる。
【００５４】
本明細書で開示される仮想メモリのスイッチングの手法を用いてプログラム命令を実行するロギング処理は、以下の方法で実行されることができる。ロギングシステムには、対象のライブラリのリストを含むことができ、少なくともライブラリへのエントリポイントのアドレスに関する情報を含むある種の"ライブラリカード"も形成される。図7は、一態様に係る、プログラムの実行をロギングするための仮想メモリを複製する例示的な方法を示す。実行ファイルの起動（工程700）時に、ロギングシステムは制御を引き継ぎ（工程701）、2つのVAS、すなわちオリジナルのVAS301と複製のVAS301aを形成する（工程702）。次に、対象のライブラリ及びそのページを決定する（工程703）。2つのVASを形成している間、対象のライブラリに属するページの属性及び残りのコードのすべてに属するページの属性に従って、NXビットをそれぞれ設定する（工程704）。次に、制御がOSに戻される（工程705）。
【００５５】
図8は、API関数コールのログを形成している間のロギングシステムの動作方法を示す。起動しているファイルの実行中に、対象のライブラリからの特定のAPI関数がコールされる（工程801）。例えば、これは、ダイナミックライブラリ"kernel32.dll"にある"CreateFile"関数のコールであってもよい。したがって、その関数をさらに実行するように示されているアクセスすべきアドレスに制御が転送（ジャンプ）する（工程802）時に、前もって配置されていたNXビットに従って例外ページフォールト（#PF）が発生する（工程803）。この状況は、オリジナルのVAS301で実行が行われるという事実に起因するものである。一方で、上述のように、NXビットは、対象のライブラリのページの属性に設定されており、オリジナルのVASにおける所与のページでコードを実行することが不可能であることを示している。次に、例外ハンドラを用いることによって、この例外の原因を判定（工程804）し、コールされたAPI関数のアドレスを決定するために、#PF例外の内容を解析する。つまり、解析とは、（以前に作成された）API関数のテーブルから、そのコールによってアクセスしたメモリアドレスに対応しているAPI関数を検索することである。API関数が決定された後、それに関する情報がAPI関数コールのログに入力される（工程805）。オリジナルのVAS301から複製VAS301aへの切り替えが行われる（工程806）。対象のライブラリのコードを更に実行し、より正確には、特定のAPI関数の実行が行われる（工程807）。
【００５６】
API関数がそのタスクを実行し、終了した後、実行中のファイルのプログラムコードに戻る（工程808）。図6を参照すると、"Logging.dll"モジュールを"Exe"モジュールに置き換える。しかし、複製したVAS301a内のこのメモリ領域は実行不可であるため、#PF例外が発生する（工程809）。この#PFはさらに解析され（工程810）、その発生の原因を判定する。解析の間、例えばジャンプしたアドレスに関する情報を用いて、API関数からの戻り（リターン）があると判断される。この場合、複製301aからオリジナルのVAS301への切り替えが行われ（工程811）、ここでプログラムコードのさらなる実行が続けられる（工程812）。API関数コールが再び現れた後、プログラムコードが実行されるまで、VASの切り替えが繰り返される。
【００５７】
図9a、図9b及び図9cは、本発明の態様に係る、対象セクタがページ全体ではなく、アドレス空間内のページの一部のみを占める場合のロギングシステムの準備を示す。図9aは、仮想アドレス空間（VAS）におけるある領域を示し、プロセスの領域（例えばアドレス空間における特定の場合）である。ページ100a'の一部は、対象セクタ303を含んでもよく、別の部分は、対象でないセクタ304を含むことができる。ライブラリからAPI関数（全てのAPI関数という訳ではない）をログに記録する必要がある場合に、このようなセクタの配置になるかもしれない。例えば、対象のライブラリからは、後続の解析にとって重要ではないAPI関数は除外されているが、頻繁にコールされていたり、或いは、ライブラリからのある特定のAPI関数が対象のものであったりする場合には、メモリ内のページの一部のみを占有することができる。VASを構成するページは多数あり、この図は、VASのページの完全な多様性を反映したものの中で、たった3ページのみを示していることに留意すべきである。具体的には、ページ100aは、対象セクタ303に関するコード命令及びデータのみを含むことができる。ページ100aは、対象でないセクタ304に関するコード命令及びデータを含むことができる。ページ100a'は、対象セクタ303に関するコード命令及びデータと、対象でないセクタ304に関するコード命令及びデータの両方を含むことができる。従って、2つのタイプのページについて3種類となりえる。第1のタイプのページは、タイプ100aのページであり、対象セクタ303のみ又は対象でないセクタ304のみに関するコード命令及びデータを含むことができる。第2のタイプのページはページ100a'のタイプである、対象セクタ303に関するコード命令及びデータと対象でないセクタ304に関するコード命令及びデータを含むことができる。第1のタイプのページ100aは、2種類で、対象セクタ303だけに関するコード命令及びデータと、対象でないセクタ304だけに関するコード命令及びデータを含むページである。第2のタイプのページ100a'は、1種類で、対象セクタ303と対象でないセクタ304に関するコード命令及びデータを含むことができる。
【００５８】
図9b及び9cはVASの変形を示し、1つ目のVASがオリジナル301（図9b）であり、2つ目のVASがオリジナルVASの複製301a（図9c）である。一態様では、オリジナルVASは、直ぐにプロセスのVASの状態となる（図9a）。従って、プロセスのメモリは2つの部分に分けられる。
【００５９】
当初のオリジナルVAS301で、ある第1のタイプのページ100aに配置されている対象セクタ303及び対象でないセクタ304は、ページ・タグによってタグ付けされてもよい（ある例では、セクタのタグ付けは、所与のセクタを含むページに対するタグ付けと概念は同一であってもよい）。ここで、第1のタイプのページ100a（対象セクタ303に関するコード命令及びデータがある）におけるページ・タグは、第1のタイプのページ100a（対象でないセクタ304に関するコード命令及びデータがある）におけるページ・タグとは異なっていてもよい。一態様によれば、対象セクタ303に関するコード命令及びデータを含む第1のタイプのページ100aは、実行不可としてタグ付けされてもよく、対象でないセクタ304に関するコード命令及びデータを含む第1のタイプのページ100aは、実行可能としてタグ付けすることができる。
【００６０】
第2のタイプのページ100a'は、対象セクタ303に関するコード命令及びデータを含む第1のタイプのページ100aとは異なるタグ付けをしてもよく、或いは、対象でないセクタ304に関するコード命令及びデータを含む第1のタイプのページ100aと同じタグ付けをしても、又は、実行可能としてタグ付けしてもよい。対象セクタ303に関するコード命令及びデータが第2のタイプのページ100a'にある場合、対象セクタに関するコード命令及びデータはそれ自体でタグ付けされ、たとえば、x86 INT3ファミリーのプロセッサのコマンドのオペコードであるバイト0xCCがセットされる。それには、プログラムの停止点（ブレークポイント）の機能が含まれている。コマンドINT3を実行すると、デバッグ用に予約された割り込みハンドラ番号3の通知がコールアップ形式で作成される。別の例では、x86 INT1ファミリーのプロセッサのコマンドのオペコードであるバイト0xF1を設定することができる。
【００６１】
複製301aにおいて、第1のタイプのページ100aに配置されている対象セクタ303及び対象でないセクタ304は、ページ・タグ、つまり第1のタイプのページ100a（対象セクタ303に関するコード命令及びデータがある）のタグによってタグ付けされてもよい。そのタグは、第1のタイプのページ100a（対象でないセクタ304に関するコード命令及びデータがある）のタグとは異なってもよい。別の態様によれば、タグが反転してもよく、第1のタイプのページ100aは、オリジナルのVAS内で実行可能であるとしてタグ付け可能であり、複製VASでは実行不可とタグ付けされる。一方、オリジナルのVASで実行不可であるとタグ付けされることができる第１のタイプのページ100aは、複製VASでは実行可能としてタグ付けされる。複製VASでの第2のタイプのページ100a'は、第1のタイプのページ100a（対象セクタ303に関するコード命令及びデータがある）と同じタグが付けられてもよい。特定の例では、上記ページは、実行可能とタグ付けできる。
【００６２】
通知の作成の後、オリジナルVAS301と複製VAS301aとの間の切り替えが行われてもよい。オリジナルVAS301での通知は、以下のように作成されることができる。
・あるタグでタグ付けされたセクタから、別のタグでタグ付けされたオリジナルVASのセクタへの制御が転送される時。
・第2のタイプのページ100a'におけるタグ付けされた対象セクタ303のコード命令又はデータへ制御が転送される時。
【００６３】
本発明の一態様によれば、オリジナルVAS301での通知は以下のように作成されることができる。
・第1のタイプのページ100a又は第2のタイプのページ100a'にある対象でないメモリセクタ304から、第1のタイプのページ100aにある対象セクタ303の命令へ制御が転送される時。
・第1のタイプのページ100a又は第2のタイプのページ100a'にある対象でないメモリセクタ304から、第2のタイプのページ100a'におけるタグ付けられた対象セクタ303の命令へ制御が転送される時。
【００６４】
複製VAS302での通知は、以下のように作成されることができる。
・あるタグでタグ付けされた第1のタイプのページ100aにあるセクタから、複製VAS301aのセクタであって、別のタグでタグ付けされ且つ第1のタイプのページ100aにあるセクタへ制御が転送される時。
・あるタグでタグ付けされた第2のタイプのページ100a'にあるセクタから、複製VAS301aのセクタであって、別のタグでタグ付けされ且つ第1のタイプのページ100aであるセクタへ制御が転送される時。
【００６５】
本発明のさらに別の態様によれば、複製VAS301aでの通知は、以下のように作成されることができる。
・対象のメモリセクタ303から、第1のタイプのページ100aにある対象でないセクタ304の命令へ制御が転送される時。
・第2のタイプのページ100a'にある対象でないメモリセクタ304から、第1のタイプのページ100aにある対象でないセクタ304の命令へ制御が転送される時。
【００６６】
図10は、本発明の態様に係る、あるアドレス空間から別のアドレス空間へ命令を実行する制御についての準備及び転送のメカニズムを示す。図10の方法は、図１に関連して上述したコンピュータの様々なハードウェア及びソフトウェアモジュールによって実装することができる。初めに、プロセスにおけるオリジナルのアドレス空間を取得する（工程1000）。少なくとも1つの対象となるメモリセクタ303を、プロセスにおけるオリジナルのアドレス空間301において決定する（工程1010）。プロセスにおけるオリジナルのアドレス空間301のメモリページ100a及び100a'を決定する（工程1020）。そのメモリページには、対象セクタ303（工程1010で決定された）のコード命令及びデータを含む。次に、プロセスにおけるオリジナルのアドレス空間301のページを複製する（工程1030）ことによって、少なくとも1つのアドレス空間（プロセスのオリジナルのアドレス空間の複製301a）を作成することができ、少なくともそのページは、工程1020で決定されたように対象セクタに関するコード命令及びデータが含まれ、複製される。
いくつかのアドレス空間が作成された後、アドレス空間のページはタグ付けされる。オリジナルのアドレス空間でメモリページはタグ付けされてもよい（工程1040）。
オリジナルのアドレス空間にある対象セクタ303に関するコード命令及びデータのみを含むページのタグ100aは、（対象のメモリセクタに関するコード命令及びデータの他に、対象でないセクタに関するコード命令及びデータを含む）ページ100а'、及び、対象セクタでないセクタ304に関するコード命令及びデータのみを含むページ100aのタグとは異なる。次に、対象セクタ303のコード命令又はデータは、（対象のメモリセクタに関するコード命令及びデータの他に、対象でないセクタに関するコード命令及びデータを含む）ページ100a'でタグ付けされてもよい（工程1050）。
この後、ページ100a及び100a'は、複製アドレス空間においてタグ付けされてもよく（工程1060）、ページ100a及び100a'（オリジナルのアドレス空間における対象セクタ303に関するコード命令及びデータを含む）のタグは、対象セクタでないセクタ304に関するコード命令及びデータのみを含むページ100aのタグとは異なる。
上述のすべての工程の後、通知が生じるまで、オリジナルのアドレス空間301又は複製されたアドレス空間301内の命令は実行される（工程1070）。その通知は以下のように作成される。
・あるタグでタグ付けされたセクタから、別のタグでタグ付けされたアドレス空間のセクタへコード命令の制御が転送される時。
・タグ付き命令へ制御が転送される時。
【００６７】
工程1070で通知の作成の後、次に、命令の実行は、起動されている命令によって通知が（工程1070で）作成されたアドレス空間とは別のアドレス空間に転送されてもよい（工程1080）。
【００６８】
上記の技術の特徴の1つは、システムがメモリ内容を変更するのではなく、メモリを扱うOSのメカニズムにのみ介入するものであることに留意されたい。
【００６９】
様々な態様において、本明細書に記載のシステム及び方法は、ハードウェア、ソフトウェア、ファームウェア、又はそれらの任意の組み合わせで実施することができる。ソフトウェアで実施される場合、方法は、非一時的なコンピュータ可読媒体に1つ又は複数の命令或いはコードとして格納されてもよい。コンピュータ可読媒体は、データ記憶装置を含む。限定するものではなく例として、このようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROM、フラッシュメモリ、または他のタイプの電気的、磁気的又は光学的記憶媒体、或いは任意の他の媒体（所望のプログラムコードを命令又はデータ構造の形で運び、格納するために用いられ、且つ汎用コンピュータのプロセッサによってアクセスすることができる）でありえる。
【００７０】
様々な態様において、本開示のシステムおよび方法には、モジュールに関して記載されている。本明細書で使用される"モジュール"という用語は、実世界のデバイス、コンポーネント、ハードウェアを用いて実行されたコンポーネントの構成を示すものである。つまり、特定用途向け集積回路（ASIC）又はフィールドプログラマブルゲートアレイ（FPGA）などである。例えばハードウェアとソフトウェアとの組み合わせ（マイクロプロセッサシステム及びモジュールの機能を実現する一連の命令によって等）として実装することができる。それは、（実行されている間に）マイクロプロセッサシステムを特殊用途の装置に変換する。モジュールは、2つの組み合わせとして実装することもできる。ハードウェアだけで機能する特定の機能を有し、ハードウェアとソフトウェアの組み合わせによって容易になる他の機能を含む。特定の実施形態では、モジュールの少なくとも一部、場合によっては全てが、汎用コンピュータのプロセッサで実行され得る（例えば、上記の図1にさらに詳細に記載されているもの）。したがって、各モジュールは、様々な適切な構成で実現することができ、本明細書に例示される特定の実装に限定されるべきではない。
【００７１】
明瞭にするために、態様のルーチン機能のすべてが、本明細書に開示されているわけではない。本開示における任意の実際の実装における開発で、多数の実装固有の判断が、開発者の特定の目標を達成するためになされなければならないことが理解されるであろう。さらに、これらの具体的な目標は、それぞれ異なる実装及び異なる開発者に対して変化することが理解されるであろう。そのような開発努力は複雑で時間がかかるかもしれないが、それでも本開示の利益を有する当業者にとっては、エンジニアリングの日常の仕事であると理解されるであろう。
【００７２】
さらに、本明細書で使用される用語又は表現は、説明のためであり、制限するものではなく、つまり、関連技術の熟練の知識と組み合わせて、本明細書の用語または表現は、ここに示される教示及び指針に照らして当業者によって解釈されるべきであることが理解されるべきである。明示的な記載がない限り、明細書または特許請求の範囲内で、任意の用語に対して、珍しいまたは特別な意味を帰することは意図されていない。
【００７３】
本明細書で開示された様々な態様は、例示のために本明細書に言及した既知のモジュールの、現在及び将来の既知の均等物を包含する。さらに、態様及び用途を示し、説明してきたが、本明細書に開示された発明の概念から逸脱することなく、上述したよりも多くの改変が可能であることが、この開示の利益を有する当業者には明らかであろう。
【図１】
0006322246.tif 000002
【図２】
0006322246.tif 000003
【図３】
0006322246.tif 000004
【図４】
0006322246.tif 000005
【図５】
0006322246.tif 000006
【図６】
0006322246.tif 000007
【図７】
0006322246.tif 000008
【図８】
0006322246.tif 000009
【図９】
0006322246.tif 000010
【図１０】
0006322246.tif 000011