装置に組み込まれるCPUが実行する制御ソフトウェアの検証装置であって、前記制御ソフトウェアを実行して前記CPUの動作を模擬するCPUシミュレータと、前記装置の前記CPUにより制御される機能の動作を模擬する外的要因シミュレータと、前記CPUシミュレータと前記外的要因シミュレータとの間で送受信される情報を伝達して、前記CPUシミュレータと前記外的要因シミュレータを連携動作させる連携手段と、を備えており、前記CPUシミュレータは、前記連携手段から通知された仮想アドレス空間のアドレスを含む通知対象アドレス範囲情報を有しており、前記制御ソフトウェアの実行によりアクセスするアドレスが、前記通知対象アドレス範囲情報に含まれるアドレスであると、アクセスするアドレスを前記連携手段に通知し、前記制御ソフトウェアの実行により関数コールが発生すると、該関数コールが発生したときのスタックポインタ値および該関数コールにより呼び出される関数を示す情報と共に該関数コールの発生を前記連携手段に通知し、前記連携手段は、前記制御ソフトウェアに含まれる各関数で宣言される領域不定変数の種別を示す領域不定変数情報と、領域不定変数に割り当てられる仮想アドレス空間のアドレスとスタックポインタ値との関係を領域不定変数の種別ごとに示す仕様情報とを有し、前記CPUシミュレータから通知された関数コールで呼び出される関数で宣言される領域不定変数に割り当てられるアドレスを、前記通知されたスタックポインタ値、前記仕様情報および前記領域不定変数情報から計算し、計算したアドレスを前記CPUシミュレータに通知する、ことを特徴とするソフトウェア検証装置。前記連携手段は、前記CPUシミュレータから通知された関数コールで呼び出された関数について、ネストの深さを示すネスト値を含む管理情報を保持しており、前記CPUシミュレータから第1の関数を呼び出す関数コールの通知を受けると、前記第1の関数のネスト値を実行中に対応する値に設定し、前記第1の関数で宣言される領域不定変数に割り当てられるアドレスの追加を前記CPUシミュレータに通知し、続いて、前記CPUシミュレータから第2の関数を呼び出す関数コールの通知を受けると、前記第2の関数のネスト値を実行中に対応する値に設定し、前記第1の関数のネスト値をネストの深さが1であることを示す値に変更し、前記第2の関数で宣言される領域不定変数に割り当てられるアドレスの追加と、前記第1の関数で宣言される領域不定変数に割り当てられたアドレスの削除を、前記CPUシミュレータに通知し、前記CPUシミュレータは、前記通知対象アドレス範囲情報に含まれるアドレスを、前記連携手段からの通知に応じて更新する、ことを特徴とする請求項1に記載のソフトウェア検証装置。前記管理情報は、各領域不定変数の種別を示す情報を含み、前記連携手段は、前記CPUシミュレータから前記第2の関数を呼び出す関数コールの通知を受けると、前記第1の関数で宣言される領域不定変数の種別に基づき、前記第1の関数で宣言される領域不定変数が前記第2の関数で有効であるか無効であるかを判定し、無効である領域不定変数に割り当てられたアドレスの削除を、前記CPUシミュレータに通知し、有効である領域不定変数に割り当てられたアドレスの削除を、前記CPUシミュレータに通知しない、ことを特徴とする請求項2に記載のソフトウェア検証装置。前記CPUシミュレータは、前記制御ソフトウェアの実行により関数リターンが発生すると、該関数リターンの発生を前記連携手段に通知し、前記連携手段は、前記CPUシミュレータから関数リターンの発生の通知を受けると、ネスト値から実行中の関数と、前記関数リターンの発生により実行中となる関数を判定し、実行中の関数で宣言される領域不定変数に割り当てられたアドレスの削除と、前記関数リターンの発生により実行中となる関数で宣言される領域不定変数に割り当てられたアドレスの追加を、前記CPUシミュレータに通知する、ことを特徴とする請求項2又は3に記載のソフトウェア検証装置。前記管理情報は、各領域不定変数のアドレス範囲についてのアドレス条件を示す情報を含み、前記連携手段は、領域不定変数に割り当てられるアドレスが該領域不定変数のアドレス条件に合致する場合、該領域不定変数に割り当てられるアドレスの追加を前記CPUシミュレータに通知し、合致しない場合、該領域不定変数に割り当てられるアドレスの追加を前記CPUシミュレータに通知しない、ことを特徴とする請求項2から4のいずれか1項に記載のソフトウェア検証装置。装置に組み込まれるCPUが実行する制御ソフトウェアの検証装置であって、前記制御ソフトウェアを解析して、領域不定変数の保存領域の確保命令を認識すると、該確保命令の通知命令を、該確保命令の前又は後ろに追加して、修正した制御ソフトウェアを出力する処理を行う前処理手段と、前記修正した制御ソフトウェアを実行して前記CPUの動作を模擬するCPUシミュレータと、前記装置の前記CPUにより制御される機能の動作を模擬する外的要因シミュレータと、前記CPUシミュレータと前記外的要因シミュレータとの間で送受信される情報を伝達して、前記CPUシミュレータと前記外的要因シミュレータを連携動作させる連携手段と、を備えており、前記CPUシミュレータは、前記連携手段から通知された仮想アドレス空間のアドレスを含む通知対象アドレス範囲情報を有しており、前記制御ソフトウェアの実行によりアクセスするアドレスが、前記通知対象アドレス範囲情報に含まれるアドレスであると、前記連携手段にアクセスするアドレスを通知し、前記制御ソフトウェアの実行により通知命令を読み出すと、該通知命令を読み出したときのスタックポインタ値と、該通知命令の前又は後の確保命令の対象である領域不定変数の種別を示す情報と共に領域確保イベントを前記連携手段に通知し、前記連携手段は、領域不定変数に割り当てられる仮想アドレス空間のアドレスとスタックポインタ値との関係を領域不定変数の種別ごとに示す仕様情報を有し、前記CPUシミュレータから通知された領域確保イベントに含まれるスタックポインタ値および変数の種別と、前記仕様情報から、該領域確保イベントに対応する通知命令の前又は後の確保命令の対象である領域不定変数に割り当てられるアドレスを計算し、計算したアドレスを前記CPUシミュレータに通知する、ことを特徴とするソフトウェア検証装置。請求項1から6のいずれか1項に記載のソフトウェア検証装置としてコンピュータを機能させることを特徴とするプログラム。シミュレーション連携システムにおいて、CPUシミュレータは、外的要因シミュレータに対する何らかの制御のために出力値等を変更する場合、例えば、仮想アドレス空間上の当該制御の出力値を保持するメモリにアクセスしてその値を書き換える。この値の書き換えを外的要因シミュレータに通知するため、CPUシミュレータは、外的要因シミュレータにメモリアクセスイベントの通知を行う。しかしながら、総てのメモリアクセス毎にイベント発生通知を行うと通信負荷が大きくなる。このため、外的要因シミュレータに通知が必要な制御対象に対応する仮想アドレス空間のアドレス範囲を定義しておき、CPUシミュレータは、定義されたアドレス範囲へのメモリアクセスのみを外的要因シミュレータに通知している。なお、この制御対象は、CPUで実行する制御ソフトウェアにおいては、通常、変数で記述されている。しかしながら、この場合、外的要因シミュレータにそのアクセスを通知すべき変数に割り当てられたアドレスを、シミュレーションの実行前に判定する必要がある。ここで、変数は、コンパイル時にメモリアドレスが割り当てられるグローバル変数と、プログラム実行中に動的にメモリアドレスが割り当てられる領域不定変数仮引数、ローカル変数などに分類することができる。領域不定変数のアドレス領域は、関数コールの前後に、通常はスタック領域上に確保される。具体的には、関数コール時のスタックポインタ値からの相対アドレスで、領域不定変数の保存領域が指定される。なお、スタックポインタ値は、関数コール毎に変わるため、領域不定変数の保存領域は実際にCPUが関数を実行するまで分からないことになる。よって、従来のシミュレーション連携システムでは領域不定変数を取り扱うことができなかった。本発明は、領域不定変数を使用する制御ソフトウェアの検証を行うソフトウェア検証装置及びプログラムを提供するものである。本発明によるソフトウェア検証装置は、装置に組み込まれるCPUが実行する制御ソフトウェアの検証装置であって、制御ソフトウェアを実行してCPUの動作を模擬するCPUシミュレータと、装置のCPUにより制御される機能の動作を模擬する外的要因シミュレータと、CPUシミュレータと外的要因シミュレータとの間で送受信される情報を伝達して、CPUシミュレータと外的要因シミュレータを連携動作させる連携手段と、を備えており、CPUシミュレータは、連携手段から通知された仮想アドレス空間のアドレスを含む通知対象アドレス範囲情報を有しており、制御ソフトウェアの実行によりアクセスするアドレスが、通知対象アドレス範囲情報に含まれるアドレスであると、アクセスするアドレスを連携手段に通知し、制御ソフトウェアの実行により関数コールが発生すると、該関数コールが発生したときスタックポインタ値および該関数コールにより呼び出される関数を示す情報と共に該関数コールの発生を連携手段に通知し、連携手段は、制御ソフトウェアに含まれる各関数で宣言される領域不定変数の種別を示す領域不定変数情報と、領域不定変数に割り当てられる仮想アドレス空間のアドレスとスタックポインタ値との関係を領域不定変数の種別ごとに示す仕様情報とを有し、CPUシミュレータから通知された関数コールで呼び出される関数で宣言される領域不定変数に割り当てられるアドレスを、通知されたスタックポインタ値、仕様情報および領域不定変数情報から計算し、計算したアドレスを前記CPUシミュレータに通知する、ことを特徴とする。また、本発明によるソフトウェア検証装置は、装置に組み込まれるCPUが実行する制御ソフトウェアの検証装置であって、制御ソフトウェアを解析して、領域不定変数の保存領域の確保命令を認識すると、該確保命令の通知命令を、該確保命令の前又は後ろに追加して、修正した制御ソフトウェアを出力する処理を行う前処理手段と、修正した制御ソフトウェアを実行してCPUの動作を模擬するCPUシミュレータと、装置のCPUにより制御される機能の動作を模擬する外的要因シミュレータと、CPUシミュレータと外的要因シミュレータとの間で送受信される情報を伝達して、CPUシミュレータと外的要因シミュレータを連携動作させる連携手段と、を備えており、CPUシミュレータは、連携手段から通知された仮想アドレス空間のアドレスを含む通知対象アドレス範囲情報を有しており、制御ソフトウェアの実行によりアクセスするアドレスが、通知対象アドレス範囲情報に含まれるアドレスであると、連携手段にアクセスするアドレスを通知し、制御ソフトウェアの実行により通知命令を読み出すと、該通知命令を読み出したときのスタックポインタ値と、該通知命令の前又は後の確保命令の対象である領域不定変数の種別を示す情報と共に領域確保イベントを前記連携手段に通知し、連携手段は、領域不定変数に割り当てられる仮想アドレス空間のアドレスとスタックポインタ値との関係を領域不定変数の種別ごとに示す仕様情報を有し、CPUシミュレータから通知された領域確保イベントに含まれるスタックポインタ値および変数の種別と、仕様情報から、該領域確保イベントに対応する通知命令の前又は後の確保命令の対象である領域不定変数に割り当てられるアドレスを計算し、計算したアドレスをCPUシミュレータに通知する、ことを特徴とする。連携手段が領域不定変数に割り当てられたアドレスを計算してCPUシミュレータに通知することで、シミュレーション連携システムにおいて領域不定変数を取り扱うことが可能となる。第一実施形態本発明においてソフトウェア検証装置は、コンピュータシステム201上でプログラムを実行することで実現でき、そのハードウェア構成を図2に示す。図2の本体部202のハードディスク202cには、ソフトウェア検証装置の各機能を実現するためのプログラムが格納される。中央処理部CPU202aは、プログラム及び各種データを主記憶部202bにロードして実行することで、コンピュータシステム201はソフトウェア検証装置として動作する。なお、表示装置203は、本体部202からの指示により画面表示を行う。また、キーボード204は、このコンピュータシステム201にユーザの指示や文字情報を入力するためのものである。さらに、マウス205は、表示装置203上の任意の位置を指定することによりその位置に表示されていたアイコン等に応じた指示を入力するためのものである。図1は、本実施形態によるソフトウェア検証装置360の機能ブロック図である。CPUシミュレータ310は、制御ソフトウェアを実行してターゲットCPUの動作を模擬するものである。また、外的要因シミュレータ350及び352は、ペリフェラル、つまり、ターゲットCPUに制御される周辺機器や機能ブロックの機能の動作を模擬するものである。さらに、ソフトウェア検証装置360は、CPUシミュレータ310と外的要因シミュレータ350及び352との間で送受信される情報の伝達を仲介して、これらを連携動作させる連携部330を備えている。なお、ターゲットCPUとは、コンピュータシステム201に搭載されているCPU202aではなく、制御ソフトウェアが実際に使用される装置のCPUである。また、図において、外的要因シミュレータ350及び352の数を2つとしているがこれは例示である。CPUシミュレータ310の命令実行部311は、検証対象である制御ソフトウェアを実行して、メモリや装置制御用のレジスタに値の読み書きを行う。情報格納部316は、ターゲットCPUの仮想アドレス空間を定義する情報を有している。仮想アドレス空間には、ターゲットCPUの主メモリだけではなく、制御対象のハードウェアへの制御信号に対応する値を書き込み、ハードウェアの状態を示す値を保持するレジスタも含まれている。さらに、仮想アドレス空間には、CPUの動作状態を一時保存する場所のアドレスを保持するスタックポインタも格納される。命令実行部311は、制御ソフトウェアのアクセス命令に従い、仮想アドレス空間の対応領域にアクセスする。命令実行部311は、特定の命令の実行時、IF部312経由で連携部330に、当該特定命令の実行をイベントとして通知する。ここで、特定の命令とは、例えば、仮想アドレス空間へのメモリアクセス、関数コール、関数リターン処理等である。なお、命令実行部311は、イベント通知後、連携部330から再開指示を受け取るまで、模擬処理を停止する。総てのメモリアクセスを連携部330に通知すると命令実行部311は、その都度処理を中断するため、模擬処理の実行速度が遅くなる。よって、情報格納部316は、連携部330に通知すべきメモリアクセスのアドレス範囲を示す通知対象アドレス範囲情報を保持している。つまり、CPUシミュレータ310は、通知対象アドレス範囲へのメモリアクセスが発生した場合のみ連携部330にメモリアクセスイベントを通知する。連携部330は、CPUシミュレータ310と、外的要因シミュレータ350及び352とで仮想アドレス空間の値を共有するためのものである。連携部330の管理部335に含まれる管理情報判定部340は、ユーザが予め作成した定義情報に基づき、管理情報の初期値を生成する。なお、管理情報とは、各変数の仮想アドレスと、外的要因シミュレータ350及び352において使用される変数IDとの対応関係を示す情報を含むものである。その後、管理情報判定部340は、CPUシミュレータからの関数コールイベントや関数リターンイベントの通知に応じて管理情報を更新する。なお、その際、算出部336が、領域不定変数に割り当てられるアドレスを算出する。出力部361は、管理情報の更新に伴いログを出力する。連携部330は、さらに、必要に応じて、外的要因シミュレータ350又は352に、CPUシミュレータ310が設定した値に対応する制御情報を通知する。IF部331は、CPUシミュレータ310とのインタフェース部であり、IF部338及び339は、それぞれ、外的要因シミュレータ350及び352とのインタフェースである。続いて定義情報について説明する。定義情報には、アドレスが変わらないグローバル変数の情報を含む領域不変変数情報と、アドレスが不定であり、必要に応じて割り当てられる領域不定変数に関する情報を含む領域不定変数情報と、コンパイラの仕様を示すコンパイラ仕様情報が含まれている。図3に、領域不変変数情報、領域不定変数情報及びコンパイラ仕様情報の例を示す。図3aは、領域不変変数情報である。なお、図3aにおいて、Sim310、351、352は、それぞれ、CPUシミュレータ310、外的要因シミュレータ351、352を示している。図3aに示す様に、領域不変変数情報は、各変数について、その名前、サイズ、割り当てられているアドレス、変数ID及び通信方向を示す情報を含んでいる。なお、変数IDとは、外的要因シミュレータ350、352で使用している識別子である。また、通信方向は、情報の方向を示すものであり、Inは入力のみを、Outは出力のみを行うことを示し、In/Outは入力も出力も行うことを示している。たとえば、変数g1の通信方向はCPUシミュレータ310がIn、外的要因シミュレータ350がOutであり、外的要因シミュレータ351が変数g1の値を更新すると、その値がCPUシミュレータ310に伝えられることになる。通信方向は、2つのシミュレータ間のみならず、例えば、図3aの変数g4の様に、3つ以上のシミュレータ間でも定義することができる。さらに、変数g5のように、Out定義のみを行うことも可能である。この場合、外的要因シミュレータ350が設定する変数g5の値は連携部330へ伝達されるが、連携部330から他のシミュレータには伝達されない。これは、変数g5の更新履歴をログとして出力するために使用する。さらに、変数g7の様に他プロセスとの通信を行わない設定も可能である。図3bは、領域不定変数情報であり、関数名と、その関数の実行コードが格納されている仮想アドレス空間の先頭のアドレスを示す情報と、その関数に関連する領域不定変数についての情報を含んでいる。ここで、領域不定変数についての情報は、変数名、サイズ及び種別を示す情報を含んでいる。なお、種別情報とは、当該変数が、仮引数、スタティック変数、ローカル変数であるといった情報、つまり、当該変数がどの関数で有効であるかといった有効範囲を示す情報である。図3cはコンパイラ仕様情報であり、関数コール時、その変数に対して割り当てられるメモリ領域、具体的には、スタックポインタ値に対するオフセット値又はオフセット値を特定するための情報が領域不定変数の種別ごとに格納される。例えば、変数がローカル変数であると、スタックポインタ値に3を加えたアドレスから、その変数のサイズを格納するだけのアドレス領域が当該変数に割り当てられることがコンパイラ仕様から判定することができる。この様に、算出部336は、領域不定変数情報及びコンパイラ仕様情報を保持し、連携部330が、CPUシミュレータ310から関数コールイベントの通知を受けると、呼び出された関数で宣言される領域不定変数に割り当てられるアドレスを算出する。また、管理情報判定部340は、領域不定変数情報を保持しており、CPUシミュレータ310から関数コールイベントの通知を受けると、算出部336が算出した領域不定変数のアドレスに基づき管理情報を更新する。関数コール処理の前後においては、関数コールに関する処理しか行われないため、領域不定変数に割り当てられるアドレスは、コンパイラ仕様により確定できる。したがって、CPUシミュレータ310からの関数コールイベントにより、領域不定変数に割り当てられるアドレスを動的に計算して管理情報を更新すると共に、計算したアドレスをCPUシミュレータ310に通知することで領域不定変数の取り扱いが可能となる。以下、図4及び図5のシーケンス図を用いてより具体的に説明する。なお、定義情報は、図3に示す通りであるものとする。シミュレーションの開始により、連携部330の管理情報判定部336は、S1において定義情報を読み込み、S2において管理情報を更新する。なお、S2においては、領域不変変数情報のみに基づき管理情報を更新する。したがって、S2の終了時点での管理情報は図6aの様になる。図に示す様に、連携部330は、領域不変変数情報に含まれる変数のうち、通信方向において入出力の定義が行われていない変数g7以外の変数g1~g6を管理情報に登録する。なお、値はこの時点では不定であるため、その旨を管理情報に設定する。また、図4のシーケンス図には示していないが、出力部361は、管理情報が更新されると、その内容をログとして出力する。図6bはS2の処理で、出力部1が出力するログ情報を示している。なお、ログ情報において時間はその値が更新されたシミュレーション上の時間を示している。続いて、連携部330は、S3において、管理情報に新たに追加された変数のうち、CPUシミュレータ310がアクセスする変数に対応するアドレスをCPUシミュレータ310に通知する。つまり、本例では、変数g1、g2、g4及びg5に対応するアドレスが通知される。なお、本例において、各アドレスには1バイトのデータが記憶されるものとする。また、CPUシミュレータ310が読み出しアクセスする変数、つまり、通信方向としてInが定義されている変数については、CPUシミュレータ310に通知しない構成とすることもできる。CPUシミュレータ310は、S4において、連携部330からの通知に基づき通知対象アドレス範囲情報を更新する。図6cはS4の処理の終了時点における通知対象アドレス範囲情報を示している。続いて、連携部330は、S5において、CPUシミュレータ310に模擬処理の開始を指示する。CPUシミュレータ310は、検証対象ソフトウェアの関数コール命令を読み出すと、S6において、関数コールイベントの発生を連携部330に通知する。このとき、関数のアドレス及びスタックポインタ値も通知する。連携部330の算出部336は、CPUシミュレータ310から関数コールイベントの通知を受けると、S7において、呼び出された関数第1の関数で宣言される領域不定変数のアドレスを算出する。具体的には、通知された関数のアドレスが0x1030であるため、領域不定変数情報より変数d1及びd2が特定される。領域不定変数情報から変数d1及びd2はローカル変数であり、コンパイラ仕様情報から、ローカル変数の開始アドレスは、スタックポインタ値からのオフセットが3である。したがって、算出部336は、領域不定変数情報で先に定義されている変数d1の開始アドレスを、通知されたスタックポインタ値に3を加えた0x4020と算出する。また、変数d1のサイズは2バイトであるため、算出部336は、変数d1の終了アドレスを0x4021と算出する。よって、算出部336は、変数d2の開始アドレスを、変数d1の1つ後である0x4022と算出し、変数d1も2バイトであるため、その終了アドレスを0x4023と算出する。その後、連携部330の管理情報判定部340は、S8において、呼び出された関数で宣言される領域不定変数についての情報を管理情報337に登録し、また、ログへ出力する。図7aは、S8における管理情報であり、図7bは、S8におけるログ情報である。図7aにおいて、初めての関数コールであるため、ネスト値には0が設定される。また、通信方向については、CPUシミュレータ310内での取り扱いのため、CPUシミュレータ310のみにOutを設定する。さらに、変数の値は不定とし、変数種別を、ローカル変数を表す値とする。また、ネスト値が0である関数が実行中の関数であり、実行中の関数に含まれる領域不定変数の状態は有効に設定される。その後、連携部330は、S9において、管理情報に追加したアドレスをCPUシミュレータ310に通知し、CPUシミュレータ310は、S10において、通知に基づき通知対象アドレス範囲情報を更新する。更新後の通知対象アドレス範囲を図7cに示す。S11において、CPUシミュレータ310の命令実行部311は、アドレス0x1FFFへのメモリアクセスを実行する。アドレス0xIFFFは、通知対象アドレス範囲に含まれていないため、このメモリアクセスは連携部330には通知されない。続いて、命令実行部311は、S12において、アドレス0x2000へのメモリアクセスを実行する。アドレス0x2000は、通知対象アドレス範囲に含まれているため、CPUシミュレータ310の命令実行部311は、S13において、このメモリアクセスを連携部330に通知する。連携部330は、CPUシミュレータ310からメモリアクセスイベントの通知を受けると管理情報を参照して、CPUシミュレータ310の通信方向を確認する。アドレス0x2000の通信方向は、Inであるため、CPUシミュレータ310のアクセスが読み出しである場合には、連携部330は、管理情報の対応するアドレスに設定されている値をCPUシミュレータ310に返送する図示せず。なお、CPUシミュレータ310のアクセスが書き込みある場合、連携部330は何もしない。続いて、CPUシミュレータ310の命令実行部311は、S14において、アドレス0x2030へのメモリアクセスを実行する。アドレス0x2030は、通知対象アドレス範囲に含まれているため、命令実行部311は、S15において、このメモリアクセスを連携部330に通知する。アドレス0x2030の通信方向はOutであるため、CPUシミュレータ310のアクセスが書き込みである場合、連携部330は、S16において、管理情報のCPUシミュレータ310から通知されたアドレスに対応する値を通知された値で更新する。なお、CPUシミュレータ310のアクセスが読み出しである場合、連携部330は何もしない。なお、管理情報の更新により出力部361はログを出力する。以後、アドレス0x4020、0x4022、0x5022への書き込みアクセスが発生したときの、管理情報、出力されるログ及び通知対象アドレス範囲情報をそれぞれ図8a、b及びcに示す。続いて、CPUシミュレータ310の命令実行部311は、関数コール命令を読み出したことにより、S17において、関数コールイベントの発生を連携部330に通知する。連携部330は、S18において、通知された関数第2の関数のアドレス及びスタックポインタ値に基づき領域不定変数に割り当てられるアドレスを算出する。つまり、連携部330は、通知された関数のアドレスから、呼び出された関数が関数Eであると判定し、関数Eの領域不定変数がローカル変数e1及びe2であることを認識する。さらに、連携部330は、ローカル変数e1及びe2がそれぞれ2及び8バイトであり、通知されたスタックポインタ値が0x4000であることを認識する。よって、連携部330は、変数e1のアドレスを0x4003~0x4004と算出し、変数e2のアドレスを0x4005~0x400Cと算出する。連携部330は、S19において、まずS18においてアドレスを計算した領域不定変数の情報を管理情報に加える。このとき、呼び出された関数のネスト値は0であり、その状態は有効とする。これに対して、既に管理情報に含まれている関数のネスト値を1だけ増加させ、これら関数は実行中ではなくなるため、これら関数に含まれる領域不定変数の状態を無効に変更する。なお、領域不定変数の種別により定まるスコープ範囲が、下位関数、つまり、呼び出された関数でも有効である場合には、状態を有効のままとする。図9aは、S19の処理の終了時点における管理情報であり、図9bは、S19におけるログ情報である。連携部330は、S20において、状態が無効となった変数d1及びd2のアドレスの削除と、S19において追加された変数e1及びe2のアドレスの追加をCPUシミュレータ310に通知する。CPUシミュレータ310は、連携部330からの通知に基づき、S21において、通知対象アドレス範囲情報を更新する。図9cは、S21の処理終了後の通知対象アドレス範囲情報である。命令実行部311は、関数リターン命令を読み出したことにより、S22において、関数リターンイベントの発生を連携部330に通知する。連携部330は、関数リターンイベントを受け取ると管理情報を更新する。具体的には、ネスト値が0である関数についての情報を管理情報から削除し、その他の総ての関数のネスト値を1だけ減少させる。また、1だけ減少させることによりネスト値が0となった関数の領域不定変数の状態を有効に変更する。図10aは、S23の処理の終了時点における管理情報であり、図10bは、S23におけるログ情報である。また連携部330は、管理情報の更新に伴い、領域不定変数のアドレス割り当ての変更内容をS24においてCPUシミュレータ310に通知する。CPUシミュレータ310は、連携部330からの通知に基づき、S25において、通知対象アドレス範囲情報を更新する。図10cは、S21の処理終了後の通知対象アドレス範囲情報である。以上の処理により、シミュレーション連携システムにおいて仮想アドレス空間の総てのアドレスへのアクセスを通知することなく、不定領域変数を取り扱うことが可能になる。また、ログ情報を出力することで、デバッグ効率を向上させることができる。なお、上述した実施形態では、関数コールのたびに、呼び出された関数で宣言される領域不定変数を管理情報に登録している。これは、同一の関数の再起呼出でも同じである。CPUシミュレータ310は、同一の関数の再起呼出を行う場合、以前に呼出したときの情報を保持したまま、新たな呼出しに対する領域を新たに確保する。よって、連携部330においても、呼び出された関数が既に管理情報に含まれているか否かを判定せず、その都度新たに登録を行う。図11は、再起呼出が発生しているときの管理情報を示している。図11は、関数Bが繰り返し呼び出されている状態を示しており、現在実行中の関数は、そのネスト値が0である関数Bである。この状態で、CPUシミュレータ310から関数リターンイベントを受信すると、ネスト値が0である関数Bの情報が削除される。また、その他の総ての関数のネスト値が1だけ減ぜられ、その結果、ネスト値が0となる関数Bが実行中の関数となり、その変数の状態が有効に変更される。なお、上述した実施形態において出力部361は、表形式でログ情報を出力していたが、任意の形式で出力が可能である。図12に、他の形態として、タイミングチャート形式でのログ情報を示す。また、上述した実施形態においては、時間情報と、有効又は無効を示す状態情報を含めているため、模擬処理終了後にログ情報を解析してグラフ化することができる。なお、模擬処理と並行してグラフ表示することも可能である。なお、上述した実施形態において領域不定変数の通信方向については、CPUシミュレータ310からの出力として定義していた。しかしながら、図3aの領域不変変数と同様に、領域不定変数情報に通信方向及び外的要因シミュレータ350及び352における変数IDを含めることで、外的要因シミュレータ350及び352が領域不定変数にアクセスすることが可能になる。さらに、CPUシミュレータ310が、領域不定変数を更新すると、その値の変更を外的要因シミュレータ350又は352に通知することが可能になる。図16にその場合の領域不定変数情報を示す。なお、アドレス条件については第三実施形態にて説明する。第二実施形態第一実施形態においては、予め作成した領域不定変数情報を連携部330が保持し、関数コールが発生すると、連携部330は領域不定変数情報に基づき呼び出された関数で宣言される領域不定変数が保存されるアドレスを算出していた。しかしながら、関数コールの度に領域不定変数のアドレスの算出を行うことは、処理負荷が高くなり得る。本実施形態は、連携部330での処理負荷が高くなることを防ぐものである。図13は、本実施形態によるソフトウェア検証装置の機能ブロック図である。図13に示す様に、本実施形態のソフトウェア検証装置は、制御ソフトウェアを入力して、修正制御ソフトウェアをCPUシミュレータ310に出力するソフトウェア前処理部720を第一実施形態の装置にさらに追加したものである。以下、第一実施形態との相違点を中心に説明する。制御ソフトウェアには、関数コールの前後に行う領域不定変数の保存領域を確保するための命令が含まれている。ソフトウェア前処理部720は、制御ソフトウェアを読み込んで、領域不定変数の格納領域の確保命令を認識すると、確保命令の前後いずれかに連携部330への通知命令を追加して、修正制御ソフトウェアとして出力する。CPUシミュレータ310は、メモリアクセス、関数コール及び関数リターンに加えて、修正制御ソフトウェアに追加された通知命令を読み出すと、そのときのスタックポインタ値と共に領域確保イベントを連携部330に通知する。このとき、当該通知命令の前後のいずれかにある確保命令の対象である領域不定変数のサイズ及び変数種別も併せて通知する。なお、領域確保前後のスタックポインタ値やコンパイラ仕様から、保存領域のサイズを算出することが可能であるため、領域確保のサイズを通知しない形態とすることもできる。図14は、本実施形態の検証処理のシーケンス図である。なお、定義情報に含まれる領域不変変数情報とコンパイラ仕様情報は、図3に示す通りであるものとする。シミュレーションの開始により、連携部330は、S30において定義情報を読み込み、S31において管理情報を更新する。このときの管理情報は、図6aと同じである。続いて、連携部330は、S32において、管理情報に新たに追加された変数のうち、CPUシミュレータ310がアクセスする変数に対応するアドレスをCPUシミュレータ310に通知する。つまり、本例では、変数g1、g2、g4及びg5に対応するアドレスが通知される。アドレスの通知によりCPUシミュレータ310は、S33において、通知対象アドレス範囲情報を更新する。また、連携部330は、S34において、CPUシミュレータ310に模擬処理の開始指示を行う。S35において命令実行部311がソフトウェア前処理部720により追加された通知命令を読み出すと、CPUシミュレータ310は、S36において、領域確保イベントを連携部330に通知する。このとき、CPUシミュレータ310は、その時点のスタックポインタ値、当該通知命令の前後のいずれかにある確保命令の対象である領域不定変数の種別及びサイズも併せて通知する。連携部330は、領域確保イベントの通知を受けると、S37において、管理情報に新規変数情報を追加する。図15aは、S37の処理の終了時点での管理情報である。なお、図15においては、簡略化のためグローバル変数の記載を省略している。S36の通知では、スタックポインタ値、変数の種別及びサイズしかわからないため、管理情報の関数名は不明とし、変数名も所定の規則により連携部330が付与する。図15においては、その変数が通知された順序に合わせて、変数名には1stを設定している。また、CPUシミュレータ310からの通知に基づき種別には仮引数を、サイズには2を設定している。さらに、通知されたスタックポインタ値及びコンパイラ仕様情報からアドレス値を算出して設定する。図15aにおいては、アドレス0x3FFAが設定されている。CPUシミュレータ310は、関数コール命令を読み出すと、S38において、関数コールイベントの発生を連携部330に通知する。このとき、関数のアドレス情報も併せて通知する。連携部330は、S39において、関数コールイベントと共に通知された関数のアドレス情報を管理情報の関数名に登録する様に更新する。図15bにS39の処理の終了時点における管理情報を示す。その後、連携部330は、S40において、CPUシミュレータ310にアドレス通知を行う。図においては、S37で追加したアドレスである0x3FFA~0x3FFBを通知し、これにより、CPUシミュレータ310は、S41において通知対象アドレス範囲情報を更新する。なお、S40のアドレス通知は、S37の後、関数コールイベントの通知を待たずに行う形態であってもよい。S42において命令実行部311がソフトウェア前処理部720により追加された通知命令を読み出すと、CPUシミュレータ310は、S43において、領域確保イベントを連携部330に通知する。連携部330は、領域確保イベントの通知を受けると、S44において、管理情報に新規変数情報を追加する。図15cは、S44の処理の終了時点での管理情報である。なお、関数は、直前に呼び出された関数を設定する。連携部330は、S45において、管理情報に新たに登録された変数のアドレス通知を行い、CPUシミュレータ310は、S46において、通知対象アドレス範囲情報を更新する。命令実行部311が、再度、関数コール命令を読み出すと、S47において、関数コールイベントの発生を連携部330に通知する。連携部330は、関数コールイベントの通知を受けると、S48において、関数コール前の領域不定変数を無効にし、コール後の関数で定義される領域不定変数を有効として管理情報に追加する。その後、連携部330は、S49において、無効とする変数のアドレスをCPUシミュレータ310に通知し、CPUシミュレータ310は、S50において、通知に基づき通知対象アドレス範囲情報を更新する。以上、連携部に領域不定変数情報を保持させることなく、CPUシミュレータ310にアクセス通知対象アドレス範囲として指定可能となる。なお、修正制御ソフトウェアの生成は、模擬処理前に行う形態とすることも、模擬処理中に並行して行う形態とすることもできる。第三実施形態本実施形態は、領域不定変数情報に、アドレス範囲についてのアドレス条件情報を追加し、アドレス条件情報が示す条件を満たす場合にのみ、管理情報に追加するものである。これにより、管理情報の更新回数を減らすことができ、ログ情報の出力も減らすことができる。図16に本実施形態での領域不定変数情報を示す。図16において、変数a1には、アドレス0x2000の値が1であり、かつ、アドレス0x2030の値が2であるとの条件が定義されており、この条件を満たす場合にのみ変数a1は管理情報に追加される。追加されたアドレスは、第一実施形態と同様に、通知対象アドレス範囲情報に追加させるために、CPUシミュレータ310に通知される。なお、変数a2の様に、複数の条件を設けることも可能である。変数a2には、3つの条件が設けられており、合致する条件に対応する通信方向で管理情報に追加されることになる。管理情報判定部340は、関数コールイベント及びリターンイベントに加えて、各シミュレータによるメモリアクセス通知時にもアドレス条件を判定する。なお、メモリアクセス通知時には、管理情報が有効である変数と、実行中の関数で定義されている領域不定変数に対してのみ結線条件の判定を行う。なお、総てのメモリアクセスに対してアドレス条件の合致を判定することにより処理負荷が増大しすぎるのであれば、メモリアクセスイベントにおけるアドレス条件の判定を省略することができる。尚、アドレス条件を変数ごとに定義したが、関数ごとに定義する構成とすることも可能である。これにより、アドレス条件の判定処理回数を変数ごとに条件を定義する場合と比較して削減できる。その他の実施形態また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェアプログラムを、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータまたはCPUやMPU等がプログラムを読み出して実行する処理である。