(57)【特許請求の範囲】
【請求項１】
一連の情報処理を行うプログラムを複数のサブプログラムに分割し，前記複数のサブプログラムの少なくとも一つがネットワーク上に配置された記憶媒体に分割して記憶されるプログラム構成方法により構成されている情報処理装置であって、
前記サブプログラムが情報処理の一部を行うサブモジュールと、他のサブプログラムが記憶されている記憶媒体を識別するための記憶媒体識別子からなるポインタ情報とを有するとともに、
前記情報処理装置は、前記ポインタ情報により識別された前記サブプログラムを読み込むプログラム読み込み部を有し、
記憶媒体へのジャンプ命令に対するエラー応答がある場合には不正コピーによるプログラムの利用であるとして、遅い処理を行い、記憶媒体へのジャンプ命令に対して正常な応答がある場合には速い処理を行うことを特徴とする情報処理装置。
【請求項２】
ポインタ情報が他のサブプログラムが記憶されている記憶媒体を識別するための記憶媒体識別子と、当該記憶媒体識別子で識別される記憶媒体中のアドレスを識別するアドレス識別子とからなる請求項１記載の情報処理装置。
【請求項３】
記憶媒体識別子をサブプログラム中の予め決められたプログラム変数の値をパラメータとする関数から生成することを特徴とする請求項１または請求項２記載の情報処理装置。
【請求項４】
アドレス識別子をサブプログラム中の予め決められたプログラム変数の値をパラメータとする関数から生成することを特徴とする請求項２に記載の情報処理装置。
【請求項５】
アドレス識別子と記憶媒体識別子の双方をサブプログラム中の予め決められた異なるプログラム変数の値をパラメータとする関数から生成することを特徴とする請求項２に記載の情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
コンピュータソフトウェアの不正コピーを防止または困難にするための構成を有するプログラム構成方法により構成された情報処理装置に関するものである。
【０００２】
【従来の技術】
従来の技術として，特開平２―２１３４４がある。
本発明は，ファイルのコピーを防止するためにファイルを分割しランダムな空き領域に書き込み，ファイルを復元する情報はファイル・アロケーション・テーブルという表で一括管理するものである。
【０００３】
【発明が解決しようとする課題】
しかしながら，従来の技術では，ファイルを復元する情報が一括管理されており，復元するための情報を一箇所見つけることができれば，容易に復元可能，つまりファイルのコピーが可能となる，という課題を有していた。
また，一括管理された情報が復元するための情報であることが比較的容易に判断できた。
【０００４】
【課題を解決するための手段】
請求項１の発明は，一連の情報処理を行う複数のプログラムであり，情報処理の一部を行うサブモジュールと他のサブプログラムが記憶されている記憶媒体を識別するための記憶媒体識別子からなるポインタ情報を有するサブプログラムを有することを特徴としている。
【０００５】
請求項２の発明は，請求項１の発明において，ポインタ情報が他のサブプログラムが記憶されている記憶媒体を識別するための記憶媒体識別子とその記憶媒体識別子で識別される記憶媒体中のアドレスを識別するアドレス識別子からなることを特徴としている。
【０００６】
請求項３の発明は，請求項２の発明において，記憶媒体識別子をサブプログラム中の予め決められたプログラム変数の値をパラメータとする関数から生成することを特徴としている。請求項４の発明は，請求項２の発明において，アドレス識別子をサブプログラム中の予め決められたプログラム変数の値をパラメータとする関数から生成することを特徴としている。
【０００７】
請求項５の発明は，請求項２の発明において，アドレス識別子と記憶媒体識別子の双方をサブプログラム中の予め決められた異なるプログラム変数の値をパラメータとする関数から生成することを特徴としている。
【０００８】
【発明の実施の形態】
以下，本発明の実施の形態を図面を用いて詳細に説明する。
実施の形態１  図１は本発明に係る情報処理装置のブロック図で，入力部１０１と，プログラム記憶部（１）１０２と，プログラム記憶部（２）１０３と，プログラム読み込み部１０４と，情報処理部１０５とからなる。
【０００９】
入力部１０１は，例えば，キーボードやマウスなどで，情報処理の開始指示および当該情報処理の命令群の開始アドレスを特定する記憶媒体識別子および記憶媒体識別子で識別される記憶媒体中のアドレスからなる開始指示命令を入力する。
プログラム記憶部（１）１０２は，例えば，ハードディスクやフロッピーディスクなどであり，一連の情報処理の命令群をサブプログラムと呼ぶ一部の情報処理の命令群を有する情報に分割して記憶している。そして，当該サブプログラムは，情報処理の一部を行うための命令の集合であるサブモジュールと次の情報処理の一部を行うサブプログラムを識別するポインタ情報を有する。
【００１０】
プログラム記憶部（２）１０３は，プログラム記憶部（１）１０２とは別の記憶媒体であり，ＣＤ−ＲＯＭやプロテクトモジュールなどである。ここで，プロテクトモジュールとは，プリンタのコネクタに接続する小容量のメモリを持った記憶媒体で，プロテクトモジュールに記憶されている情報を読み込むには，特別なドライバが必要となる。
【００１１】
プログラム読み込み部１０４は，指示に従ってプログラム記憶部（１）１０２またはプログラム記憶部（２）１０３に記憶されているサブプログラムを読み込む。このプログラム読み込み部１０４は，プログラム記憶部（１）１０２とプログラム記憶部（２）１０３に記憶されているサブプログラムを読み込むためのドライバを有し，サブプログラムの読み込みの指示に含まれる記憶媒体識別子で識別される記憶媒体用のドライバを起動して，サブプログラムを読み込む。
【００１２】
情報処理部１０５は，例えばコンピュータの演算処理部（ＣＰＵ）などがあり，入力部１０１から入力された開始指示命令が有する記憶媒体識別子とアドレスで特定されるサブプログラムの読み込みをプログラム読み込み部１０４に指示し，またプログラム読み込み部１０４が読み込んだサブプログラムを処理する。
次に図１に示す情報処理装置における情報処理の動作を図２のフローチャートを参照しながら説明する。
【００１３】
ステップＳ２０１  情報処理部１０５は，入力部１０１から開始指示命令が入力されたか否か判断する。開始指示命令が入力されれば，ステップＳ２０２に行き，入力されていなければステップＳ２０１に戻る。
ステップＳ２０２  情報処理部１０５は，開始指示命令が有する記憶媒体識別子とアドレスで識別されるサブプログラムを読み込むことをプログラム読み込み部１０４に指示する。
【００１４】
ステップＳ２０３  プログラム読み込み部１０４はステップＳ２０２で識別されたサブプログラムを読み込む。
ステップＳ２０４  情報処理部１０５は，サブプログラム中のプログラムカウンタ（Ｐ）を１にセットする。
ステップＳ２０５  情報処理部１０５は，Ｐ番目の命令がサブプログラムに存在するか否か判断する。Ｐ番目の命令が存在すれば，ステップＳ２０６に行き，存在しなければ処理を終了する。
【００１５】
ステップＳ２０６  情報処理部１０５は，Ｐ番目の命令が記憶媒体識別子とアドレスからなるポインタ情報を有する次のサブプログラムへのジャンプ命令か否か判断する。
次のサブプログラムへのジャンプ命令であればステップＳ２０２に戻る。当該ジャンプ命令でなければステップＳ２０７に行く。
【００１６】
ステップＳ２０７  情報処理部１０５は，Ｐ番目の命令を解釈し，処理する。ステップＳ２０８  情報処理部１０５は，ＰにＰ＋１を代入する。ステップＳ２０５に戻る。
次に上記情報処理装置において，プログラム記憶部（１）１０２がハードディスクであり，プログラム記憶部（２）１０３がＣＤ−ＲＯＭである場合に，複数のサブプログラムがハードディスク（プログラム記憶部（１）１０２）とＣＤ−ＲＯＭ（プログラム記憶部（２）１０３）に分割されている場合の具体的な動作について説明する。
【００１７】
今，図３に示されるようにハードディスク（プログラム記憶部（１）１０２）とＣＤ−ＲＯＭ（プログラム記憶部（２）１０３）に一連の情報処理の一部を行うサブプログラムが分割して記憶されている。そして，各サブプログラムは，次のサブプログラムへ処理を移行するための記憶媒体識別子とアドレスからなるポインタ情報が存在する。
【００１８】
かかる場合に，入力部１０１から「処理開始  ‘ハードディスク’  ‘０’」という開始指示命令が入力されるとする。ここで，「処理開始  ‘ハードディスク’  ‘０’」の「処理開始」は命令であり，「‘ハードディスク’」は記憶媒体識別子であり，「‘０’」はアドレスである。そして，「‘ハードディスク’」と「‘０’」で最初に処理するサブプログラムが「サブプログラム１」と決定される。
【００１９】
上記の開始指示命令が入力されれば，情報処理部１０５は，ハードディスク上のサブプログラム１を読み込むようにプログラム読み込み部１０４に指示し，プログラム読み込み部１０４はサブプログラム１を読み込む。そして，情報処理部１０５は順次サブプログラム１中の命令を順次処理し，「ＪＡＭＰ  ‘ＣＤ−ＲＯＭ’  ‘ＢＢＢ’」の命令の処理によりＣＤ−ＲＯＭ上のサブプログラム２に処理は移行する。
【００２０】
なお，「ＪＡＭＰ  ‘ＣＤ−ＲＯＭ’  ‘ＢＢＢ’」の命令の以降に他の命令が存在するが，その命令の存在により，次のサブプログラムへの処理への移行命令であることが解析しにくくなっている。
また，「ＪＡＭＰ  ‘ＣＤ−ＲＯＭ’  ‘ＢＢＢ’」の命令では，記憶媒体識別子は「ＣＤ−ＲＯＭ」となっているが，説明の都合上記憶媒体名を記載しているが，実際のプログラムでは「ＣＤ−ＲＯＭ」であることを識別するための数値などの識別子でも良い。
【００２１】
サブプログラム２に処理が移行するとは，情報処理部１０５が，プログラム読み込み部１０４にＣＤ−ＲＯＭ上のサブプログラム２を読み込むことを指示し，上記の説明と同様にプログラム読み込み部１０４はサブプログラム２を読み込み，情報処理部１０５は順次サブプログラム２中の命令を順次処理することを意味する。
【００２２】
そのサブプログラム２の命令の処理中の「ＪＡＭＰ  ‘ハードディスク’  ‘４５６’」の命令の処理によりハードディスク上のサブプログラム３に処理は移行する。
以降，同様にサブプログラム４からサブプログラム８が処理されて，一連の処理が終了する。
【００２３】
なお，上記の具体的な動作の説明において，プログラム記憶部（１）１０２がハードディスクであり，プログラム記憶部（２）１０３がＣＤ−ＲＯＭであったが，それぞれのプログラム記憶部がフロッピーディスクやプロテクトモジュールなどの記憶媒体であっても良いし，他方のプログラム記憶部がネットワーク上の他のマシンのハードディスクなどの記憶媒体であってもよい。他方のプログラム記憶媒体がネットワーク上の他のマシンのハードディスクである場合とは，例えば，インターネット上のＵＲＬで識別されるホームページであり，当該ホームページからＨＴＴＰなどのプロトコルによりサブプログラムを逐次取り出して，一連の処理を行ってもよい。
【００２４】
また，上記の具体的な動作の説明において，２つの異なる記憶媒体であるプログラム記憶部にサブプログラムを分割して持たせたが，３つ以上の異なる記憶媒体にサブプログラムを分割してもよい。
また，図４に示すように，他のサブプログラムへのポインタ情報が記憶媒体識別子だけでも良い。図４のようにプログラムがサブプログラムに分割された場合は，入力部１０１から「処理開始  アドレス識別子」（この場合「処理開始  ‘０’」）が入力され，デフォルトの記憶媒体であるハードディスクの「アドレス識別子‘０’」で示されたプログラムを処理する。従って，情報処理部１０５は，ハードディスク上のサブプログラム１をまず処理し，次に記憶媒体識別子（ＣＤ−ＲＯＭ）で識別される記憶媒体中の予めきめられたアドレス（０）に記憶されたサブプログラム（サブプログラム２）を処理し，続いてデフォルトの記憶媒体であるハードディスク上の「処理開始  アドレス識別子」の後のサブプログラム（サブプログラム３）を処理することとなる。
【００２５】
この場合，ＣＤ−ＲＯＭの中のプログラムはアドレス‘０’から開始されていることが前提となっている。
また，次に移行するサブプログラムを特定するポインタ情報が記憶媒体識別子とアドレスであったが，記憶媒体の種類によりトラック番号やセクタ番号などの異なるものであってもよい。
【００２６】
以上のように本実施の形態で説明したプログラム構成方法によりプログラムを構成すれば，単にコピーして，分割されたプログラムを合成しても，記憶媒体識別子がプログラム中に存在することにより，当該記憶媒体識別子で識別される記憶媒体を読みにいくことになり，正常に一連の情報処理が行われず，コピーの効果を発揮できない。従って，不正コピーを有効に防止することができる。
【００２７】
さらに，例えば，本情報処理装置の処理はデータの検索処理であり，「Ｊｕｍｐ  ＣＤ−ＲＯＭ」の後ろに「ｉｆ（ｅｒｒｏｒ）………」があり，ＣＤ−ＲＯＭへのジャンプ命令のエラー処理が記載されている場合（図５参照），エラーの時は遅い検索（例えば，逐次検索）を行い，正常な時（ＣＤ−ＲＯＭのサブプログラム２の処理）は速い検索（例えば，二分検索）を行うこととする，ということも可能である。かかる場合，不正コピーした情報処理装置は，正常な情報処理装置と比較して非常に遅い情報処理（検索）しかできない，ということになり，不正コピー者に対して正規なサービスを享受できないという不具合を与えることができる。
【００２８】
実施の形態２  図６は本発明に係る情報処理装置のブロック図で，入力部１０１と，プログラム記憶部６０２と，プログラム読み込み部１０４と，情報処理部６０５とからなる。
プログラム記憶部６０２は，例えば，ハードディスクやフロッピーディスクなどであり，一連の情報処理の命令群をサブプログラムと呼ぶ一部の情報処理の命令群を有する情報に分割して記憶している。そして，当該サブプログラムは，情報処理の一部を行うための命令の集合であるサブモジュールと次の情報処理の一部を行うサブシステムの開始位置を示すアドレスを有する。
【００２９】
そして，アドレスは，前記サブプログラム中の一部のプログラムコードとして使用されている予め決められたプログラム変数の値をパラメータとした関数により生成されることとする。
情報処理部６０５は，入力部１０１から入力された開始指示命令が有するアドレスで特定されるサブプログラムの読み込みをプログラム読み込み部１０４に指示し，またプログラム読み込み部１０４が読み込んだサブプログラムを処理する。
【００３０】
次に，上記図６に示す情報処理装置における情報処理の動作を図７のフローチャートを参照しながら説明する。
ステップＳ７０１  情報処理部６０５は，入力部１０１から開始指示命令が入力されたか否か判断する。
開始指示命令が入力されれば，ステップＳ７０２に行き，入力されていなければステップＳ７０１に戻る。
【００３１】
ステップＳ７０２  情報処理部６０５は，開始指示命令が有するアドレスで識別されるサブプログラムを読み込むことをプログラム読み込み部１０４に指示する。
ステップＳ７０３  プログラム読み込み部１０４はステップS７０２で識別されたサブプログラムを読み込む。
【００３２】
ステップＳ７０４  情報処理部６０５は，サブプログラム中のプログラムカウンタ（Ｐ）を１にセットする。
ステップＳ７０５  情報処理部６０５は，Ｐ番目の命令がサブプログラムに存在するか否か判断する。Ｐ番目の命令が存在すれば，ステップＳ７０６に行き，存在しなければ処理を終了する。
【００３３】
ステップＳ７０６  情報処理部６０５は，Ｐ番目の命令が予め決められたプログラム変数をパラメータとした関数からなるポインタ情報を有する次のサブプログラムへの移行命令か否か判断する。
次のサブプログラムへの移行命令であればステップＳ７０７に行き，当該移行命令でなければステップＳ７０８に行く。
【００３４】
ステップＳ７０７  情報処理部６０５は，プログラム変数の値を読みだし，アドレスを算出するための予め決められた関数を適用してアドレスを算出する。ステップＳ７０２に戻る。
ステップＳ７０８  情報処理部６０５は，Ｐ番目の命令を解釈し，処理する。ステップＳ７０９  情報処理部６０５は，ＰにＰ＋１を代入する。ステップＳ７０５に戻る。
【００３５】
次に，上記情報処理装置において，プログラム記憶部６０２に図８のような分割されたサブプログラムが複数記憶されている場合の具体的な動作について説明する。
今，図８に示されるように，例えばハードディスク（プログラム記憶部６０２）にサブプログラムが分割して記憶されている。
【００３６】
かかる場合に，入力部１０１から「処理開始  ‘１２３’」という開始指示命令が入力されるとする。ここで，「処理開始  ‘１２３’」の「処理開始」は命令であり，「‘１２３’」はアドレスである。そして，「‘１２３’」のアドレスにより最初に処理するサブプログラムがサブプログラム１と決定される。
上記の開始指示命令が入力されれば，情報処理部６０５は，プログラム記憶部６０２のアドレス‘１２３’で始まるサブプログラム１を読み込むようにプログラム読み込み部１０４に指示し，プログラム読み込み部１０４はサブプログラム１を読み込む。そして，情報処理部６０５は順次サブプログラム１中の命令を順次処理し，予め決められた変数「Ａ」をパラメータとする予め決められた関数「ｆ１」の適用により算出された値を次に処理するサブプログラムの開始アドレスだと判断し，つまり「ｆ１（Ａ）」の命令の処理により算出された値を次に処理するサブプログラムの開始アドレスであると判断し，プログラム読み込み部１０４に当該算出したアドレスで開始されるサブプログラムの読み込みを指示する。
【００３７】
今，Ａの値が「４」であり「ｆ１（ｘ）＝１１１ｘ＋１２」だとすると，ｆ１（Ａ）の計算により「‘４５６’」が算出され，次にサブプログラム２に処理は移行する。
そして，情報処理部６０５は順次サブプログラム２中の命令を順次処理し，予め決められた変数「Ｂ」をパラメータとする関数の適用により算出された値を次に処理するサブプログラムの開始アドレスだと判断し，つまり「ｆ２（Ｂ）」の命令の処理により算出された値を次に処理するサブプログラムの開始アドレスであると判断し，プログラム読み込み部１０４に当該算出したアドレスで開始されるサブプログラムの読み込みを指示する。
【００３８】
今，例えばＢの値が「２」であり，「ｆ２（ｘ）＝２ｘ−４」だとすると，ｆ２（Ｂ）の処理により「‘０’」が算出され，次にサブプログラム３に処理は移行する。情報処理部６０５は順次サブプログラム３中の命令を順次処理し，サブプログラム３中には予め決められた次のサブプログラムのアドレスを算出するためのプログラム変数が存在しなかったために，サブプログラム３の全処理を完了して，一連の情報処理は終了する。
【００３９】
なお，上記の具体的な動作の説明において，アドレスを算出するための関数が予め決められた関数としたが，サブプログラム中に埋め込まれて他の処理で使用する関数であっても良い。かかる他の処理で使用する関数によりアドレスを算出するほうが，不正コピーのための命令であることが解析されにくい。プログラム変数も同様に，他の処理で使用される変数でも良いし，アドレス算出用の変数でも良い。
【００４０】
以上のように本実施の形態で説明したプログラム構成方法によりプログラムを構成すれば，サブプログラム中で使用されている予め決められた変数をパラメータとする関数を適用してアドレスを算出し，当該アドレスにより次のサブプログラムを決定するので，たとえ分割されたサブプログラムをすべて読み出すことができたとしても，どのように連結するのかを判断することが極めて困難であり，不正コピーは非常に困難となる。
【００４１】
実施の形態３  図９は本発明に係る情報処理装置のブロック図で，入力部１０１と，プログラム記憶部（３）９０２と，プログラム記憶部（４）９０３と，プログラム読み込み部１０４と，情報処理部９０５とからなる。
プログラム記憶部（３）９０２は，例えば，ハードディスクやフロッピーディスクなどであり，一連の情報処理の命令群をサブプログラムと呼ぶ一部の情報処理の命令群を有する情報に分割して記憶している。そして，当該サブプログラムは，情報処理の一部を行うための命令の集合であるサブモジュールと次の情報処理の一部を行うサブプログラムを識別する記憶媒体識別子と記憶媒体識別子で識別される記憶媒体中の位置を示すアドレスを有する。
【００４２】
そして，記憶媒体識別子とアドレスは，前記サブプログラム中の一部のプログラムコードとして使用されている予め決められたプログラム変数の値をパラメータとした関数により各々生成されることとする。
プログラム記憶部（４）９０３は，プログラム記憶部（３）９０２とは別の記憶媒体であり，ＣＤ−ＲＯＭやプロテクトモジュールなどであり，記憶している内容および構成はプログラム記憶部（３）９０２と同様に，サブプログラムを１つ以上記憶している。
【００４３】
情報処理部９０５は，入力部１０１から入力された開始指示命令が有する記憶媒体識別子とアドレスで特定されるサブプログラムの読み込みをプログラム読み込み部１０４に指示し，またプログラム読み込み部１０４が読み込んだサブプログラムを処理する。
次に図９に示す情報処理装置における情報処理の動作を図１０のフローチャートを参照しながら説明する。
【００４４】
ステップＳ１００１  情報処理部９０５は，入力部１０１から開始指示命令が入力されたか否か判断する。
開始指示命令が入力されれば，ステップＳ１００２に行き，入力されていなければステップＳ１００１に戻る。
ステップＳ１００２  情報処理部９０５は，開始指示命令が有する記憶媒体識別子とアドレスで識別されるサブプログラムを読み込むことをプログラム読み込み部１０４に指示する。
【００４５】
ステップＳ１００３  プログラム読み込み部１０４はステップＳ１００２で識別されたサブプログラムを読み込む。
ステップＳ１００４  情報処理部９０５は，サブプログラム中のプログラムカウンタ（Ｐ）を１にセットする。
ステップＳ１００５  情報処理部９０５は，Ｐ番目の命令がサブプログラムに存在するか否か判断する。Ｐ番目の命令が存在すれば，ステップＳ１００６に行き，存在しなければ処理を終了する。
【００４６】
ステップＳ１００６  情報処理部９０５は，Ｐ番目の命令が予め決められたプログラム変数をパラメータとした関数からなるポインタ情報を有する次のサブプログラムへの移行命令か否か判断する。
次のサブプログラムへの移行命令であればステップＳ１００７に行き，当該移行命令でなければステップＳ１００８に行く。
【００４７】
ステップＳ１００７  情報処理部９０５は，プログラム変数の値を読み出し，関数を適用して記憶媒体識別子およびアドレスを算出する。ステップＳ１００２に戻る。
ステップＳ１００８  情報処理部９０５は，Ｐ番目の命令を解釈し，処理する。
【００４８】
ステップＳ１００９  情報処理部９０５は，ＰにＰ＋１を代入する。ステップＳ１００５に戻る。
次に上記情報処理装置において，プログラム記憶部（３）９０２がハードディスクであり，プログラム記憶部（４）９０３がプロテクトモジュールである場合に，複数のサブプログラムがハードディスク（プログラム記憶部（３）９０２）とプロテクトモジュール（プログラム記憶部（４）９０３）に分割されている場合の具体的な動作について説明する。
【００４９】
今，図１１に示されるようにハードディスク（プログラム記憶部（３）９０２）とプロテクトモジュール（プログラム記憶部（４）９０３）に一連の情報処理の一部を行うサブプログラムが分割して記憶されている。
本具体例において，Ａ１，Ａ２，Ａ３，Ａ４は記憶媒体識別子を算出するためのプログラム変数であり，Ｂ１，Ｂ２，Ｂ３，Ｂ４はアドレスを算出するためのプログラム変数であり，ｈは記憶媒体識別子を算出する関数であり，ｆはアドレスを算出する関数である。
【００５０】
かかる場合に，入力部１０１から「処理開始  ‘ハードディスク’  ‘３４５’」という開始指示命令が入力されるとする。
この開始指示命令が入力されれば，情報処理部９０５は，ハードディスク上のサブプログラム１を読み込むようにプログラム読み込み部１０４に指示し，プログラム読み込み部１０４はサブプログラム１を読み込む。そして，情報処理部９０５は順次サブプログラム１中の命令を順次処理し，予め決められたプログラム変数Ａ１，Ｂ１に対する関数ｈ，ｆを適用する命令が存在すれば，そのときのＡ１，Ｂ１の値にｈ，ｆの関数を適用して，記憶媒体識別子とアドレスを算出する。
【００５１】
具体的には，サブプログラム中の「ｈ（Ａ１）」の処理により「ｈ（Ａ）」となり，「ｈ」を４つ先のアルファベットを出力する関数（入力が‘Ａ’なら出力は‘Ｅ’，入力が‘Ｙ’なら出力が‘Ｃ’となる）だとすれば「ｈ（Ａ）＝Ｅ」となる。
また，サブプログラム中の「ｆ（Ｂ１）」の処理により「ｆ（３）」となり，「ｆ（ｘ）＝ｘ―３」だとすれば「ｆ（３）＝０」となる。
【００５２】
ここで，デバイスＥはプロテクトモジュールだとすると，次にプロテクトモジュールのアドレス「０」で識別されるサブプログラムに処理が移行することとなる。
そして，サブプログラム２を同様に処理する。
続いて，情報処理部９０５は，サブプログラム２中の予め決められたプログラム変数Ａ２，Ｂ２に対する関数ｈ，ｆを適用する命令の存在を認知し，次に移行するサブプログラムを特定する記憶媒体識別子とアドレスを同様に算出する。
【００５３】
そして，サブプログラム３を処理する。
以上の手順に従って，情報処理部９０５は，さらにサブプログラム４と５を処理し，一連の処理を終了する。
なお，上記の具体的な動作の説明において，プログラム記憶部（３）９０２がハードディスクであり，プログラム記憶部（４）９０３がプロテクトモジュールであったが，それぞれのプログラム記憶部がフロッピーディスクやＣＤ−ＲＯＭなどの記憶媒体であっても良いし，他方のプログラム記憶部がネットワーク上の他のマシンのハードディスクなどの記憶媒体であってもよい。他方のプログラム記憶部がネットワーク上の他のマシンのハードディスクである場合とは，例えば，インターネット上のＵＲＬで識別されるホームページであり，当該ホームページからＨＴＴＰなどのプロトコルによりサブプログラムを逐次取り出して，一連の処理を行ってもよい。
【００５４】
また，上記の具体的な動作の説明において，２つの異なる記憶媒体であるプログラム記憶部にサブプログラムを分割して持たせたが，３つ以上の異なる記憶媒体にサブプログラムを分割してもよい。
また，次に移行するサブプログラムを特定するポインタ情報が記憶媒体識別子とアドレスであったが，記憶媒体の種類によりトラック番号やセクタ番号などの異なるものであってもよい。
【００５５】
また，図４に示すように，他のサブプログラムへのポインタ情報が記憶媒体識別子だけでも良い。
以上のように本実施の形態で説明した２つ以上の記憶媒体で分割してプログラムを保持するプログラム構成方法によりプログラムを構成すれば，単にコピーして，分割されたプログラムを合成しても，記憶媒体識別子がプログラム中に存在することにより，当該記憶媒体識別子で識別される記憶媒体を読みにいくことになり，正常に一連の情報処理が行われず，コピーの効果を発揮できない。従って，不正コピーを有効に防止することができる。
【００５６】
さらに，サブプログラム中で使用されている予め決められた変数をパラメータとする関数を適用してアドレスを算出し，当該アドレスにより次のサブプログラムを決定するので，たとえ分割されたサブプログラムを複数の記憶媒体から読んでいるがことくプログラムコードを変更できたとしても，通常のプログラムでも使用されているプログラム変数をパラメータとして関数を適用して記憶媒体識別子およびアドレスを決定しているため，どのようにサブプログラムを連結するのかを解析することが極めて困難であり，また，どの命令で記憶媒体識別子とアドレスを決定しているかの解析が極めて困難となり，不正コピーが防止できる。
【００５７】
【発明の効果】
以上説明したように本発明によれば，分割されたサブプログラム中に各サブプログラムの連結情報（ポインタ情報）を分散させるとともに，ポインタ情報に記憶媒体識別子を入れることにより，他の記憶媒体へのコピー後は動作しないこととなり，しかも，ポインタ情報中の記憶媒体識別子やアドレスなどをプログラムで使用しているプログラム変数をパラメータとする関数から算出するので，ポインタ情報がサブプログラム中のどこにあるのかを解析することが非常に困難になり，不正なプログラムのコピーが非常に困難となる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態における情報処理装置のブロック図である。
【図２】本発明の第１の実施の形態における情報処理装置の動作について説明するフローチャートである。
【図３】本発明の第１の実施の形態における複数のサブシステムに分割されたプログラム構成方法の例である。
【図４】本発明の第１の実施の形態における複数のサブシステムに分割されたプログラム構成方法の例である。
【図５】本発明の第１の実施の形態における複数のサブシステムに分割されたプログラム構成方法の例である。
【図６】本発明の第２の実施の形態における情報処理装置のブロック図である。
【図７】本発明の第２の実施の形態における情報処理装置の動作について説明するフローチャートである。
【図８】本発明の第２の実施の形態における複数のサブシステムに分割されたプログラム構成方法である。
【図９】本発明の第３の実施の形態における情報処理装置のブロック図である。
【図１０】本発明の第３の実施の形態における情報処理装置の動作について説明するフローチャートである。
【図１１】本発明の第３の実施の形態における複数のサブシステムに分割されたプログラム構成方法である。
【符号の説明】
１０１  入力部
１０２  プログラム記憶部（１）
１０３  プログラム記憶部（２）
１０４  プログラム読み込み部
１０５，６０５，９０５  情報処理部
６０２  プログラム記憶部
９０２  プログラム記憶部（３）
９０３  プログラム記憶部（４）
【図１】
0004234825.tif 000002
【図２】
0004234825.tif 000003
【図３】
0004234825.tif 000004
【図４】
0004234825.tif 000005
【図５】
0004234825.tif 000006
【図６】
0004234825.tif 000007
【図７】
0004234825.tif 000008
【図８】
0004234825.tif 000009
【図９】
0004234825.tif 000010
【図１０】
0004234825.tif 000011
【図１１】
0004234825.tif 000012