(57)【特許請求の範囲】
【請求項１】
ユーザプログラムから呼び出され所定の処理をコンピュータに実行させる機能プログラムと共に提供され、前記機能プログラムの起動時に当該機能プログラムから呼び出され当該機能プログラムの起動制御処理をコンピュータに実行させるコンピュータ読み取り可能な起動制御プログラムにおいて、
前記起動制御処理は、
前記コンピュータのプロセッサがデバッグ状態であるか否かのデバッグ状態判定を行い、前記デバッグ状態である場合に前記機能プログラムの起動を許可し、前記デバッグ状態ではない場合に前記機能プログラムの起動を停止する起動制御工程、を有する起動制御プログラム。
【請求項２】
請求項１において、
前記ユーザプログラムは組み込みシステムで実行され、
前記プロセッサは、当該プロセッサによって処理されるプログラムのデバッグを行うデバッグ装置と接続状態にあるときに、前記プロセッサのデバッグ情報レジスタにデバッグ状態であることを示す値を設定し、
前記デバッグ状態判定は、前記デバッグ情報レジスタの値に基づいて行われる起動制御プログラム。   
【請求項３】
請求項２において、
前記デバッグ情報レジスタは前記プロセッサの種別によって異なり、
第１の種別のプロセッサに対応する前記起動制御プログラムの前記デバッグ状態判定は、第１のデバッグ情報レジスタに基づいて行われ、第２の種別のプロセッサに対応する前記起動制御プログラムの前記デバッグ状態判定は、第２のデバッグ情報レジスタに基づいて行われる起動制御プログラム。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記機能プログラム及び前記起動制御プログラムが前記ユーザプログラムとコンパイル及びリンクされた実行形式プログラムが前記デバッグ状態のプロセッサで動作することによって、前記ユーザプログラムがデバッグされる起動制御プログラム。
【請求項５】
ユーザプログラムから呼び出され所定の処理をコンピュータに実行させる機能プログラムと共に提供され、前記機能プログラムの起動時に前記機能プログラムから呼び出され当該機能プログラムの起動制御処理をコンピュータに実行させるコンピュータ読み取り可能な起動制御プログラムにおいて、
前記機能プログラム及び前記起動制御プログラムは、ハードウェア記述言語によって記述されシミュレーション実行されるプロセッサモデルによって実行され、当該プロセッサモデルがアクセス可能なメモリにはデバッグ状態を示すデバッグ状態情報が予め記憶され、
前記起動制御処理は、
前記デバッグ状態情報が前記メモリに記憶される場合に前記機能プログラムの起動を許可し、前記デバッグ状態情報が記憶されない場合に前記機能プログラムの起動を停止する起動制御工程、を有する起動制御プログラム。
【請求項６】
請求項１乃至５のいずれかにおいて、
前記起動制御プログラムには、前記ユーザプログラムのデバッグ時に呼び出される評価版の起動制御プログラムと、製品版の起動制御プログラムとがあり、
前記評価版の起動制御プログラムには、製品版ライセンスキーと値が異なる第１の認証用ライセンスキーが記述され、
前記製品版の起動制御プログラムには、前記製品版ライセンスキーの値を有する第２の認証用ライセンスキーが記述され、
前記起動制御工程は、前記製品版ライセンスキーの値と、前記起動制御プログラムに記述される前記第１または第２の認証用ライセンスキーの値とを比較し、一致する場合に前記デバッグ状態判定を行わずに前記機能プログラムの起動を許可し、一致しない場合に前記デバッグ状態判定を行う起動制御プログラム。
【請求項７】
請求項６において、
前記起動制御プログラムは、前記第１または第２の認証用ライセンスキーの値が設定される編集可能なソースコードと、当該外部変数が参照される前記起動制御処理が機械語で記述される起動制御プログラムライブラリとを有し、
前記起動制御プログラムライブラリ及び前記ソースコードが、前記機能プログラムと前記ユーザプログラムとコンパイル及びリンクされた実行形式ファイルが前記プロセッサで動作する起動制御プログラム。
【請求項８】
請求項６または７のいずれかにおいて、
前記第２の認証用ライセンスキーは、前記製品版ライセンスキーに加えて、ユーザごとに異なるユーザ識別情報を有し、
前記起動制御工程における比較工程において、前記第２の認証用ラインセンスキーにおける前記ユーザ識別情報を除く前記製品版ライセンスキーの値が、前記製品版ライセンスキーの値と比較される起動制御プログラム。
【請求項９】
請求項１乃至５のいずれかにおいて、
前記起動制御プログラムには、前記ユーザプログラムのデバッグ時に呼び出される評価版の起動制御プログラムと、製品版の起動制御プログラムとがあり、
前記評価版の起動制御プログラムライブラリの前記起動制御処理は前記起動制御工程を行い、前記製品版の起動制御プログラムライブラリの前記起動制御処理は、前記起動制御工程を行わずに呼び出し元の前記機能プログラムに制御を戻す起動制御プログラム。
【請求項１０】
所定の処理をコンピュータに実行させる機能プログラムの起動制御方法であって、
前記機能プログラムの起動時に、前記コンピュータのプロセッサがデバッグ状態であるか否かのデバッグ状態判定を行い、前記デバッグ状態である場合に前記機能プログラムの起動を許可し、前記デバッグ状態ではない場合に前記機能プログラムの起動を停止する起動制御工程、を有する起動制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、起動制御プログラム、起動制御方法に関する。
【背景技術】
【０００２】
起動制御プログラムは、組み込みシステムで動作するソフトウェア（組み込みソフトウェア）であって、顧客に提供される組み込みソフトウェアの起動制御を行うプログラムである。例えば、顧客は、開発対象の組み込みシステムで使用する、音声の圧縮等の所定の機能を備える組み込みソフトウェアを購入する場合、評価版の組み込みソフトウェアによって機能評価を行う。評価版の組み込みソフトウェアの顧客への提供方法には、大きくふたつの方法がある。
【０００３】
１つ目の方法は、製品版の組み込みソフトウェアの機能の一部を制限したものを評価版として顧客に提供する方法である。この場合、評価の結果、顧客が購入を決定したとき、提供側は、製品版の組み込みソフトウェアを顧客に提供する。
【０００４】
しかしながら、この方法によると、評価版の組み込みソフトウェアの機能が一部制限されていることにより、顧客は、対象の組み込みソフトウェアについて十分な評価を行うことができない。また、評価版の組み込みソフトウェアと、製品版の組み込みソフトウェアとが個別に存在することになり、提供側にとっても組み込みソフトウェアの管理が煩雑化するという問題がある。
【０００５】
２つ目の方法は、評価目的でのみ組み込みソフトウェアの使用を許諾する旨の契約に従って、評価用として、製品版の組み込みソフトウェアを顧客に提供する方法である。この場合、顧客が購入を決定したとき、提供側は再度、製品版の組み込みソフトウェアを提供しなおす必要がない。
【０００６】
しかしながら、この方法によると、購入前に製品版の組み込みソフトウェアが顧客に提供されるため、悪意のある未購入の顧客が、評価用として提供された組み込みソフトウェアを出荷対象の製品に組み込むことを可能にしてしまう。また、評価用として提供された組み込みソフトウェアが組み込まれた製品を検出することも困難である。
【０００７】
そこで、機能制限によらず、ファイルシステムやネットワークシステム等の機能を利用することによって、評価版の組み込みソフトウェアの起動制限を行う仕組みが提案されている（例えば、特許文献１）。これにより、評価版の組み込みソフトウェアが製品に組み込まれることを防いでいる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平９−１７９７３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、組み込みソフトウェアが動作する組み込みシステムでは、ファイルシステムやネットワークの機能を備えていない場合があり、これらの機能を使用した起動制限の仕組みが実現できないことがある。組み込みシステムの機能に依存しない起動制限の仕組みが望ましい。
【００１０】
本発明は、評価版の組み込みソフトウェアの不正使用を簡易に防止する起動制御プロブラム、起動制限方法を提供することにある。
【課題を解決するための手段】
【００１１】
第１の側面は、ユーザプログラムから呼び出され所定の処理をコンピュータに実行させる機能プログラムと共に提供され、前記機能プログラムの起動時に当該機能プログラムから呼び出され当該機能プログラムの起動制御処理をコンピュータに実行させるコンピュータ読み取り可能な起動制御プログラムにおいて、前記起動制御処理は、前記コンピュータのプロセッサがデバッグ状態であるか否かのデバッグ状態判定を行い、前記デバッグ状態である場合に前記機能プログラムの起動を許可し、前記デバッグ状態ではない場合に前記機能プログラムの起動を停止する起動制御工程、を有する。
【発明の効果】
【００１２】
第１の側面によれば、評価版の組み込みソフトウェアの不正使用を簡易に防止される。
【図面の簡単な説明】
【００１３】
【図１】本実施の形態例における組み込みソフトウェアの生成環境であるコンピュータと、実行形式ファイルがデバッグされる環境である製品ボードとを表す例図である。
【図２】実行形式ファイルの生成及び組み込みを説明するフローチャート図である。
【図３】機能プログラムの評価用としてユーザに提供されるファイルを説明する図である。
【図４】起動制御プログラムライブラリの処理の流れを説明するフローチャート図である。
【図５】起動制御プログラムライブラリとラインセンスキー記載ソースコードの記述の一例を表す図である。
【図６】評価版の実行形式ファイルの生成処理の流れを説明する図である。
【図７】製品版の実行形式ファイルの生成処理の流れを説明する図である。
【発明を実施するための形態】
【００１４】
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１５】
［コンピュータ及びデバッグ装置の構成図］
図１は、本実施の形態例における組み込みソフトウェア（実行形式ファイル）３０の生成環境であるコンピュータ１００と、実行形式ファイル３０がデバッグされる環境である製品ボード３００とを表す例図である。実行形式ファイル３０は、組み込みシステムで動作する組み込みソフトウェアである。
【００１６】
また、本実施の形態例において、図１のコンピュータ１００で生成される実行形式ファイル３０には、評価版と製品版とがある。評価版の実行形式ファイル３０は、例えば、ユーザプログラム２０のデバッグ、または、機能プログラム１１の評価を目的として用いられるプログラムである。一方、製品版の実行形式ファイル３０は、例えば、製品として出荷される製品ボード（図示せず）に組み込まれるプログラムである。
【００１７】
［コンピュータ１００の構成］
図１において、コンピュータ１００は実行形式ファイル３０を生成しデバッグするＩＤＥ（Integrated Development Environment）１１０と、実行形式ファイル３０を生成時に入力とする各ファイルを有する。ＩＤＥ１１０はソフトウェアの開発環境を示し、コンパイラ及びリンカ１１１、デバッガ１１２を有する。コンパイラは、Ｃ言語等のプログラミング言語で記述されたソースコードのプログラムを、コンピュータが実行可能な機械語のプログラムに変換するソフトウェアである。また、リンカは、機械語のプログラムを結合し実行形式のプログラムを作成する。
【００１８】
デバッガ１１２は、実行形式ファイル３０のデバッグ処理を行う。図１の例において、デバッガ１１２は、ＩＣＥ２００を介して製品ボード３００に搭載されたＬＳＩ３１０のプロセッサ３１２と接続される。そして、ユーザによるデバッガ１１２への操作指示によって、プロセッサ３１２によって実行される実行形式ファイル３０のデバッグを行う。デバッガ１１２は、例えば、実行形式ファイル３０の処理の開始や一時停止等の実行制御や、実行形式ファイル３０の実行時にプロセッサ３１２に保持されるレジスタの値の参照等を可能にする。
【００１９】
本実施の形態例において、機能プログラムライブラリ１１、起動制御プログラムライブラリ１２、ライセンスキー記載ソースコード１３は、評価用の機能プログラムとしてユーザに提供されるプログラムファイル１０である。機能プログラムライブラリ１１は、ユーザプログラム２０から呼び出され所定の機能を実現し、起動制御プログラムライブラリ１２は、機能プログラムライブラリ１１の起動制御を行う。
【００２０】
機能プログラムライブラリ１１は、例えば、音声の圧縮機能や、暗号化機能等の所定の機能を実現する。以下、機能プログラムライブラリ１１を販売する者を提供者、購入する顧客をユーザと称する。機能プログラムライブラリ１１の各機能は、一般的に、機能プログラムライブラリ１１のＡＰＩ（Application Programming Interface）がユーザプログラム２０から呼び出されることによって使用される。また、起動制御プログラムライブラリ１２は、機能プログラムライブラリ１１の起動開始時に、機能プログラムライブラリ１１から呼び出され、機能プログラムライブラリ１１の起動処理の許可または、停止を行うプログラムである。
【００２１】
また、ライセンスキー記載ソースコード１３には、認証用ライセンスキーの値が設定される。ライセンスキー記載ソースコード１３の認証用ライセンスキーの値には、初め、評価版の認証用ライセンスキーの値が記述される。ライセンスキー記載ソースコード１３で設定される認証用ライセンスキーの値は、起動制御プログラムライブラリ１２の起動制御処理によって参照され、実行形式ファイル３０が製品版であるか評価版であるかが判定される。詳細については、後述する。
【００２２】
この例において、機能プログラムライブラリ１１及び起動制御プログラムライブラリ１２は、ライブラリまたはオブジェクト等の機械語の形式でユーザに提供される。一方、ライセンスキー記載ソースコード１３は、ユーザによって編集可能な形式で提供される。
【００２３】
また、ユーザプログラム２０は、ユーザによって生成されるプログラムであり、ソースコード及びヘッダファイルの形式であっても良いし、オブジェクトやライブラリ等の形式であってもよい。
【００２４】
本実施の形態例において、図１のコンパイラ及びリンカ１１１は、ユーザプログラム２０、及び、機能プログラムライブラリ１１、起動制御プログラムライブラリ１２、ライセンスキー記載ソースコード１３を入力としてコンパイル及びリンクを行い、１つの実行形式ファイル３０を生成する。このとき、ライセンスキー記載ソースコード１３に評価版の認証用ライセンスキーの値が設定されている場合、評価版の実行形式ファイル３０が生成される。
【００２５】
本実施の形態例において、評価版の実行形式ファイル３０は、図１の評価用の製品ボード３００に搭載されたＬＳＩ（Large Scale Integration）３１０のようなデバッグ環境でのみ機能プログラムライブラリ１１の起動が許可される。また、本実施の形態例において、実行形式ファイル３０が製品版であるか評価版であるかの判定は、実行形式ファイル３０の生成時に入力とされるライセンスキー記載ソースコード１３に記述される認証用ライセンスキーの値に基づいて行われる。処理の詳細については、後述する。
【００２６】
［評価用の製品ボード３００の説明］
図１において、評価用の製品ボード３００はＬＳＩ３１０を搭載し、ＩＣＥ２００を介してコンピュータ１００のデバッガ１１２と接続される。デバッガ１１２とＩＣＥ２００とは、例えば、ＵＳＢ規格に基づいた信号線２０１で接続され、ＩＣＥ２００と製品ボード３００とは、例えば、ＪＴＡＧ規格に基づく信号線２０２で接続される。また、ＬＳＩ３１０は、プロセッサ３１２、ＲＯＭ／ＲＡＭ３１１、周辺回路（図示せず）等を有し、各構成部はバス３１３によって接続される。ＲＯＭ／ＲＡＭ３１１には、コンピュータ１００のＩＤＥ１１０で生成された評価版の実行形式ファイル３０が記憶され、プロセッサ３１２によって読み出され実行される。
【００２７】
また、一般的に、プロセッサ３１２は、当該プロセッサ３１２がデバッグ状態であるか否かを示す情報を保持するデバッグ情報レジスタＲｇを有する。製品ボード３００のプロセッサ３１２がデバッガ１１２と接続状態にある場合、デバッグモード（デバッグ状態）となり、デバッガ１１２によるプロセッサ３１２の制御を許可する。このとき、プロセッサ３１２のデバッグ情報レジスタＲｇの値は、デバッグ状態を示す値に設定される。
【００２８】
組み込みシステムにおける組み込みソフトウェアの検証は、通常、デバッガ１１２によって行われる。そこで、本実施の形態例における起動制御プログラムは、デバッガ１１２と接続状態にあるか否かを示すプロセッサ３１２のデバッグ情報レジスタＲｇを利用して、組み込みソフトウェアの検証中であるか否かを判定する。そして、起動制御プログラムは、組み込みソフトウェアが検証のために実行されているときにのみ、評価用として提供された機能プログラムライブラリ１１の起動を許可する。一方、起動制御プログラムは、プロセッサ３１２がデバッガ１１２と接続されておらず非デバッグ状態であるときは、組み込みソフトウェアの検証中ではないと判定し、評価用として提供された機能プログラムライブラリ１１の起動処理を停止する。
【００２９】
続いて、評価版及び製品版の実行形式ファイル３０を生成し、システムに組み込む処理の流れについて説明する。
【００３０】
図２は、評価版の実行形式ファイル３０、製品版の実行形式ファイル３０をそれぞれ生成し、システムに組み込む処理について説明するフローチャート図である。
【００３１】
［評価版の実行形式ファイル３０を組み込む処理の流れ］
図２の（Ａ）は、評価版の実行形式ファイル３０を生成しユーザの組み込みシステムに組み込む処理の流れを説明する図である。前述したとおり、機能プログラムの評価用として、ユーザに、機能プログラムライブラリ１１、起動制御プログラムライブラリ１２、評価版用の認証ライセンスキーが記載されたライセンスキー記載ソースコード１３等の提供ファイル１０が提供される。そして、ユーザは、ユーザプログラム２０と提供ファイル１０とをコンパイル及びリンクし、評価版の実行形式ファイル３０を生成する（Ｓ１１）。
【００３２】
続いて、ユーザは、デバッガ１１２を、ＩＣＥ２００を介して製品ボード３００のプロセッサ３１２と接続する（Ｓ１２）。製品ボード３００のＬＳＩ３１０が搭載するプロセッサ３１２がデバッガ１１２と接続状態になると、プロセッサ３１２のデバッグ情報レジスタＲｇがデバッグ状態を示す値に変更される。例えば、具体的に、デバッグ情報レジスタＲｇの値が非デバッグモードを示す値０からデバッグモードを示す値１に変更される。そして、コンピュータ１００のＩＤＥ１１０で生成された評価版の実行形式ファイル３０は、ＩＣＥ２００を介して、ＬＳＩ３１０のＲＯＭ／ＲＡＭ３１１等のメモリにロードされる（Ｓ１３）。
【００３３】
そして、ユーザは、デバッガ１１２からの操作によって、ＬＳＩ３１０のＲＯＭ／ＲＡＭ３１１に記憶された評価版の実行形式ファイル３０をプロセッサ３１２に実行させる（Ｓ１４）。評価版の実行形式ファイル３０が実行されるとき、実行形式ファイル３０内の起動制御プログラムによって、本実施の形態例における起動制御処理が行われる。起動制御処理の詳細については、後述する。
【００３４】
このように、評価版の実行形式ファイル３０が生成され、評価版の実行形式ファイル３０内の機能プログラムライブラリ１１及びユーザプログラムの処理が検証される。続いて、製品版の実行形式ファイル３０について説明する。
【００３５】
［製品版の実行形式ファイル３０を組み込む処理の流れ］
図２の（Ｂ）は、製品版の実行形式ファイル３０を生成しユーザの組み込みシステムに組み込む処理の流れを説明する図である。評価版の実行形式ファイル３０の生成と同様にして、ユーザは、ユーザプログラム２０と提供ファイル１０とをコンパイル及びリンクして、製品版の実行形式ファイル３０を生成する（Ｓ２１）。ただし、ライセンスキー記載ソースコード１３については、評価版の実行形式ファイル３０生成時と内容が異なる。製品版の実行形式ファイル３０の生成時、ライセンスキー記載ソースコード１３の認証用ライセンスキーの値には、製品版ライセンスキーの値が記述される。
【００３６】
続いて、ユーザは、製品版の実行形式ファイル３０を製品出荷用のＬＳＩのＲＯＭ（図示せず）に書き込む（Ｓ２２）。そして、ユーザは、ＬＳＩを搭載する製品ボードの電源を投入することによって、製品版の実行形式ファイル３０を開始させる。製品版の実行形式ファイル３０が実行されるときも同様にして、実行形式ファイル３０内の起動制御プログラムによって、本実施の形態例における起動制御処理が行われる。起動制御処理の詳細については、後述する。
【００３７】
続いて、機能プログラムの評価用としてユーザに提供される各ファイルについて説明する。
【００３８】
図３は、機能プログラムの評価用としてユーザに提供される機能プログラムライブラリ１１、起動制御プログラムライブラリ１２、ライセンスキー記載ソースコード１３の生成について説明する図である。各ファイルは、提供側によって生成される。
【００３９】
［機能プログラムライブラリ１１］
まず、機能プログラムライブラリ１１について説明する。機能プログラムライブラリ１１は、例えば、所定の機能を実現する処理を記述した１つまたは複数のソースコード及びヘッダファイル１１−１〜１１−ｎに基づいて生成される。
【００４０】
提供側は、機能プログラムライブラリ１１について、機能プログラムライブラリ１１の起動開始時に起動制御プログラムライブラリ１２のＡＰＩが呼び出されるように命令を追加する。このため、提供側は、例えば、既存の機能プログラムライブラリ１１に対して、本実施の形態例における起動制限処理を組み込む場合、機能プログラムライブラリ１１に起動制御プログラムライブラリ１２のＡＰＩを呼び出す命令を追加するだけでよい。これにより、最小限の記述変更によって、既存の機能プログラムライブラリ１１に起動制限処理が組み込まれる。
【００４１】
そして、提供側は、機能プログラムライブラリ１１を構成する各ソースコード及びヘッダファイル１１−１〜１１−ｎをコンパイル及びリンクすることにより、機能プログラムライブラリ１１を生成する。前述したとおり、機能プログラムライブラリ１１は機械語に変換されていることにより、ユーザによる、記述内容に基づく処理内容の検知や、処理内容の改ざんが防止される。
【００４２】
［起動制御プログラムライブラリ１２］
起動制御プログラムライブラリ１２は、この例では、起動制御処理を記述する１つのソースコード１２ｓ及び、１つのヘッダファイル１２ｈに基づいて生成される。提供側は、ソースコード１２ｓ及びヘッダファイル１２ｈをコンパイル及びリンクして、機械語の起動制御プログラムライブラリ１２を生成する。起動制御プログラムライブラリ１２についても、機械語に変換されていることにより、ユーザによる、記述内容に基づく処理内容の検知や、処理内容の改ざんが防止される。起動制御プログラムライブラリ１２の処理の詳細については、ソースコード１２ｓ、ヘッダファイル１２ｈの記述例と共に後述する。
【００４３】
なお、本実施の形態例において、機能プログラム、及び、起動制御プログラムは、ライブラリの形式で提供されているが、オブジェクトの形式で提供されてもよい。
【００４４】
［ライセンスキー記載ソースコード１３］
また、ライセンスキー記載ソースコード１３には、認証用ライセンスキーの値が設定される。ライセンスキー記載ソースコード１３で設定された認証用ライセンスキーの値は、起動制御プログラムライブラリ１２によって参照され、製品版ライセンスキーの値と比較される。評価版の実行形式ファイル３０の生成時に入力とされるライセンスキー記載ソースコード１３では、認証用ライセンスキーの値に、製品版ライセンスキーと異なる値が設定される。製品版ライセンスキーと異なる値とは、即ち、ダミーの値である。一方、製品版の実行形式ファイル３０の生成時に入力とされるライセンスキー記載ソースコード１３では、認証用ライセンスキーの値に、製品版ライセンスキーの値が設定される。
【００４５】
続いて、起動制御プログラムライブラリ１２の行う起動制御処理の流れについて説明する。
【００４６】
図４は、起動制御プログラムライブラリ１２の起動制御処理について説明するフローチャート図である。前述したとおり、実行形式ファイル３０の起動制御プログラムライブラリ１２は、機能プログラムライブラリ１１の起動処理の開始時に呼び出される。
【００４７】
起動制御プログラムライブラリ１２は、機能プログラムライブラリ１１から呼び出されると、まず、ライセンスキー記載ソースコード１３で設定された認証用ライセンスキーの値が、製品版ライセンスキーの値と一致するか否かを判定する（Ｓ１）。これにより、実行形式ファイル３０が、評価版として生成された実行形式ファイル３０か、または、製品版として生成された実行形式ファイル３０かが判定される。
【００４８】
認証用ライセンスキーの値が製品版ライセンスキーの値と一致する場合（Ｓ１のＹＥＳ）、処理中の実行形式ファイル３０は、製品版の実行形式ファイル３０であると判定される。このため、起動制御プログラムライブラリ１２は、機能プログラムライブラリ１１の起動処理の続行を許可する。
【００４９】
一方、一致しない場合（Ｓ１のＮＯ）、処理中の実行形式ファイル３０は、評価版の実行形式ファイル３０であると判定される。そこで、起動制御プログラムライブラリ１２は、続いて、プロセッサ３１２がデバッグ状態であるか否かを判定する（Ｓ２）。具体的に、起動制御プログラムライブラリ１２は、プロセッサ３１２が有するデバッグ情報レジスタＲｇの値に基づいて、プロセッサ３１２がデバッグ状態であるか否かを判定する。デバッグ情報レジスタＲｇの値がデバッグ状態を示す場合（Ｓ２のＹＥＳ）、評価版の実行形式ファイル３０がデバッグ環境で動作していることが確認される。そこで、起動制御プログラムライブラリ１２は、機能プログラムライブラリ１１の起動を許可する。
【００５０】
一方、デバッグ情報レジスタＲｇの値が非デバッグ状態を示す場合（Ｓ２のＮＯ）、評価版の実行形式ファイル３０が、デバッグ環境以外の環境で動作していることを示す。この場合、評価用として提供された機能プログラムライブラリ１１が、不正に、出荷用の製品ボード等の非デバッグ環境で動作する実行形式ファイル３０に組み込まれている可能性がある。このため、起動制御プログラムライブラリ１２は、機能プログラムライブラリ１１の起動を許可せず、起動を停止させる（Ｓ３）。
【００５１】
このように、評価版の実行形式ファイル３０がデバッグ環境以外の環境で動作する場合、機能プログラムライブラリ１１の起動が停止される。このようにして、実行中の実行形式ファイル３０が、評価版として生成された実行形式ファイル３０と判定された場合、プロセッサ３１２がデバッグ状態であるときのみ、機能プログラムライブラリ１１の起動を許可する。これにより、評価用として提供された機能プログラムライブラリ１１が、出荷用の製品に不正に組み込まれることを防ぐ。
【００５２】
一方、実行形式ファイル３０が製品版の実行形式ファイル３０と判定された場合（Ｓ１のＹＥＳ）、起動制御プログラムライブラリ１１は、デバッグ状態のプロセッサ３１２によって処理されているか否かの判定をスキップして、機能プログラムライブラリ１１の起動を許可する。これにより、製品版の実行形式ファイル３０については、非デバッグ環境での動作が可能となる。
【００５３】
続いて、移動制御プログラムライブラリ及びライセンスキー記載ソースコード１３の一例を図４のフローチャート図の工程に対応させて説明する。
図５は、起動制御プログラムライブラリ１２とラインセンスキー記載ソースコード１３の記述の一例を表す図である。この例において、起動制御プログラムライブラリ１２は、ソースコード「ｓｔａｒｔ．ｃ」１２ｓと、ヘッダファイル「ｓｔａｒｔ．ｈ」１２ｈとがコンパイル及びリンクされることによって生成される。
【００５４】
起動制御プログラムライブラリ１２のメイン関数は、関数ｓｔａｒｔ_ｃｈｅｃｋ（ｖｏｉｄ）Ｍｎであり、機能プログラムライブラリ１１の起動開始時に、機能プログラムライブラリ１１から呼び出される。まず、関数ｓｔａｒｔ_ｃｈｅｃｋ（ｖｏｉｄ）Ｍｎのコードｃ１では、認証用ライセンスキーの製品版ライセンスキーとの比較が行われる。具体的に、ライセンスキー記載ソースコード１３で設定された認証用ライセンスキーを保持する外部変数ｌｉｃｋｅｙの値が、定数ＬＩＣＥＮＳＥ＿ＫＥＹとして定義された製品版ライセンスキーの値と一致するか否かが判定される（図４のＳ１）。なお、ソースコード１２ｓにおけるコードｃ５は、変数ｌｉｃｋｅｙが外部変数であることを示す。
【００５５】
図５のライセンスキー記載ソースコード１３には、認証用ライセンスキーをセットする外部変数ｌｉｃｋｅｙが宣言されると共に、当該外部変数に値０ｘ１２３４５６７８がセットされる。また、同図のヘッダファイル１２ｈでは、製品版ライセンスキーの値０ｘ８７６５１２３４を示す定数ＬＩＣＥＮＳＥ＿ＫＥＹが定義される。図５の例において、外部変数ｌｉｃｋｅｙに設定された認証用ライセンスキーの値は、定数ＬＩＣＥＮＳＥ＿ＫＥＹの示す製品版ライセンスキーの値と一致しない（図４のＳ１のＮＯ）。したがって、関数ｓｔａｒｔ_ｃｈｅｃｋ（ｖｏｉｄ）Ｍｎにおけるコードｃ２に処理が遷移し、デバッグ状態判定を行う関数ｄｅｂｕｇｇｅｒ＿ｃｈｅｃｋ（ｖｏｉｄ）Ｓｂが呼び出される。
【００５６】
関数ｄｅｂｕｇｇｅｒ＿ｃｈｅｃｋ（ｖｏｉｄ）Ｓｂでは、プロセッサ３１２のデバッグ情報レジスタＲｇの値がデバッグ状態を示すか否かが判定される（図４のＳ２）。同図の例では、デバッグ情報レジスタＲｇの値は、ＲｅｇＤｅｂｕｇ−＞ＤＭＯＤＥのように参照される。また、この例では、デバッグ情報レジスタＲｇの値０ｘ００００００００は非デバッグ状態を、値０ｘ０００００００１はデバッグ状態であることを示す。このため、例えば、デバッグ情報レジスタＲｇの値が０ｘ００００００００のとき、非デバッグ状態と判定され（図４のＳ２のＮＯ）、変数ｒｅｔに値-１がセットされる。一方、デバッグ情報レジスタＲｇの値が例えば０ｘ０００００００１のとき、デバッグ状態と判定され（図４のＳ２のＹＥＳ）、変数ｒｅｔの値に初期値０が維持される。
【００５７】
変数ｒｅｔにセットされた値は、ｒｅｔｕｒｎ命令によって関数ｄｅｂｕｇｇｅｒ＿ｃｈｅｃｋ（）Ｓｂの戻り値として、呼び出し元の関数ｓｔａｒｔ_ｃｈｅｃｋ（ｖｏｉｄ）Ｍｎの変数ｒｅｔｘにセットされる（ｃ２）。これにより、変数ｒｅｔｘには、デバッグ状態を示す場合に値０が、非デバッグ状態を示す場合に値−１がセットされる。
【００５８】
続いて、コードｃ３に遷移し、変数ｒｅｔｘの値に基づいて、機能プログラムライブラリ１１の停止処理を行うか否かが判定される。変数ｒｅｔｘの値が０より小さい場合、即ち、非デバッグ状態の場合、機能プログラムライブラリ１１の停止処理を行う関数ｒｅｓｅｔ（）が呼び出される（図４のＳ３）。一方、変数ｒｅｔｘの値が０以上の場合、即ち、デバッグ状態を示す場合、関数ｒｅｓｅｔ（）は呼び出されず、機能プログラムライブラリ１１の起動が許可される。そして、コードｃ４に遷移し、関数ｒｅｓｅｔ（）の呼び出しの有無に関わらず、ｒｅｔｕｒｎ命令によって、起動制御プログラムライブラリ１２の処理が終了する。これにより、呼び出し元である機能プログラムライブラリ１１の処理に制御が戻る。
【００５９】
このように、実行形式ファイル３０（起動制御プログラム）に記述された認証用ライセンスキーの値に基づいて、評価版の実行形式ファイル３０（起動制御プログラム）であると判定された場合に、プロセッサ３１２がデバッグ状態であるか否かの判定が行われる。そして、評価版の実行形式ファイル３０である場合、プロセッサ３１２がデバッグ状態であるときは機能プログラムライブラリ１１の起動が許可され、非デバッグ状態であるときは、機能プログラムライブラリ１１の起動が停止される。これにより、評価版の実行形式ファイル３０は、デバッグ状態を示すプロセッサでのみ動作する。
【００６０】
また、関数ｓｔａｒｔ_ｃｈｅｃｋ（ｖｏｉｄ）Ｍｎのコードｃ１において、変数ｌｉｃｋｅｙに設定された認証用ライセンスキーの値と、製品版ライセンスキーＬＩＣＥＮＳＥ＿ＫＥＹの値とが一致する場合（図４のＳ１のＹＥＳ）、関数ｄｅｂｕｇｇｅｒ＿ｃｈｅｃｋ（ｖｏｉｄ）Ｓｂは呼び出されず、コードｃ４のｒｅｔｕｒｎ命令文に遷移する。この場合、機能プログラムライブラリ１１の起動が許可されることを示す。
【００６１】
このように、実行形式ファイルに記述された認証用ライセンスキーの値に基づいて、製品版の実行形式ファイル３０であると判定されたとき、デバッグ状態判定は行われず、機能プログラムライブラリ１１の起動処理の継続が許可される。これは、例えば、図５のライセンスキー記載ソースコード１３において、外部変数ｌｉｃｋｅｙに値０ｘ８７６５１２３４がセットされる場合を示す。
【００６２】
なお、図５の起動制御プログラムライブラリ１２の例では、デバッグ情報レジスタＲｇをＲｅｇＤｅｂｕｇ−＞ＤＭＯＤＥのように参照する。しかし、プロセッサ３１２のデバッグ情報レジスタＲｇの名前及び参照方法は、プロセッサ３１２の種別によって異なる。また、デバッグ情報レジスタＲｇの値が示す意味についても、プロセッサ３１２の種別によって異なる。そのため、起動制御プログラムライブラリ１２では、まず、プロセッサ３１２の種別を判別し、判別したプロセッサ３１２の種別に応じた方法によってデバッグ情報レジスタＲｇを参照してもよい。
【００６３】
または、プロセッサ３１２の種別ごとに起動制御プログラムライブラリ１２が用意されてもよい。この場合、それぞれの起動制御プログラムライブラリ１２は、対応するプロセッサ３１２種別に応じた方法に基づいてデバッグ情報レジスタＲｇの値を参照する。このため、ある種別のプロセッサ３１２を対象としてユーザに提供された起動制御プログラムライブラリ１２は、別の種別のプロセッサ３１２では動作しない。これにより、特定のプロセッサ３１２種別を対象としてユーザに提供された評価用の機能プログラムライブラリ１１が、別の種別のプロセッサ３１２において流用されることを防ぐことができる。
【００６４】
なお、前述したとおり、認証用ライセンスキーの値を保持する変数ｌｉｃｋｅｙは、外部変数として定義される。ライセンスキー記載ソースコード１３では外部変数の宣言及び値の設定が行われ、起動制御プログラムライブラリ１２において、ライセンスキー記載ソースコード１３で設定された外部変数の値が参照される。
【００６５】
この点について、外部変数を参照するソースコードをコンパイルする場合、当該外部変数の設定値が合わせて入力される必要はない。つまり、外部変数ｌｉｃｋｅｙを参照する起動制御プログラムライブラリ１２のソースコード１２ｓをコンパイル及びリンクする場合、外部変数ｌｉｃｋｅｙが定義されるライセンスキー記載ソースコード１３が合わせてコンパイル及びリンクの入力とされる必要がない。このため、提供側は、起動制御プログラムライブラリ１２をコンパイル及びリンクする時に、ライセンスキー記載ソースコード１３を入力とする必要がない。ライセンスキー記載ソースコード１３は、実行形式ファイル３０の生成時に入力とされればよい。
【００６６】
これにより、起動制御プログラムライブラリ１２と、ライセンスキー記載ソースコード１３とは、別のファイルとしてユーザに提供可能になる。これにより、起動制御プログラムライブラリ１２は、機械語に変換されたライブラリまたはオブジェクトとしてユーザに提供可能になり、ライセンスキー記載ソースコード１３については、編集可能なファイル形式でユーザに提供可能となる。
【００６７】
これにより、本実施の形態例における起動制御プログラムは、起動制御プログラムライブラリ１２の処理内容、及び、製品版ライセンスキーＬＩＣＥＮＳＥ＿ＫＥＹの値をユーザから検知不可にすることができる。また、ライセンスキー記載ソースコード１３が記述変更可能であることにより、ユーザは、ライセンスキー記載ソースコード１３の認証用ライセンスキーの値を製品版ライセンスキーの値に変更して、製品版の実行形式ファイル３０を簡易に生成することができる。
【００６８】
続いて、評価用として提供されたファイルに基づいて、ユーザが製品版の実行形式ファイル３０を生成する処理の流れについて説明する。製品版の実行形式ファイル３０の生成について説明する前に、まず、機能プログラムライブラリ１１の評価用として提供されたファイルの生成と、当該提供ファイルに基づく製品版の実行形式ファイル３０の生成について説明する。
【００６９】
［評価版の実行形式ファイル生成時の流れ］
図６は、機能プログラムの評価用として提供されるファイルに基づく評価版実行形式ファイルの生成について説明する図である。
【００７０】
前述したとおり、提供側は、機能プログラムライブラリ１１の起動時に起動制御プログラムライブラリ１２のＡＰＩの呼び出し命令を追加した機能プログラムライブラリ１１を構成する各ソースコード及びヘッダファイル１１−１〜１１−ｎをコンパイル及びリンクし、機能プログラムライブラリ１１を生成する。提供側は、機能プログラムライブラリ１１への最小限の記述変更によって、既存の機能プログラムライブラリ１１に起動制限処理を組み込むことができる。同様にして、提供側は、起動制御プログラムライブラリ１２を構成するソースコード１２ｓ、ヘッダファイル１２ｈをコンパイル及びリンクし、起動制御プログラムライブラリ１２を生成する。
【００７１】
そして、機能プログラムの評価用として、ユーザに、図６の点線内の機能プログラムライブラリ１１、起動制御プログラムライブラリ１２、ライセンスキー記載ソースコード１３が提供される。このとき、ライセンスキー記載ソースコード１３の認証用ライセンスキーの値には、ダミー値が設定されている。ユーザは、機能プログラムライブラリ１１の評価用として提供されたファイル１０に加えて、ユーザプログラム２０を入力としてコンパイル及びリンクし、評価版の実行形式ファイル３０Ａを生成する。
【００７２】
［製品版の実行形式ファイル生成時の流れ］
次に、機能プログラムライブラリ１１の評価用として提供された各ファイルに基づいて、製品版の実行形式ファイル３０Ｂを生成する処理について説明する。
【００７３】
図７は、製品版の実行形式ファイル３０Ｂの生成処理の流れを説明する図である。ユーザが機能プログラムを購入すると、提供側は、口頭または文書等によって、製品版ライセンスキーの値をユーザに通知する。そして、ユーザは、ライセンスキー記載ソースコード１３に記載された認証用ライセンスキーの値を、通知された製品版ライセンスキーの値に変更する。または、提供側は、製品版ライセンスキーの値が記述されたライセンスキー記載ソースコード１３αをユーザに提供しなおしてもよい。
【００７４】
そして、ユーザは、機能プログラムライブラリ１１、起動制御プログラムライブラリ１２、製品版ライセンスキーの値が記述されたライセンスキー記載ソースコード１３αに加えて、ユーザプログラム２０を入力としてコンパイル及びリンクし、製品版の実行形式ファイル３０Ｂを生成する。これにより、ユーザは、ライセンスキー記載ソースコード１３の認証用ライセンスキーの値を変更し、起動制御プログラムライブラリ１２及び機能プログラムライブラリ１１、ユーザプログラム２０とコンパイル及びリンクし直すだけで、製品版の実行形式ファイル３０Ｂを簡易に生成することができる。
【００７５】
製品版ライセンスキーの値は、機能プログラムライブラリ１１を購入したユーザに対して通知されるため、製品版ライセンスキーが通知されたユーザだけが製品版の実行形式ファイル３０を生成することができる。そして、製品版の実行形式ファイル３０では、デバッグ状態判定が行われないため、ユーザは、出荷用の製品等の非デバッグ環境のシステムに製品版の実行形式ファイル３０を組み込むことができる。
【００７６】
このように、本実施の形態例における起動制御プログラムは、機能プログラムライブラリ１１の評価用として提供されたファイルのうち、ライセンスキー記載ソースコード１３の記述を変更してコンパイル及びリンクし直すことにより、簡易に製品版の実行形式ファイル３０Ｂを生成することができる。このとき、提供側は、機能プログラムライブラリ１１の製品用として、別途、ファイルをユーザに提供し直す必要がない。このため、提供側がユーザに提供するプログラムの種類が最小限に抑えられ、提供するプログラムの管理が容易になる。
【００７７】
また、本実施の形態例において、機能プログラムライブラリ１１と、起動制御プログラムライブラリ１２とは、別のプログラムとしてユーザに提供される。これにより、ライセンスキー記載ソースコード１３の認証用ライセンスキーの値が変更され再コンパイル及びリンクされる場合であっても、機能プログラムライブラリ１１に変更が発生しない。機能プログラムライブラリ１１が評価時と同一であることが保証されるため、ユーザは、製品版の実行形式ファイル３０Ｂを生成したとき、製品版の実行形式ファイル３０Ｂの機能プログラムライブラリ１１を再検証する必要がない。
【００７８】
また、本実施の形態例において、起動制御処理が記述される起動制御プログラムライブラリ１２は、機械語の形式でユーザに提供される。このため、起動制御処理の内容、及び、製品版ライセンスキーの値がユーザに検知されることが回避される。
【００７９】
さらに、本実施の形態例の起動制御プログラムにおいて、認証用ライセンスキーの値は、実行形式ファイル３０のパラメータファイルではなく、実行形式ファイル３０に組み込まれるソースコード１３に記載される。これにより、実行形式ファイル３０が１つのファイルとして生成され、実行形式ファイル３０の処理時に他のファイル（例えば、パラメータファイル）へのアクセス処理が発生しない。このため、本実施の形態例における起動制御プログラムは、組み込みシステムがファイルシステムを搭載していない場合であっても、起動制御処理を実現することができる。
【００８０】
これに対し、認証用ライセンスキーの値が、実行形式ファイル３０のパラメータファイル等に記述される場合、実行形式ファイル３０の処理時に、実行形式ファイル３０によるパラメータファイルへのアクセス処理が発生する。このため、組み込みシステムにはファイルシステムが搭載されている必要があり、ファイルシステムを搭載していない組み込みシステムに起動制御処理を適用することができない。
【００８１】
［起動制御プログラムライブラリ１２の置き換え］
製品版の実行形式ファイル３０は、別の方法に従って生成されてもよい。この場合、起動制御プログラムライブラリ１２が、図７に示した空処理の起動制御プログラムライブラリ１２αに置き換えられる。そして、ユーザは、空処理の起動制御プログラムライブラリ１２αと、機能プログラムライブラリ１１とユーザプログラム２０とをコンパイル及びリンクして、製品版の実行形式ファイル３０Ｂを生成する。
【００８２】
空処理の起動制御プログラムライブラリ１２αは、具体的に、図４のフローチャート図に示した処理を行わず、即座に呼び出し元の機能プログラムライブラリ１１に制御を戻すプログラムである。起動制御プログラムライブラリ１２αでは認証用ライセンスキーの比較処理が行われないため、製品版の実行形式ファイル３０Ｂの生成時に、ライセンスキー記載ソースコード１３は必要ない。
【００８３】
機能プログラムライブラリ１１の起動時に、起動制御プログラムライブラリ１２αが呼び出されると、起動制御プログラムライブラリ１２αは、即座に呼び出し元の機能プログラムライブラリ１１に制御を戻す。このため、製品版の実行形式ファイル３０は、非デバッグ環境でも動作可能となる。また、空処理の起動制御プログラムライブラリ１２αは実質的な処理を行わないため、機能プログラムライブラリ１１の起動にかかる時間が短縮され、処理効率が向上する。
【００８４】
また、機能プログラムライブラリ１１と起動制御プログラムライブラリ１２αとは、別のプログラムとしてユーザに提供されているため、起動制御プログラムライブラリ１２が起動制御プログラムライブラリ１２αに置き換えられた場合であっても、機能プログラムライブラリ１１に変更が発生しない。機能プログラムライブラリ１１が評価時と同一であることが保証されるため、ユーザは、製品版の実行形式ファイル３０Ｂを生成したとき、製品版の実行形式ファイル３０Ｂの機能プログラムライブラリ１１を再検証する必要がない。
【００８５】
［認証用ライセンスキーによる流出元ユーザの特定］
ところで、ユーザが機能プログラムライブラリ１１の購入時に、提供側から通知される認証用の製品版ライセンスキーの値は、ユーザごとに異なってもよい。この場合、ユーザに通知される認証用の製品版ライセンスキーの値は、製品版ライセンスキーの値０ｘ８７６５１２３４に加えて、ユーザを特定するためのユーザ識別値（例えば、０ｘ１〜０ｘ９）を有する。例えば、ユーザ識別情報は、認証用の製品版ライセンスキー値のうち上位の所定ビットに対応する。
【００８６】
図４のフローチャート図において、起動制御プログラムライブラリ１２は、工程Ｓ１において、認証用ライセンスキーの値のうち、ユーザごとに値の異なる上位の所定ビットを除く値を製品版ライセンスキーの値と比較する。そして、認証用ライセンスキーのうち上位の所定ビットを除く値が製品版ライセンスキーの値と一致した場合に（図４のＳ１のＹＥＳ）、製品版の実行形式ファイル３０であるものと判定する。
【００８７】
これにより、ユーザに通知した認証用の製品版ライセンスキーが流出した場合、提供側は、当該認証用の製品版ライセンスキーにおけるユーザ識別値に基づいて、流出元のユーザを容易に特定することができる。
【００８８】
以上のように、機能プログラム（機能プログラムライブラリ１１）の起動時に当該機能プログラムから呼び出され、機能プログラムの起動制御を行う、本実施の形態例における起動制御プログラム（起動制御プログラムライブラリ１２）は、プロセッサ３１２がデバッグ状態であるか否かのデバッグ状態判定を行い、デバッグ状態である場合に、機能プログラムの起動を許可し、デバッグ状態ではない場合に機能プログラムの起動を停止する。
【００８９】
これにより、起動制御プログラムは、評価用として提供された機能プログラムが非デバッグ状態の環境で起動することを防ぎ、出荷用の製品に組み込まれることを防止することができる。即ち、起動制御プログラムは、評価版の組み込みソフトウェアの不正使用を簡易に防止することができる。
【００９０】
また、本実施の形態例における起動制御プログラムは、機能プログラムについて、機能プログラムの起動開始時に起動制御プログラムのＡＰＩを呼び出す命令を追加するだけで起動制御処理の実装を可能にする。これにより、既存の機能プログラムに対する記述変更を最小限に抑えることができる。
【００９１】
また、本実施の形態例における起動制御プログラムにおいて、プロセッサ３１２は、当該プロセッサ３１２によって処理されるプログラムのデバッグを行うデバッグ装置と接続状態にあるときに、デバッグ情報レジスタＲｇにデバッグ状態であることを示す値を設定する。そして、デバッグ情報レジスタＲｇの値に基づいてデバッグ状態判定が行われる。これにより、起動制御プログラムは、デバッグ装置と接続されたプロセッサ３１２によって処理される場合にのみ、機能プログラムの起動を許可することができる。
【００９２】
また、本実施の形態例における起動制御プログラムにおいて、デバッグ情報レジスタＲｇはプロセッサ３１２の種別によって異なり、第１の種別のプロセッサ３１２に対応する起動制御プログラムのデバッグ状態判定は第１のデバッグ情報レジスタＲｇに基づいて行われ、第２の種別のプロセッサ３１２に対応する起動制御プログラムのデバッグ状態判定は、第２のデバッグ情報レジスタＲｇに基づいて行われる。これにより、本実施の形態例における起動制御プログラムは、所定の種別のプロセッサ３１２に向けてユーザに提供した機能プログラムが、別の種別のプロセッサ３１２で利用されることを防止できる。これにより、本実施の形態例における起動制御プログラムは、評価用として提供した機能プログラムが不正流用されることを防ぐことができる。
【００９３】
さらに、本実施の形態例における起動制御プログラムにおいて、機能プログラム及び起動制御プログラムが、機能プログラムを呼び出すユーザプログラム２０とコンパイル及びリンクされた実行形式プログラム３０がデバッグ状態のプロセッサ３１２で動作することによって、ユーザプログラム２０がデバッグされる。組み込みシステムにおいて、ユーザプログラム２０の検証は、一般的にデバッガによって行われる。つまり、本実施の形態例における起動制御プログラムは、機能プログラムを呼び出すユーザプログラム２０の検証時にのみ、機能プログラムの起動を許可することができる。
【００９４】
さらに、本実施の形態例における起動制御プログラムには、ユーザプログラム２０のデバッグ時に使用される評価版の起動制御プログラムと、製品版の起動制御プログラムとがある。評価版の起動制御プログラムには、製品版ライセンスキーと値が異なる第１の認証用ライセンスキーが記述され、製品版の起動制御プログラムには、製品版ライセンスキーの値を有する第２の認証用ライセンスキーが記述される。そして、起動制御プログラムは、製品版ライセンスキーの値と起動制御プログラムに記述された第１または第２の認証用ライセンスキーの値とを比較し、一致する場合にデバッグ状態判定を行わずに機能プログラムの起動を許可し、一致しない場合にデバッグ状態判定を行う。
【００９５】
これにより、本実施の形態例における起動制御プログラムでは、起動制御プログラムに記述された認証用ライセンスキーの値に基づいて、評価版か製品版のいずれかの起動制御プログラムであるかが判定される。起動制御プログラムに記述された認証用ライセンスキーの値が製品版ライセンスキーの値と一致するとき、製品版の起動制御プログラムであると判定され、デバッグ状態判定がスキップされる。これにより、製品版の起動制御プログラムの場合は、プロセッサ３１２が非デバッグ状態であっても、機能プログラムの起動が許可される。
【００９６】
また、起動制御プログラムに記述された認証用ライセンスキーの値が製品版ライセンスキーの値と一致しないとき、評価版の起動制御プログラムであると判定され、デバッグ状態判定が行われる。これにより、評価版の起動制御プログラムの場合、プロセッサ３１２がデバッグ状態である場合にのみ機能プログラムの起動が許可される。
【００９７】
このように、本実施の形態例における起動制御プログラムは、評価用として提供された機能プログラムを有する評価版の実行形式ファイルが出荷用の製品に組み込まれることを簡単に防止できる。そして、本実施の形態例における起動制御プログラムは、製品版の実行形式ファイル３０を簡易に生成可能にすると共に、機能プログラムの起動を非デバッグ環境でも許可する。これにより、本実施の形態例における起動制御プログラムは、評価版の組み込みソフトウェアの不正使用を簡単に防止しながら、製品に組み込み可能な製品版のソフトウェアを簡易に生成させることができる。
【００９８】
さらに、本実施の形態例における起動制御プログラムは、第１または第２の認証用ライセンスキーの値が外部変数として設定される編集可能なソースコード（ライセンスキー記載ソースコード）と、当該外部変数が参照される起動制御処理が機械語で記述される起動制御プログラムとを有する。そして、起動制御プログラム及びソースコードが、機能プログラムとユーザプログラム２０とコンパイル及びリンクされた実行形式ファイルがプロセッサ３１２で動作する。
【００９９】
これにより、起動制御プログラムは機械語に変換されたライブラリまたはオブジェクトとして、ソースコードは編集可能なファイルとして、ユーザに別ファイルとして提供可能となる。これにより、ユーザは、ソースコードにおける認証用ライセンスキーの値を変更し、当該ソースコードを、起動制御プログラム、機能プログラム、ユーザプログラム２０とコンパイル及びリンクし直すだけで、非デバッグ環境でも機能プログラムを起動可能な製品版の起動制御プログラムを簡易に生成することができる。また、起動制御プログラムは機械語に変換されているため、製品版ライセンスキーの検知が防止される。
【０１００】
［シミュレーション環境における起動制御処理］
上記の例では、製品ボード３００に搭載されたＬＳＩ３１０が有するプロセッサ３１２によって実行形式ファイル３０が実行され、機能プログラムの起動が制御される場合を例示した。しかしながら、本実施の形態例における起動制御プログラムは、実行形式ファイル３０が、ハードウェア記述言語によって記述され、コンピュータ１００のシミュレータ（図示せず）によってシミュレーション実行されるプロセッサモデルによって実行される場合についても有効である。
【０１０１】
図１のＬＳＩ３１０に搭載されるプロセッサ３１２と同様にして、ハードウェア記述言語によって記述されるプロセッサモデルについても、同様にして、プロセッサモデルがデバッグ状態であるか否かを示す情報を保持するデバッグ情報レジスタＲｇを有する。そして、シミュレーション実行されるプロセッサモデルがデバッガ１１２と接続状態にあるとき、プロセッサモデルのデバッグ情報レジスタＲｇの値がデバッグ状態を示す値に設定される。
【０１０２】
これにより、本実施の形態例における起動制御プログラムは、デバッグ情報レジスタＲｇの値に基づいてプロセッサモデルがデバッグ状態であるか否かのデバッグ状態判定を行う。そして、起動制御プログラムは、プロセッサモデルがデバッグ状態である場合に、機能プログラムの起動を許可し、デバッグ状態ではない場合に機能プログラムの起動を停止する。
【０１０３】
または、本実施の形態例における起動制御プログラムは、次のようにデバッグ状態判定を行ってもよい。そもそも、プロセッサモデルによって実行形式ファイル３０が処理される場合、デバッグ環境であることを示す。そのため、起動制御プログラムは、実行形式ファイル３０がプロセッサモデルによって実行されるとき、デバッグ環境であると判定してもよい。
【０１０４】
この場合、プロセッサモデルがアクセス可能なＲＯＭ（Read Only Memory）等のメモリには、プロセッサモデルによって処理されることを示すデバッグ状態情報が予め記憶される。そして、本実施の形態例における起動制御プログラムは、デバッグ状態情報がメモリに記憶される場合に機能プログラムライブラリ１１の起動を許可し、記憶されない場合に機能プログラムライブラリ１１の起動を停止する。
【０１０５】
このように、本実施の形態例における起動制御プログラムは、実行形式ファイル３０がプロセッサモデルによって実行されているか否かを判定することにより、デバッグ状態判定を行うことができる。したがって、本実施の形態例における起動制御プログラムは、プログラムがプロセッサモデルによって処理される場合であっても、評価用として提供された機能プログラムが非デバッグ環境で起動することを防止し、出荷用の製品に組み込まれることを防止することができる。
【０１０６】
以上の実施の形態をまとめると、次の付記のとおりである。
【０１０７】
（付記１）
ユーザプログラムから呼び出され所定の処理をコンピュータに実行させる機能プログラムと共に提供され、前記機能プログラムの起動時に当該機能プログラムから呼び出され当該機能プログラムの起動制御処理をコンピュータに実行させるコンピュータ読み取り可能な起動制御プログラムにおいて、
前記起動制御処理は、
前記コンピュータのプロセッサがデバッグ状態であるか否かのデバッグ状態判定を行い、前記デバッグ状態である場合に前記機能プログラムの起動を許可し、前記デバッグ状態ではない場合に前記機能プログラムの起動を停止する起動制御工程、を有する起動制御プログラム。
【０１０８】
（付記２）
付記１において、
前記ユーザプログラムは組み込みシステムで実行され、
前記プロセッサは、当該プロセッサによって処理されるプログラムのデバッグを行うデバッグ装置と接続状態にあるときに、前記プロセッサのデバッグ情報レジスタにデバッグ状態であることを示す値を設定し、
前記デバッグ状態判定は、前記デバッグ情報レジスタの値に基づいて行われる起動制御プログラム。
【０１０９】
（付記３）
付記２において、
前記デバッグ情報レジスタは前記プロセッサの種別によって異なり、
第１の種別のプロセッサに対応する前記起動制御プログラムの前記デバッグ状態判定は、第１のデバッグ情報レジスタに基づいて行われ、第２の種別のプロセッサに対応する前記起動制御プログラムの前記デバッグ状態判定は、第２のデバッグ情報レジスタに基づいて行われる起動制御プログラム。
【０１１０】
（付記４）
付記１乃至３のいずれかにおいて、
前記機能プログラム及び前記起動制御プログラムが前記ユーザプログラムとコンパイル及びリンクされた実行形式プログラムが前記デバッグ状態のプロセッサで動作することによって、前記ユーザプログラムがデバッグされる起動制御プログラム。
【０１１１】
（付記５）
ユーザプログラムから呼び出され所定の処理をコンピュータに実行させる機能プログラムと共に提供され、前記機能プログラムの起動時に前記機能プログラムから呼び出され当該機能プログラムの起動制御処理をコンピュータに実行させるコンピュータ読み取り可能な起動制御プログラムにおいて、
前記機能プログラム及び前記起動制御プログラムは、ハードウェア記述言語によって記述されシミュレーション実行されるプロセッサモデルによって実行され、当該プロセッサモデルがアクセス可能なメモリにはデバッグ状態を示すデバッグ状態情報が予め記憶され、
前記起動制御処理は、
前記デバッグ状態情報が前記メモリに記憶される場合に前記機能プログラムの起動を許可し、前記デバッグ状態情報が記憶されない場合に前記機能プログラムの起動を停止する起動制御工程、を有する起動制御プログラム。
【０１１２】
（付記６）
付記１乃至５のいずれかにおいて、
前記起動制御プログラムには、前記ユーザプログラムのデバッグ時に呼び出される評価版の起動制御プログラムと、製品版の起動制御プログラムとがあり、
前記評価版の起動制御プログラムには、製品版ライセンスキーと値が異なる第１の認証用ライセンスキーが記述され、
前記製品版の起動制御プログラムには、前記製品版ライセンスキーの値を有する第２の認証用ライセンスキーが記述され、
前記起動制御工程は、前記製品版ライセンスキーの値と、前記起動制御プログラムに記述される前記第１または第２の認証用ライセンスキーの値とを比較し、一致する場合に前記デバッグ状態判定を行わずに前記機能プログラムの起動を許可し、一致しない場合に前記デバッグ状態判定を行う起動制御プログラム。
【０１１３】
（付記７）
付記６において、
前記起動制御プログラムは、前記第１または第２の認証用ライセンスキーの値が設定される編集可能なソースコードと、当該外部変数が参照される前記起動制御処理が機械語で記述される起動制御プログラムライブラリとを有し、
前記起動制御プログラムライブラリ及び前記ソースコードが、前記機能プログラムと前記ユーザプログラムとコンパイル及びリンクされた実行形式ファイルが前記プロセッサで動作する起動制御プログラム。
【０１１４】
（付記８）
付記６または７のいずれかにおいて、
前記第２の認証用ライセンスキーは、前記製品版ライセンスキーに加えて、ユーザごとに異なるユーザ識別情報を有し、
前記起動制御工程における比較工程において、前記第２の認証用ラインセンスキーにおける前記ユーザ識別情報を除く前記製品版ライセンスキーの値が、前記製品版ライセンスキーの値と比較される起動制御プログラム。
【０１１５】
（付記９）
付記１乃至５のいずれかにおいて、
前記起動制御プログラムには、前記ユーザプログラムのデバッグ時に呼び出される評価版の起動制御プログラムと、製品版の起動制御プログラムとがあり、
前記評価版の起動制御プログラムライブラリの前記起動制御処理は前記起動制御工程を行い、前記製品版の起動制御プログラムライブラリの前記起動制御処理は、前記起動制御工程を行わずに呼び出し元の前記機能プログラムに制御を戻す起動制御プログラム。
【０１１６】
（付記１０）
所定の処理をコンピュータに実行させる機能プログラムの起動制御方法であって、
前記機能プログラムの起動時に、前記コンピュータのプロセッサがデバッグ状態であるか否かのデバッグ状態判定を行い、前記デバッグ状態である場合に前記機能プログラムの起動を許可し、前記デバッグ状態ではない場合に前記機能プログラムの起動を停止する起動制御工程、を有する起動制御方法。
【符号の説明】
【０１１７】
１００：コンピュータ、１０：提供ファイル、１１：機能プログラムライブラリ、１２：起動制御プログラムライブラリ、１３：ライセンスキー記載ソースコード、２０：ユーザプログラム、３０：実行形式ファイル
【図１】
0005821720.tif 000002
【図２】
0005821720.tif 000003
【図３】
0005821720.tif 000004
【図４】
0005821720.tif 000005
【図５】
0005821720.tif 000006
【図６】
0005821720.tif 000007
【図７】
0005821720.tif 000008