(57)【要約】  本発明は、第一のモジュールと複数の関数を含む共有モジュールとから構成されるとともに、第一のモジュールと共有モジュールとの間で共有される関数を結び付けるための手段を有する、共有関数結合アレンジメントを生成するための方法を提供する。本方法は、第一のモジュールと共有モジュールを生成するリンク段階と、呼び出しの詳細を露出することなく共有モジュールを呼び出す第一のモジュールを用意する準備段階と、モジュールをロードし、呼び出しの詳細を露出することなく第一のモジュールを共有モジュール内のそれぞれの関数にリンクするローディング段階と、を含む。本発明は、また、呼び出しの詳細を露出することなく、第一のモジュールが共有モジュール内のそれぞれの関数を呼び出すことを可能にするリンクアレンジメントにより、第一のモジュールと共有モジュールとの間で共有される関数を結び付けるための方法とシステムを提供する。【特許請求の範囲】
【請求項１】
第一のモジュールと複数の関数を含む共有モジュールとの間で共有される関数を結び付けるための方法であって、
前記第一のモジュールから前記共有モジュールを呼び出す工程と、
当該呼び出しの詳細を露出することなく、前記第一のモジュールを前記共有モジュール内のそれぞれの関数にリンクする工程と、を含む方法。
【請求項２】
前記リンク工程は、前記それぞれの関数に対する要求をキャリーする入力と前記共有モジュールへの前記呼び出しをキャリーする出力と間の間接的なルーティングリンクを前記第一のモジュール内に形成する工程を含む、請求項１に記載の方法。
【請求項３】
前記リンク工程は、前記第一のモジュールからの前記呼び出しをキャリーする入力と前記それぞれの関数のアドレスとの間の間接的なルーティングリンクを前記共有モジュール内に形成する工程を含む、請求項１に記載の方法。
【請求項４】
前記形成工程は前記第一のモジュール内に関数プロキシーを提供する工程を含む、請求項２に記載の方法。
【請求項５】
前記形成工程は、前記共有モジュール内のゼネラルコールアドレスを探すための、前記第一のモジュール内の共通関数ポインタを呼び出すために、それぞれの関数プロキシーを使用する工程を含む、請求項４に記載の方法。
【請求項６】
前記形成工程は、前記共有モジュール内のそれぞれの動的オブジェクトのそれぞれのアドレスにアクセスするために、それぞれの関数プロキシーを使用する工程を含む、請求項４に記載の方法。
【請求項７】
前記形成工程は、前記それぞれの関数を間接的に探すための、前記共有モジュール内のゼネラルコールアドレスを提供する工程を含む、請求項３に記載の方法。
【請求項８】
前記形成工程は、前記関数を探すためのアドレス情報を含む前記共有モジュール内の動的オブジェクトを提供する工程を含む、請求項３に記載の方法。
【請求項９】
前記形成工程は、前記それぞれの関数を探すための、前記共有モジュール内のそれぞれの動的オブジェクトを使用する工程を含む、請求項８に記載の方法。
【請求項１０】
前記アドレス情報を暗号化する工程を更に含む、請求項８に記載の方法。
【請求項１１】
前記リンク工程は、前記共有モジュール内のゼネラルコールアドレスを探すための、前記第一のモジュール内の共通関数ポインタを提供する工程を含む、請求項１に記載の方法。
【請求項１２】
前記リンク工程は、前記共有モジュール内の動的オブジェクトを探すための、前記第一のモジュール内の動的オブジェクトアドレスを使用する工程を含む、請求項１に記載の方法。
【請求項１３】
第一のモジュールと複数の関数を含む共有モジュールとから構成されるとともに、前記第一のモジュールと前記共有モジュールとの間で共有される関数を結び付けるための手段を有する、共有関数結合アレンジメントを生成するための方法であって、
前記第一のモジュールと前記共有モジュールを生成するリンク段階と、
当該呼び出しの詳細を露出することなく前記共有モジュールを呼び出すための前記第一のモジュールを用意する準備段階と、
前記モジュールをロードし、当該呼び出しの詳細を露出することなく前記第一のモジュールを前記共有モジュール内のそれぞれの関数にリンクするローディング段階と、を含む方法。
【請求項１４】
前記リンク段階は、前記関数を続いて探すための情報を含むセキュアライブラリを含む第一のモジュールを生成する工程を含む、請求項１３に記載の方法。
【請求項１５】
前記セキュアライブラリは、識別子を介して関数を探すためのマーカーを含む、請求項１４に記載の方法。
【請求項１６】
前記セキュアライブラリは関数プロキシーを含む、請求項１４に記載の方法。
【請求項１７】
前記リンク段階は、複数の関数と、識別子と前記関数を関連付ける共有関数テーブルとを含む共有モジュールを生成する工程を含む、請求項１３に記載の方法。
【請求項１８】
前記準備段階は、前記第一のモジュールからマーカー情報を抽出し、前記マーカー情報を前記共有モジュール内に埋め込む工程を含む、請求項１３に記載の方法。
【請求項１９】
前記準備段階は、前記第一のモジュールから前記マーカー情報を消去する工程を含む、請求項１８に記載の方法。
【請求項２０】
前記ローディング段階は前記第一のモジュールをロードする工程を含む、請求項１３に記載の方法。
【請求項２１】
前記ローディング段階は、前記第一のモジュールからの指示により前記共有モジュールをロードする工程を含む、請求項２０に記載の方法。
【請求項２２】
前記ローディング段階は、前記関数を間接的に探すための共通関数ポインタを前記共有モジュール内に生成する工程を含む、請求項１３に記載の方法。
【請求項２３】
前記ローディング段階は、前記関数を探すためのアドレス情報を含む動的オブジェクトを前記共有モジュール内に生成する工程を含む、請求項１３に記載の方法。
【請求項２４】
前記ローディング段階は、前記第一のモジュール内に前記共通関数ポインタをパッチする工程を含む、請求項２２に記載の方法。
【請求項２５】
前記ローディング段階は、前記第一のモジュール内に前記動的オブジェクトのアドレスをパッチする工程を含む、請求項２３に記載の方法。
【請求項２６】
前記アドレス情報を暗号化する工程を含む、請求項２３に記載の方法。
【請求項２７】
共有関数結合アレンジメントにおいて第一のモジュールと共有モジュールとの間で共有される関数を結び付けるためのシステムであって、
第一のモジュールと、
複数の関数を含む共有モジュールと、
前記第一のモジュールが当該呼び出しの詳細を露出することなく前記共有モジュール内のそれぞれの関数を呼び出すことを可能にするリンクアレンジメントと、を含むシステム。
【請求項２８】
前記リンクアレンジメントは、前記それぞれの関数に対する要求をキャリーするための入力と前記共有モジュールに対する呼び出しをキャリーするための出力との間の間接的なルーティングリンクを前記第一のモジュール内に含む、請求項２７に記載のシステム。
【請求項２９】
前記リンクアレンジメントは、前記第一のモジュールからの呼び出しをキャリーするための入力と前記それぞれの関数のアドレスとの間の間接的なルーティングリンクを前記共有モジュール内に含む、請求項２７に記載のシステム。
【請求項３０】
前記間接的なルーティングリンクは、前記共有モジュール内のゼネラルコールアドレスを探すための共通関数ポインタを前記第一のモジュール内に含む、請求項２８に記載のシステム。
【請求項３１】
前記間接的なルーティングリンクは、前記共有モジュール内のそれぞれの動的オブジェクトに対するそれぞれの動的オブジェクトアドレスを前記第一のモジュール内に含む、請求項２８に記載のシステム。
【請求項３２】
前記間接的なルーティングリンクは、前記それぞれの動的オブジェクトアドレスへルーティングするためのそれぞれの関数プロキシーを前記第一のモジュール内に含む、請求項３１に記載のシステム。
【請求項３３】
前記間接的なルーティングリンクは、前記それぞれの関数に対するアドレス情報を含むそれぞれの動的オブジェクトを前記共有モジュール内に含む、請求項２９に記載のシステム。
【請求項３４】
前記アドレス情報は暗号化される、請求項３３に記載のシステム。
【請求項３５】
前記間接的なルーティングリンクは、前記それぞれの動的オブジェクトへルーティングするための共通関数ポインタを前記第一のモジュール内に含む、請求項３３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本発明は、処理システム内の個別モジュール間で共有される関数を結び付けるための方法とシステムに関する。
【背景技術】
【０００２】
発明の背景
一つのモジュールが別のモジュールに存在する関数を呼び出せるように、ランタイム時に２つのモジュールを互いにリンクする処理技術が知られている。ここでは、モジュールはプログラムに相当するバイナリーイメージと考えてよい。一つのモジュールを別のモジュールにリンクするためのこのような処理技術は２つの様式が存在する。添付図面の図１と図２に示すように、一つの処理技術によるとモジュール１２が共有モジュール１０に静的にリンクされ、他方の処理技術によるとモジュール１４が共有モジュール１０に動的にリンクされると考えられる。実際上は、共有モジュール１０に静的または動的にリンクされ共有モジュール１０を呼び出すことが可能な任意の数のモジュール１２、１４が存在してもよいということを認識すべきである。但し、図１と図２には簡潔性のために、ただ一つの静的リンクモジュール１２と、ただ一つの動的リンクモジュール１４が示される。「静的リンク」、「動的リンク」という表現は、ここでは現在呼び出し中かどうかに関係なく当該モジュールと共有モジュールとの間の固有の関係の性質を指すために使用される。
【０００３】
それぞれのモジュール１２と共有モジュール１０を静的にリンクする、あるいは換言すればモジュール１０から共有される関数を静的リンクモジュール１２に結び付ける処理技術を最初に説明する。この処理技術はリンク段階から始まる一連の段階を含む。リンク段階では、関数のライブラリと該関数のカタログを含むエクスポートテーブル１６とを含む共有モジュール１０と、エクスポートテーブル１６への暗黙の参照子（implicit reference）を含むインポートテーブル１８を有する静的リンクモジュール１２との両方を生成するためにオブジェクトファィルとライブラリーファイルが使用される。次に、ロード段階では、図１に示されるアーキテクチャを提供するために、オペレーティングシステムは第１に静的リンクモジュール１２をロードし、第２に共有モジュール１０をロードする。これについては、静的リンクモジュール１２が既にロードされているものと仮定する図２ａに関連してさらに説明する。
【０００４】
ランタイム中に、静的リンクモジュール１２が特定の共有関数（例えば印刷関数）を実行したい場合、図２ａのフローチャートに示されるルーチンを工程２０から開始する。オペレーティングシステムは、工程２２において、静的リンクモジュール１２内のインポートテーブル１８を検索し、共有モジュール１０内の関数が必要とされることを発見することにより応答する。この時点で、オペレーティングシステムは共有モジュール１０をロードする。このような工程は、静的リンクモジュール１２ではなくオペレーティングシステムが該ロードを起動するようにアレンジされるという点で暗黙的であり、ここではモジュール１２が共有モジュール１０に静的にリンクされることを意味する。共有モジュール１０をロードすると、オペレーティングシステムは工程２４に進み、必要な特定関数（この場合は印刷関数）を探すために共有モジュール１０のエクスポートテーブル１６を使用する。次に、オペレーティングシステムは工程２６において、エクスポートテーブル１６から取得された関数アドレスが静的リンクモジュール１２のインポートテーブル１８に既に格納されたかどうかを問い合わせる。その応答が「はい」である場合、オペレーティングシステムは工程３２に進み、共有モジュール１０内の実際の関数にジャンプする。一方、工程２６においてその応答が「いいえ」である場合、オペレーティングシステムは次に工程２８に進み、共有モジュール１０のエクスポートテーブル１６内の関数検索アドレスを取得し、そして工程３０において、該関数アドレスを静的リンクされたモジュール１２のインポートテーブル１８内に格納する。次に、オペレーティングシステムは工程３２に進み、共有モジュール１０内の実際の関数にジャンプする。
【０００５】
静的リンクモジュール１２の場合と動的リンクモジュール１４の場合との相違は、動的リンクモジュール１４の場合には、リンク段階において共有モジュール１０と動的リンクモジュール１４の両方が互いに参照せずに独立して生成されるということである。オペレーティングシステムが動的リンクモジュール１４をロードすると、モジュール１４は、図１に示すアーキテクチャを提供するためにオペレーティングシステムに指示し共有モジュール１０をロードさせることができる。これについては、動的リンクモジュール１４が既にロードされているものと仮定する図２ｂに関連しさらに説明する。
【０００６】
ランタイム中に、動的リンクモジュール１４が印刷関数などの特定の共有関数を実行したい場合、図２ｂのフローチャートに例示するルーチンが実行される。工程３６では、動的リンクモジュール１４は、共有モジュール１０をロードするように名前により（by name）オペレーティングシステムに要求する。この要求は、共有モジュール１０のローディングを起動するようにアレンジされるのはオペレーティングシステムではなく動的リンクモジュール１４自体であるという点で明示的であり、ここではモジュール１４が共有モジュール１０に動的にリンクされることを意味する。動的リンクモジュール１４は工程３８に進み、共有モジュール１０のエクスポートテーブル１６内で、名前によりまたは順に関数アドレスを検索するようオペレーティングシステムに要求する。次に、工程４０では、このアドレスを介し共有モジュール１０内の関数を呼び出すことが動的リンクモジュール１４の判断により行われる。
【０００７】
このアーキテクチャについての主要課題の一つは、セキュリティの観点から、異なるモジュールから共有モジュールに結び付ける（静的または動的にリンクされるかどうかにかかわらず）関数が十分に緊密でない（insufficiently tight）というセキュリティに関わる。共有モジュール１０内の関数へのアクセスは、単に、エクスポートテーブル１６において名前により関数アドレスを検索することにより、そして指名されたアドレスにおいて関連する関数を呼び出すことにより事実上実現され、したがってそのインターセプトそして可能性として呼び出しの再ルーティングを防止することはほとんどできない。その結果、関数使用の権限外のモニタリング、関数インターセプト、関数情報の権限外の修正は、比較的簡単なことである。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
発明の概要
本発明は上記問題を克服することを目的とする。
【０００９】
本発明の別の目的は、当該呼び出しの詳細を露出することなく（without exposing details of the call）、第一のモジュールが共有モジュール内のそれぞれの関数を呼び出すことを可能にするリンクを提供する手段を提供することである。
【００１０】
後述する好ましい様式における本発明のさらに別の目的は、共有モジュール内の呼び出しが共有モジュールのエクスポートテーブルにおいて露出されなくかつ呼び出し者（すなわち別のモジュール）が自身のインポートテーブル内に当該関数のニード（the need for the function）を露出する必要がないように、当該関数が共有モジュールからエクスポートされるのを可能にすることである。
【００１１】
後述する好ましい様式における本発明のさらに別の目的は、少なくとも読み出しモジュールのイメージ解析により推定されることがない、２つのモジュール間のリンクを提供することである。
【課題を解決するための手段】
【００１２】
本発明の一態様によると、第一のモジュールと複数の関数を含む共有モジュールとから構成されるとともに、第一のモジュールと共有モジュールとの間で共有される関数を結び付けるための手段を有する、共有関数結合アレンジメント（ｓｈａｒｅｄ  ｆｕｎｃｔｉｏｎ  ｂｉｎｄｉｎｇ  ａｒｒａｎｇｅｍｅｎｔ）を生成するための方法であって、第一のモジュールと共有モジュールを生成するリンク段階と、当該呼び出しの詳細を露出することなく共有モジュールを呼び出すための第一のモジュールを用意する準備段階と、モジュールをロードし、そして当該呼び出しの詳細を露出することなく第一のモジュールを共有モジュール内のそれぞれの関数にリンクするローディング段階と、を含む方法が提供される。
【００１３】
本発明の別の態様によると、共有関数結合アレンジメントにおいて、第一のモジュールと複数の関数を含む共有モジュールとの間で共有される関数を結び付けるための方法であって、第一のモジュールから共有モジュールを呼び出す工程と、当該呼び出しの詳細を露出することなく、第一のモジュールを共有モジュール内のそれぞれの関数にリンクする工程と、を含む方法が提供される。
【００１４】
本発明のもう一つの態様によると、共有関数結合アレンジメントにおける、第一のモジュールと共有モジュールとの間で共有される関数を結び付けるためのシステムであって、第一のモジュールと、複数の関数を含む共有モジュールと、当該呼び出しの詳細を露出することなく第一のモジュールが共有モジュール内のそれぞれの関数を呼び出すことを可能にするリンクアレンジメント（ｌｉｎｋｉｎｇ  ａｒｒａｎｇｅｍｅｎｔ）と、を含むシステムが提供される。
【発明を実施するための最良の形態】
【００１５】
例として添付図面を参照し本発明をさらに説明する。
【００１６】
好ましい形態の説明
以下に添付図面に示される実施形態を参照し本発明を説明する。説明される実施形態は例示のみであること、そして様々な変更が可能でありそのいくつかは以下の説明において言及されることを理解すべきである。
【００１７】
従来技術は、共有モジュール１０との静的リンクモジュール１２または動的リンクモジュール１４のいずれかのリンクを参照し説明されたが、本発明は、動的リンクモジュール５０を共有モジュール５２に結び付ける関数のみを参照し説明する。従来技術に関して説明したように、本場合における結合処理（ｂｉｎｄｉｎｇ  ｐｒｏｃｅｓｓ）は、リンク段階と、モジュール５０が特定関数を実行したい場合のランタイム時のロード段階と、を含む一連の段階を含む。しかしながら、本発明によれば、本発明の結合処理を生成するためにリンク段階とロード段階との間に追加の段階、すなわち準備段階が挿入される。
【００１８】
図３にリンク段階の結果の動的リンクモジュール５０と共有モジュール５２を示し、図４に準備段階における２つのモジュール５０、５２の基本的な変更を示す。そして図５は準備段階の結果の両方のモジュールを示し、この時点で動的リンクモジュール５０は、共有モジュール５２を呼び出し共有モジュール５２内の関数情報へアクセスする準備が整う。図６は、準備段階に伴う工程を示すフローチャートである。リンク段階と準備段階について図３〜図６を参照し説明する。
【００１９】
本発明によれば、図３に示すリンク段階では、以下に説明するように、共有モジュール５２は、別のモジュールがアクセスを望むそれぞれの関数に数値識別子を関連付ける共有関数テーブル５４と共に生成される。追加の従来の共有設定関数もまた共有モジュール５２に含まれる。動的リンクモジュール５０もまた、関数プロキシーと、共有関数テーブル５４を介し共有モジュール５２内の関数を識別することができるマーカーと、マーカーアドレスとを含む共有セキュアマーカーライブラリ（ｓｈａｒｅｄ  ｓｅｃｕｒｅ  ｍａｒｋｅｒ  ｌｉｂｒａｒｙ）５６と共に生成される。各関数プロキシーは、実際の関数を表し、実際の関数と同一のものである可能性が高いが、実際上は、実際の関数の呼び出しを受信するとともに、意図する宛先（実際の関数）までこのような呼び出しをルーティングする間接的なルーティングメカニズムであると効果的である。マーカーは、基本的には共有関数テーブル５４内のものと同じ数値識別子を含む。しかしながら、この段階では動的リンクモジュール５０は、呼び出しをルーティングすべき共有モジュール５２内の基本アドレスを与えられていないので、共有モジュール５２内のいかなる関数も呼び出すことができない。
【００２０】
結合処理の次の段階すなわち図４に示す準備段階では、準備段階を実施するための特別のプログラム（準備ツールと呼ばれ矢印５８により明示される）は、共有セキュアマーカーライブラリ５６から数値識別子とマーカーアドレスに関するマーカー情報を抽出し、アドレスを共有関数テーブル５４内の数値識別子に関連付けるためのマーカー情報６０として、この情報を暗号化し共有モジュール５２内に埋め込む。これは、マーカーは消去されているが依然として関数プロキシーを含む共有セキュアマーカーライブラリ６２を動的リンクモジュール５０内に残す。この段階では、動的リンクモジュール５０内の共有セキュアマーカーライブラリ６２は、共有モジュール５２の共有関数テーブル５４にアクセスすることができ共有モジュール５２内の宛先の関数を確定することができる情報を含んではいなく、そして共有モジュール５２内のマーカー情報６０は、共有モジュール５２内の関数情報をさらに保護するために暗号化される。しかしながら、ここで動的リンクモジュール５０は、共有モジュール５２を呼び出す準備が整った状態にある。
【００２１】
準備段階を実施するための図４の準備ツール５８における工程は、図６に示され、準備段階が起動されると工程６４から始まる。準備ツールは工程６６へ進み、共有セキュアマーカーライブラリ５６内において、共有関数テーブル５４内の関数の一つに対する数値識別子をキャリーするそれぞれのマーカーとその関連マーカーアドレスとを検出する。工程６８では、準備ツール５８はマーカーコンテンツとアドレスを暗号化し記録し、次に、工程７０では共有セキュアマーカーライブラリ５６からマーカーコンテンツとアドレスを消去する。次に、工程７２では、準備ツールは、共有セキュアマーカーライブラリ５６内にマーカーが残されているかどうかを問い合わせる。その応答が「はい」である場合、準備ツール５８は工程６６へ戻り、別のマーカーを検出する。その応答が「いいえ」である場合、準備ツール５８は工程７４へ進み、暗号化されたマーカーアドレスと数値の関数識別情報（numeric function identifier information）を共有モジュール５２内のマーカー情報６０に追加する。そして、準備ツール５８は工程７６へ進み、準備段階が完了したということを指示する。
【００２２】
ランタイム時、共有モジュール５２は、呼び出しを受信するための共有モジュール５２内のゼネラルコールアドレスを与える共通関数ポインタを動的リンクモジュール５０に追加し、マーカー情報６０内に格納された実際の関数アドレスへ共通関数呼び出しをルーティングするための動的オブジェクトをそれ自身内に生成する。この処理は、図７〜図９を参照し以下の節でさらに説明される。
【００２３】
ランタイム時、図５に示す共有セキュアライブラリ６２を含む動的リンクモジュール５０は、オペレーティングシステムにより最初にロードされる。次に、動的リンクモジュール５０は、図５にまた示すように、オペレーティングシステムに指示し、共有関数テーブル５４とマーカー情報６０とを含む共有モジュール５２をロードさせる。これに続き、共有モジュール５２は、それぞれが共有モジュール５２内のそれぞれの関数を表すとともに共有関数テーブル５４を介し関数にアクセスするための該関数の暗号化アドレスを含む、一組の動的オブジェクト８０をそれ自身内に生成する。各動的オブジェクト８０は、解読された関数アドレスへ呼び出しを間接的にルーティングするために使用され得る、暗号化関数ポインタを含む動的に割り振られたメモリブロックを含むと効果的である。動的に割り振られたメモリの性質は、当該処理の各実行に対し異なるメモリアドレスを有するということである。これは非予測可能性の要素を与え、したがってセキュリティを強化する。こうして、共有モジュール５２内には特定関数への間接的なルーティングリンクが設けられる。共有モジュール５２は、また、動的リンクモジュール５０からの呼び出しをルーティングするための、共有モジュール５２内のゼネラルコールアドレスへのポインタを与える共通関数ポインタ８２を生成する。次に、動的リンクモジュール５０は、共有モジュール５２内の従来の共有設定関数を呼び出し、共有モジュール５２に、動的リンクモジュール５０内に共通関数ポインタ８２をパッチする（patch into the dynamically linked module 50 the common function pointer 82）ように要求するとともに、マーカー情報６０を使用して動的オブジェクト８０へのアドレスを含むパッチマーカーを動的リンクモジュール５０内にパッチするように要求する。このようなパッチマーカーと共通関数ポインタ８２は共有モジュール５２の共有セキュアライブラリ６２に追加される。これにより動的リンクモジュール５０は共有モジュール５２を呼び出すことができる。
【００２４】
図７のロード段階を実施し続いて関数を実行するための処理ルーチンを図８と図９に示す。ここでは、動的リンクモジュール５０が既にロードされているものと仮定する。動的リンクモジュール５０は工程９０でランタイム動作を起動し、次に工程９２に進み、そこで動的リンクモジュール５０は、オペレーティングシステムに共有モジュール５２をロードするように要求する。次に、動的リンクモジュール５０は、工程９４で共有モジュール５２内の従来の共有設定関数を呼び出す。これらの工程は前に説明したように、オペレーティングシステムではなく動的リンクモジュール５０が上記動作を起動するという点で明示的である。工程９４では、共有モジュール５２は、図９に示されるサブルーチンに従う。このサブルーチンは工程１１０で始まり、共有モジュール５２が動的オブジェクト８０と共通関数ポインタ８２を生成すると、工程１１２に進む。次に、共有モジュール５２は、最初に工程１１４に進み、共有モジュール５２内のマーカー情報６０からマーカーアドレスと関数識別子とをロードし、次に工程１１６へ進み、関数識別子を使用して動的オブジェクトアドレスを検索する。工程１１８では、共有モジュール５２は、動的リンクモジュール５０の共有セキュアライブラリ６２内に共通関数ポインタ８２とそれぞれの動的オブジェクトアドレスをパッチし、これら両方がそれぞれの関数プロキシーを経由してアクセスされるようにする。共有モジュール５２は工程１２０に進み、マーカー情報６０内にアドレスが残されているかどうか問い合わせる。その応答が「はい」である場合、共有モジュール５２は工程１１４に戻る。一方、その応答が「いいえ」である場合、共有モジュール５２を設定するためのサブルーチンは完了したということが工程１２２で示される。
【００２５】
一旦、共有モジュールが図８の工程９４にしたがって確立されると、動的リンクモジュール５０と共有モジュール５２は、動的リンクモジュール５０が印刷関数などの特定の共有関数を実行したい場合に対応する準備が整う。当該関数を呼び出すために、工程９６において、動的リンクモジュール５０は、共有セキュアライブラリ６２内のそれぞれの関数プロキシーを呼び出す。該関数プロキシーは、動的リンクモジュール５０内の共通関数ポインタ８２を介し、共有モジュール５２内に含まれる関連する動的オブジェクト８０のアドレスにより、共有モジュール５２内のゼネラルコールアドレスへの呼び出しを行う。工程９８では、共有モジュール５２は、その呼び出しを関連する動的オブジェクト８０にルーティングすることにより応答する。動的オブジェクト８０は、共有関数テーブル５４内の実際の関数のアドレスを知っており、共有モジュール５２内の該関数にアクセスする。共有モジュール５２は工程１００に進み該関数を実行し、その後、共有モジュール５２は、ランタイム動作が完了したということを工程１０２で示す。
【００２６】
本発明は、共有呼び出しが動的リンクモジュール５０の共有セキュアライブラリ６２内または共有モジュール５２の動的オブジェクト８０内で露出されない共有関数結合アレンジメントを提供する。この結果、動的リンクモジュール５０と共有モジュール５２間の結合は緊密に生成され、ランタイム中のデータのセキュリティを維持する。
【００２７】
上記説明はただ一つの動的リンクモジュール５０と共有モジュール５２との間を結び付ける関数に関するが、実際には、本発明は、共有モジュール５２が関数を複数の動的リンクモジュール５０と共有することができるシステムに適用される可能性が高い。
【００２８】
上述のように本発明は多くの利点を有する。特に、動的リンクモジュール５０と共有モジュール５２との間のリンクは、動的リンクモジュール５０のスタティックイメージ解析、または可能性として逆アセンブルされた機械コードの調査による共有モジュール５２のスタティックイメージ解析によっては、容易には推定され得ない。これにより、コードを変更し記憶データを破壊する可能性を低減する。
【図面の簡単な説明】
【００２９】
【図１】２つ以上のモジュールを相互にリンクするための従来システムの概略図である。
【図２ａ】モジュールが、図１のシステムにおける、共有モジュールに静的にリンクされる場合、及び、共有モジュールに動的にリンクされる場合のそれぞれのリンク処理を表すフローチャートである。
【図２ｂ】モジュールが、図１のシステムにおける、共有モジュールに静的にリンクされる場合、及び、共有モジュールに動的にリンクされる場合のそれぞれのリンク処理を表すフローチャートである。
【図３】本発明による、モジュールを共有モジュールへ動的にリンクする結合処理におけるリンク段階を表現する概略図である。
【図４】本発明による、モジュールと共有モジュールを動的に相互にリンクする結合処理における準備段階を表す概略図である。
【図５】図４における準備段階の結果を表す概略図である。
【図６】図４の準備段階におけるルーチンを表すフローチャートである。
【図７】本発明による、モジュールと共有モジュールを動的に相互にリンクする結合処理におけるロード段階を表す概略図である。
【図８】関数が共有モジュールにおいてアクセスされ実行される、動的リンクモジュールと共有モジュールのロード段階におけるランタイムルーチンを表すフローチャートである。
【図９】図８のルーチンにおけるサブルーチンを表すフローチャートである。
【図１】
2009509211.tif 000002
【図２Ａ】
2009509211.tif 000003
【図２Ｂ】
2009509211.tif 000004
【図３】
2009509211.tif 000005
【図４】
2009509211.tif 000006
【図５】
2009509211.tif 000007
【図６】
2009509211.tif 000008
【図７】
2009509211.tif 000009
【図８】
2009509211.tif 000010
【図９】
2009509211.tif 000011