(57)【特許請求の範囲】
【請求項１】
コンピュータが、
前記コンピュータで実行されるプログラムのプロセスに割り当てられる第一メモリ空間に対応する第二メモリ空間に、前記プロセスを停止させるか否かを示す停止情報を記憶する記憶部を有し、
前記プロセスにおいて命令が実行された場合に、該命令が記憶されている前記第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に基づいて、前記プロセスを停止させるか否かを判定する判定ステップと、
前記実行された命令が前記第一メモリ空間内でデータを代入する代入命令である場合に、前記データの代入先となる第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の情報を、該データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に更新する更新ステップと
を実行することを特徴とする解析方法。
【請求項２】
前記更新ステップは、
前記実行された命令が前記第一メモリ空間に記憶されている第一データと第二データとの演算結果を該第二データが記憶されていた領域に代入する演算代入命令である場合に、前記第二データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間を、前記第一データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間内の停止情報に更新する
ことを特徴とする請求項１に記載の解析方法。
【請求項３】
前記更新ステップは、
前記実行された命令が前記第一メモリ空間に即値を代入する代入命令である場合に、該即値の代入先となる第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間に記憶されている停止情報を削除する
ことを特徴とする請求項１又は２に記載の解析方法。
【請求項４】
前記判定ステップは、
前記実行された命令に対応する停止情報が前記プロセスを停止させることを示す場合に、該プロセスを停止させるとともに、前記第一メモリ空間に記憶されている情報と該命令の内容と該停止情報とを含むプロセス情報を出力する
ことを特徴とする請求項１〜３のいずれか一つに記載の解析方法。
【請求項５】
コンピュータで実行されるプログラムの解析又は解析の支援を行う解析装置であって、
前記プログラムのプロセスに割り当てられる第一メモリ空間に対応する第二メモリ空間を有し、該第二メモリ空間に前記プロセスを停止させるか否かを示す停止情報を記憶する記憶部と、
前記プロセスにおいて命令が実行された場合に、該命令が記憶されている前記第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に基づいて、前記プロセスを停止させるか否かを判定する判定部と、
前記実行された命令が前記第一メモリ空間内でデータを代入する代入命令である場合に、前記データの代入先となる第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の情報を、該データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に更新する更新部と
を有することを特徴とする解析装置。
【請求項６】
コンピュータで実行されるプログラムの解析又は解析の支援を行う解析プログラムであって、
前記コンピュータが、
前記プログラムのプロセスに割り当てられる第一メモリ空間に対応する第二メモリ空間を有し、該第二メモリ空間に前記プロセスを停止させるか否かを示す停止情報を記憶する記憶部を有し、
前記コンピュータに、
前記プロセスにおいて命令が実行された場合に、該命令が記憶されている前記第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に基づいて、前記プロセスを停止させるか否かを判定する判定手順と、
前記実行された命令が前記第一メモリ空間内でデータを代入する代入命令である場合に、前記データの代入先となる第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の情報を、該データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に更新する更新手順と
を実行させることを特徴とする解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、解析方法、解析装置及び解析プログラムに関する。
【背景技術】
【０００２】
コンピュータで動作するプログラム等は、デバッガによって解析される場合がある。例えば、プログラム開発者は、デバッガを用いて、プログラムの動作を解析する。また、例えば、セキュリティ管理者は、デバッガを用いて、コンピュータウィルスやワームのように悪意のある挙動を示すプログラム（以下、悪意のあるプログラムを「マルウェア」と表記する場合がある）の動作を解析する。
【０００３】
デバッガは、一般に、ブレークポイントを用いて、解析対象のプログラムにより生成されたプロセスを停止させる制御を行う。ブレークポイントの例としては、ハードウェアブレークポイント、ソフトウェアブレークポイント、データブレークポイント等が挙げられる。
【０００４】
ハードウェアブレークポイントは、デバッグレジスタ内のメモリアドレスが示すメモリに対して、読み出し、書き込み、実行等が行われた場合に、プロセスを停止させる方式である。また、ソフトウェアブレークポイントは、停止対象のメモリアドレスが示すメモリ内の命令を停止用の命令に書き換えることにより、かかる停止用の命令が実行された場合に、プロセスを停止させる方式である。また、データブレークポイントは、予め指定されたメモリアドレスが示すメモリに対して、読み出し、書き込み、実行等が行われた場合に、プロセスを停止させる方式である。
【０００５】
プログラム開発者やセキュリティ管理者等は、このようなデバッガを用いて、実行中のプログラムを停止させ、停止状態におけるレジスタやメモリ等の情報を調査することにより、プログラムの詳細な動作を解析する。また、膨大なプログラムコードを網羅的に解析することは多くの時間を要するので、近年では、デバッガを用いて、解析対象のプログラムによって呼び出されるＡＰＩ（Application  Program  Interface）等の外部関数の種類や、外部関数の呼び出し順序が解析される場合もある。このような外部関数の利用状況を調査することは、外部関数の先頭にブレークポイントを設定したり、外部関数の先頭を解析用の処理を実行させるプログラムに書き換えたりすることで実現される。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Konstantin  Rozinov,  "REVERSE  CODE  ENGINEERING:  An  In-Depth  Analysis  of  the  Bagle  Virus",［online］,［平成２２年９月２７日検索］,インターネット＜URL:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.84.2440&rep=rep1&type=pdf＞
【非特許文献２】API  Monitor,［online］,［平成２２年９月２７日検索］,インターネット＜URL:http://www.apimonitor.com/＞
【非特許文献３】Detours,［online］,［平成２２年９月２７日検索］,インターネット＜URL:http://research.microsoft.com/en-us/projects/detours/＞
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記の従来技術では、所望の位置でプログラムの動作を停止させることができない場合がある。具体的には、上記のハードウェアブレークポイント、ソフトウェアブレークポイント、データブレークポイント等のいずれのブレークポイント方式を採用したデバッガであっても、メモリアドレスに基づいてプロセスを停止させる。したがって、ブレークポイントが設定されたメモリ領域内のプログラムが別のメモリ領域にコピーされた場合には、コピー後のプログラムは、ブレークポイントが設定されたメモリアドレスと異なるメモリアドレスにアクセスされることで実行される。このため、プログラムがメモリ内でコピーされると、プロセスを停止させることができない場合がある。このことは、所望の位置でプログラムを解析できないという問題や、ＡＰＩ等の外部関数の利用状況を正確に調査することができないという問題を招く。
【０００８】
本発明は、上記に鑑みてなされたものであって、所望の位置でプログラムの動作を停止することができる解析方法、解析装置及び解析プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明に係る解析方法は、コンピュータが、前記コンピュータで実行されるプログラムのプロセスに割り当てられる第一メモリ空間に対応する第二メモリ空間に、前記プロセスを停止させるか否かを示す停止情報を記憶する記憶部を有し、前記プロセスにおいて命令が実行された場合に、該命令が記憶されている前記第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に基づいて、前記プロセスを停止させるか否かを判定する判定ステップと、前記実行された命令が前記第一メモリ空間内でデータを代入する代入命令である場合に、前記データの代入先となる第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の情報を、該データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に更新する更新ステップとを実行することを特徴とする。
【００１０】
また、本発明に係る解析装置は、コンピュータで実行されるプログラムの解析又は解析の支援を行う解析装置であって、前記プログラムのプロセスに割り当てられる第一メモリ空間に対応する第二メモリ空間を有し、該第二メモリ空間に前記プロセスを停止させるか否かを示す停止情報を記憶する記憶部と、前記プロセスにおいて命令が実行された場合に、該命令が記憶されている前記第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に基づいて、前記プロセスを停止させるか否かを判定する判定部と、前記実行された命令が前記第一メモリ空間内でデータを代入する代入命令である場合に、前記データの代入先となる第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の情報を、該データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に更新する更新部とを有することを特徴とする。
【００１１】
また、本発明に係る解析プログラムは、コンピュータで実行されるプログラムの解析又は解析の支援を行う解析プログラムであって、前記コンピュータが、前記プログラムのプロセスに割り当てられる第一メモリ空間に対応する第二メモリ空間を有し、該第二メモリ空間に前記プロセスを停止させるか否かを示す停止情報を記憶する記憶部を有し、前記コンピュータに、前記プロセスにおいて命令が実行された場合に、該命令が記憶されている前記第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に基づいて、前記プロセスを停止させるか否かを判定する判定手順と、前記実行された命令が前記第一メモリ空間内でデータを代入する代入命令である場合に、前記データの代入先となる第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の情報を、該データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に更新する更新手順とを実行させることを特徴とする。
【発明の効果】
【００１２】
本発明に係る解析方法、解析装置及び解析プログラムは、所望の位置でプログラムの動作を停止することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例１に係る解析装置の構成例を示すブロック図である。
【図２】図２は、ブレークポイント情報記憶部の一例を模式的に示す図である。
【図３】図３は、ブレークポイント判定部による処理の一例を示す図である。
【図４】図４は、ブレークポイント伝播部による処理の一例を示す図である。
【図５】図５は、ブレークポイント伝播部による処理の一例を示す図である。
【図６】図６は、ブレークポイント伝播部による処理の一例を示す図である。
【図７】図７は、実施例１に係る解析装置による処理手順を示すフローチャートである。
【図８】図８は、ブレークポイント判定部によるブレークポイント判断処理手順を示すフローチャートである。
【図９】図９は、ブレークポイント伝播部によるブレークポイント伝播処理手順を示すフローチャートである。
【図１０】図１０は、解析プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１４】
以下に、本発明に係る解析方法、解析装置及び解析プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例により本発明が限定されるものではない。
【実施例１】
【００１５】
［解析装置の構成］
まず、図１を用いて、実施例１に係る解析装置について説明する。図１は、実施例１に係る解析装置１００の構成例を示すブロック図である。図１に示した解析装置１００は、所定のプログラムを実行するコンピュータに実装される。
【００１６】
ここで、プログラムを実行するコンピュータの動作例を説明する。コンピュータによってプログラムが実行される場合には、例えば、コンピュータ内部のＣＰＵ（Central  Processing  Unit）は、ハードディスク装置等に記憶されているプログラムを、ＲＡＭ（Random  Access  Memory）等のメモリ空間に展開する。具体的には、ＣＰＵは、メモリ空間に、命令や値等のデータを展開する。これにより、プログラムは、プロセスとして機能する。以下では、ＣＰＵによってプログラムが展開されるメモリ空間を「プロセスメモリ空間」と表記する場合がある。
【００１７】
このようにしてプロセスが生成された後に、ＣＰＵは、プロセスメモリ空間に展開された各種データを用いて各種命令を実行する。ここで、ＣＰＵによって実行される命令について簡単に説明すると、命令は、命令部とアドレス部とを含む。命令部は、実行内容を示し、例えば、加算や減算等を示す。また、アドレス部は、例えば、命令の実行に用いられる情報として、即値や、値が格納されている記憶領域のメモリアドレスを示す。また、アドレス部は、例えば、命令の実行後に用いられる情報として、命令の実行結果が格納される記憶領域のメモリアドレスを示す。なお、以下では、アドレス部のうち、命令の実行に用いられる情報を「演算元（source）」と表記し、命令の実行後に用いられる情報を「演算先（destination）」と表記する場合がある。
【００１８】
実施例１に係る解析装置１００は、このように動作するプログラムの解析又は解析の支援を行う。具体的には、解析装置１００は、コンピュータでプログラムが実行された場合に、プロセスを監視し、ユーザ等によって予め設定された位置でプロセスを停止することで、プログラムの動作を停止する。
【００１９】
以下に、解析装置１００の構成及び処理について詳細に説明する。図１に示すように、解析装置１００は、ブレークポイント情報記憶部１１０と、命令取得部１２０と、ブレークポイント判定部１３０と、ブレークポイント伝播部１４０とを有する。なお、図１に示した例では、解析装置１００は、監視対象のプログラムから生成されたプロセス１０を監視している。
【００２０】
ブレークポイント情報記憶部１１０は、プロセス１０に割り当てられたプロセスメモリ空間に対応するメモリ空間を有する。具体的には、解析装置１００は、プロセスメモリ空間のメモリアドレスと一対一に対応するメモリアドレスによって示されるメモリ空間を有する。そして、ブレークポイント情報記憶部１１０は、かかるメモリ空間に、プロセス１０を停止させるか否かを示すブレークポイント情報を記憶する。かかるブレークポイント情報は、ユーザ等によって予め設定される。なお、以下では、ブレークポイント情報記憶部１１０が有するメモリ空間を「ブレークメモリ空間」と表記する場合がある。
【００２１】
なお、プログラムの動作を複数の位置で停止させる場合には、ブレークポイント情報記憶部１１０には、複数のブレークポイント情報が記憶される。実施例１におけるブレークポイント情報記憶部１１０は、プログラムの停止位置を特定できるように、複数のブレークポイント情報を識別できる形式で記憶する。例えば、ブレークポイント情報記憶部１１０は、プログラム内の位置「Ｐ１」で停止させるブレークポイント情報として「ＢＰ１」を記憶し、プログラム内の位置「Ｐ２」で停止させるブレークポイント情報として「ＢＰ２」を記憶する。
【００２２】
ここで、図２を用いて、ブレークポイント情報記憶部１１０について説明する。図２は、ブレークポイント情報記憶部１１０の一例を模式的に示す図である。図２に示すように、ブレークメモリ空間１１１は、プロセスメモリ空間１１のメモリアドレスと一対一に対応するメモリアドレスによって示されるメモリ空間である。図２に示した例では、ブレークメモリ空間１１１のメモリアドレス「２０００」は、プロセスメモリ空間１１のメモリアドレス「１０００」に対応する。同様に、ブレークメモリ空間１１１のメモリアドレス「２００１」〜「２００６」は、プロセスメモリ空間１１のメモリアドレス「１００１」〜「１００６」に対応する。
【００２３】
また、ブレークポイント情報記憶部１１０は、ブレークメモリ空間１１１にブレークポイント情報を記憶する。図２では、ブレークポイント情報記憶部１１０が、メモリアドレス「２０００」にブレークポイント情報「ＢＰ１１」を記憶し、メモリアドレス「２００２」にブレークポイント情報「ＢＰ１２」を記憶している例を示している。図２に示した例では、ブレークメモリ空間１１１に格納されているブレークポイント情報「ＢＰ１１」や「ＢＰ１２」は、プロセス１０を停止させることを示すものとする。なお、図２に示したメモリアドレスやブレークポイント情報の具体的な値は、一例であって、図示した例に限られない。
【００２４】
図１の説明に戻って、命令取得部１２０は、ＣＰＵによって実行された命令に関する各種情報を取得する。例えば、プロセス１０において実行された命令は、ＣＰＵが保持するプログラムカウンタ内のメモリアドレスが示す記憶領域に格納されている。したがって、命令取得部１２０は、プロセス１０において命令が実行された場合には、例えば、プログラムカウンタ内のメモリアドレスが示すプロセスメモリ空間１１から命令を取得する。また、命令取得部１２０は、ＣＰＵが保持する各種情報を取得する。ここでいうＣＰＵが保持する各種情報とは、ＣＰＵが有するレジスタに記憶されている情報等を示し、例えば、命令の演算元、演算先を特定する情報である。以下では、ＣＰＵが保持する各種情報を「ＣＰＵ情報」と表記する場合がある。
【００２５】
そして、命令取得部１２０は、取得した命令が解析対象のプロセスにおいて実行されたか否かを判定する。命令取得部１２０は、取得した命令が解析対象のプロセスにおいて実行された場合には、かかる命令とＣＰＵ情報をブレークポイント判定部１３０及びブレークポイント伝播部１４０に出力する。図２に示した例では、解析装置１００は、プロセス１０を解析対象としているので、プロセス１０において命令が実行された場合には、プロセスメモリ空間１１から取得した命令やＣＰＵ情報をブレークポイント判定部１３０及びブレークポイント伝播部１４０に出力する。
【００２６】
一方、命令取得部１２０は、取得した命令が解析対象以外のプロセスにおいて実行された場合には、かかる命令とＣＰＵ情報をブレークポイント判定部１３０及びブレークポイント伝播部１４０に出力しない。
【００２７】
ブレークポイント判定部１３０は、プロセス１０において命令が実行された場合に、ブレークポイント情報記憶部１１０に記憶されているブレークポイント情報に基づいて、プロセス１０を停止させるか否かを判定する。
【００２８】
具体的には、ブレークポイント判定部１３０は、命令取得部１２０から命令及びＣＰＵ情報を入力された場合に、かかる命令が格納されているプロセスメモリ空間１１のメモリアドレスに対応するブレークメモリ空間１１１にブレークポイント情報が格納されているか否かを判定する。なお、プロセス１０において実行された命令は、ＣＰＵが保持するプログラムカウンタ内のメモリアドレスが示す記憶領域に格納されている。したがって、ブレークポイント判定部１３０は、例えば、プログラムカウンタ内のメモリアドレスに対応するブレークメモリ空間１１１にブレークポイント情報が格納されているか否かを判定する。
【００２９】
そして、ブレークポイント判定部１３０は、ブレークメモリ空間１１１にブレークポイント情報が格納されていない場合には、プロセス１０を停止させない。
【００３０】
一方、ブレークポイント判定部１３０は、ブレークメモリ空間１１１にブレークポイント情報が格納されている場合には、プロセス１０を停止させる。そして、ブレークポイント判定部１３０は、ブレークメモリ空間１１１に格納されているブレークポイント情報や、命令の内容、ＣＰＵ情報等を、ログや表示装置等に出力する。上記のように、ブレークポイント情報記憶部１１０は、プログラムの停止位置を特定できるように、複数のブレークポイント情報を識別できる形式で記憶している。したがって、ブレークポイント判定部１３０によってブレークポイント情報が出力されることにより、ユーザは、プログラムの停止位置と対応付けて、命令の内容、ＣＰＵ情報等を把握することができる。
【００３１】
そして、ブレークポイント判定部１３０は、ブレークポイント情報等を出力した後に、プロセス１０を再開させる。なお、ブレークポイント判定部１３０は、プロセス１０を自動的に再開させずに、ユーザ等によって停止中のプログラムの動作を再開させる旨の操作が行われた場合に、停止中のプロセス１０を再開させてもよい。
【００３２】
ここで、図３を用いて、ブレークポイント判定部１３０による処理の一例について説明する。図３は、ブレークポイント判定部１３０による処理の一例を示す図である。図３に示した例では、プロセス１０において、プロセスメモリ空間１１のメモリアドレス「１０００」に格納されている命令が実行されたものとする。かかる場合に、命令取得部１２０は、プロセスメモリ空間１１のメモリアドレス「１０００」に格納されている命令や、ＣＰＵ情報を取得し、取得した命令及びＣＰＵ情報をブレークポイント判定部１３０に出力する。
【００３３】
ブレークポイント判定部１３０は、命令取得部１２０から命令及びＣＰＵ情報を入力された場合に、かかる命令が格納されているプロセスメモリ空間１１のメモリアドレス「１０００」に対応するブレークメモリ空間１１１のメモリアドレス「２０００」が示す記憶領域にブレークポイント情報が格納されているか否かを判定する。なお、上述したように、ブレークポイント判定部１３０は、プログラムカウンタを取得することで、プロセス１０において実行された命令が格納されている記憶領域のメモリアドレス「１０００」を取得することができる。
【００３４】
図３に示した例では、ブレークメモリ空間１１１のメモリアドレス「２０００」が示す記憶領域には、ブレークポイント情報「ＢＰ１１」が格納されている。したがって、ブレークポイント判定部１３０は、プロセス１０を停止させる。このように、ブレークポイント判定部１３０は、プロセス１０においてプロセスメモリ空間１１のメモリアドレス「１０００」に格納されている命令が実行された場合には、プロセス１０を停止させる。
【００３５】
同様に、ブレークポイント判定部１３０は、図３に示した例において、例えば、プロセスメモリ空間１１のメモリアドレス「１００２」に格納されている命令が実行された場合には、かかる命令に対応するブレークメモリ空間１１１にブレークポイント情報「ＢＰ１２」が格納されているので、プロセス１０を停止させる。一方、ブレークポイント判定部１３０は、例えば、プロセスメモリ空間１１のメモリアドレス「１００１」、「１００３」〜「１００６」に格納されている命令が実行された場合には、かかる命令に対応するブレークメモリ空間１１１にブレークポイント情報が格納されていないので、プロセス１０を停止させない。
【００３６】
図１の説明に戻って、ブレークポイント伝播部１４０は、プロセス１０において命令が実行された場合に、ブレークポイント情報記憶部１１０のブレークメモリ空間１１１に記憶されているブレークポイント情報を更新する。
【００３７】
実施例１におけるブレークポイント伝播部１４０は、実行された命令の種類や、命令に用いられた値の種別を判別することで、各種更新処理を行う。ここで、ブレークポイント伝播部１４０により判定される命令の種類について簡単に説明する。ブレークポイント伝播部１４０により判定される命令の種類として、演算元のデータを演算先のメモリアドレスが示す記憶領域に代入する「代入命令」と、演算元のデータと演算先のデータとの演算結果を、演算先のメモリアドレスが示す記憶領域に代入する「演算代入命令」とがある。
【００３８】
具体的には、ブレークポイント伝播部１４０は、命令取得部１２０から命令及びＣＰＵ情報を入力された場合に、かかる命令及びＣＰＵ情報に基づいて、命令の演算元が即値、又は、メモリやレジスタ等のメモリアドレスのいずれを示すかを判定する。また、ブレークポイント伝播部１４０は、命令取得部１２０から入力された命令及びＣＰＵ情報に基づいて、かかる命令が代入命令又は演算代入命令のいずれであるかを判定する。
【００３９】
そして、ブレークポイント伝播部１４０は、演算元がメモリやレジスタのメモリアドレスであり、かつ、命令の種類が代入命令である場合には、演算先のメモリアドレスに対応するブレークポイント情報を、演算元のメモリアドレスに対応するブレークポイント情報に更新する。言い換えれば、ブレークポイント伝播部１４０は、演算元のメモリアドレスに対応するブレークポイント情報を、演算先のメモリアドレスに対応するブレークポイント情報に上書きする。
【００４０】
また、ブレークポイント伝播部１４０は、演算元がメモリやレジスタのメモリアドレスであり、かつ、命令の種類が演算代入命令である場合には、演算元のメモリアドレスに対応するブレークポイント情報を、演算先のメモリアドレスに対応するブレークポイント情報に追加する。
【００４１】
また、ブレークポイント伝播部１４０は、演算元が即値であり、かつ、命令の種類が代入命令である場合には、演算先のメモリアドレスに対応するブレークメモリ空間１１１のブレークポイント情報を削除する。
【００４２】
ここで、図４〜図６を用いて、ブレークポイント伝播部１４０による処理と、かかる処理を行う理由について説明する。図４〜図６は、ブレークポイント伝播部１４０による処理の一例を示す図である。なお、図４〜図６に示した例において、ブレークポイント伝播部１４０による処理の前には、ブレークメモリ空間１１１に図２に例示したブレークポイント情報が格納されているものとする。
【００４３】
図４には、プロセス１０において、プロセスメモリ空間１１のメモリアドレス「１０００」に格納されているデータをメモリアドレス「１００４」に代入する命令が実行された例を示す。かかる場合に、ブレークポイント伝播部１４０は、命令取得部１２０から入力される命令やＣＰＵ情報に基づいて、プロセス１０において実行された命令の演算元がメモリアドレスであり、かつ、命令の種類が代入命令であると判定する。
【００４４】
そして、ブレークポイント伝播部１４０は、図４に斜線を付して図示したように、演算元のメモリアドレス「１０００」に対応するブレークポイント情報「ＢＰ１１」を、演算先のメモリアドレス「１００４」に対応するブレークポイント情報に上書きする。すなわち、ブレークポイント伝播部１４０は、ブレークメモリ空間１１１のメモリアドレス「２０００」に格納されているブレークポイント情報「ＢＰ１１」を、メモリアドレス「２００４」に上書きする。
【００４５】
このようにブレークポイント情報を上書きする理由について説明する。プロセス１０において実行された命令の演算元がメモリアドレスであり、かつ、かかる命令が代入命令である場合には、単に命令をコピーする処理が行われた可能性がある。すなわち、図４に示した例では、プロセスメモリ空間１１のメモリアドレス「１０００」に格納されている命令がメモリアドレス「１００４」にコピーされた可能性がある。かかる例の場合、メモリアドレス「１０００」に格納されている命令は、対応するブレークメモリ空間１１１にブレークポイント情報「ＢＰ１１」が格納されている。したがって、メモリアドレス「１０００」に格納されている命令が実行される場合には、プロセス１０は停止されるべきである。つまり、メモリアドレス「１０００」に格納されている命令がメモリアドレス「１００４」にコピーされた場合であっても、かかるメモリアドレス「１００４」にコピー命令が実行された際にも、プロセス１０は停止されるべきである。
【００４６】
そこで、実施例１におけるブレークポイント伝播部１４０は、演算元に対応するブレークポイント情報「ＢＰ１１」を、演算先に対応するブレークメモリ空間１１１のメモリアドレス「２００４」に上書きする。これにより、解析装置１００は、メモリアドレス「１００４」に格納されている命令が実行された場合に、プロセス１０を停止させることができる。このように、ブレークポイント伝播部１４０は、ブレークポイント情報が付与されている命令がコピーされた場合であっても、ブレークポイント情報についてもコピーするので、プロセス１０を停止させるべき命令が実行された際に確実にプロセス１０を停止させることができる。
【００４７】
なお、図４に示した例において、例えば、プロセスメモリ空間１１のメモリアドレス「１００１」に格納されているデータがメモリアドレス「１００２」に代入される命令が実行されたものとする。すなわち、プロセスメモリ空間１１のメモリアドレス「１００１」に格納されている命令がメモリアドレス「１００２」にコピーされた可能性がある。かかる例の場合、メモリアドレス「１００１」に格納されている命令は、対応するブレークメモリ空間１１１にブレークポイント情報が格納されていない。したがって、メモリアドレス「１００１」に格納されている命令が実行される場合には、プロセス１０は停止されるべきでない。つまり、メモリアドレス「１００１」に格納されている命令がメモリアドレス「１００２」にコピーされた場合であっても、かかるメモリアドレス「１００２」にコピー命令が実行された際にも、プロセス１０は停止されるべきでない。
【００４８】
上記例の場合には、ブレークポイント伝播部１４０は、命令の演算元のメモリアドレス「１００１」に対応するブレークメモリ空間１１１にブレークポイント情報が格納されていないので、演算先に対応するブレークメモリ空間１１１のメモリアドレス「２００２」に格納されているブレークポイント情報「ＢＰ１２」を削除する。すなわち、解析装置１００は、メモリアドレス「１００２」に格納されている命令が実行された場合に、プロセス１０を停止させないようにすることができる。
【００４９】
図５には、プロセス１０において、プロセスメモリ空間１１のメモリアドレス「１０００」に格納されているデータと、メモリアドレス「１００２」に格納されているデータとの演算結果をメモリアドレス「１００２」に代入する命令が実行された例を示す。かかる場合に、ブレークポイント伝播部１４０は、命令取得部１２０から入力される命令やＣＰＵ情報に基づいて、プロセス１０において実行された命令の演算元がメモリアドレスであり、かつ、命令の種類が演算代入命令であると判定する。
【００５０】
そして、ブレークポイント伝播部１４０は、図５に斜線を付して図示したように、演算元のメモリアドレス「１０００」に対応するブレークポイント情報「ＢＰ１１」を、演算先のメモリアドレス「１００２」に対応するブレークポイント情報「ＢＰ１２」に追加する。すなわち、ブレークポイント伝播部１４０は、ブレークメモリ空間１１１のメモリアドレス「２０００」に格納されているブレークポイント情報「ＢＰ１１」を、メモリアドレス「２００２」に追加する。ブレークポイント伝播部１４０による追加処理の前において、ブレークメモリ空間１１１のメモリアドレス「２００２」にブレークポイント情報「ＢＰ１２」が格納されているので、ブレークポイント伝播部１４０による追加処理によって、メモリアドレス「２００２」には、ブレークポイント情報「ＢＰ１２、ＢＰ１１」が格納される。
【００５１】
このようにブレークポイント情報を追加する理由について説明する。プロセス１０において実行された命令の演算元がメモリアドレスであり、かつ、かかる命令が演算代入命令である場合には、命令をコピーする処理が行われた可能性がある。すなわち、図４に示した例と同様に、メモリアドレス「１０００」に格納されている命令がメモリアドレス「１００２」にコピーされた場合であっても、かかるメモリアドレス「１００２」にコピー命令が実行された際にも、プロセス１０は停止されるべきである。
【００５２】
ここで、以下に説明する例のように演算代入命令が実行されることが考えられる。例えば、プロセスメモリ空間１１のメモリアドレス「１００２」に格納されているデータに、メモリアドレス「１０００」に格納されているデータを加算する演算代入命令が実行された後に、メモリアドレス「１００２」に格納されているデータに、メモリアドレス「１０００」に格納されているデータを減算する演算代入命令が実行されることが考えられる。また、加算と減算とが逆の順番で行われることも考えられる。
【００５３】
かかる場合には、メモリアドレス「１００２」に格納されているデータは、加算及び減算の演算代入命令が実行される前の状態に戻る。すなわち、メモリアドレス「１００２」に命令が格納されていた場合には、上記の加算及び減算の演算代入命令が実行された場合であっても、メモリアドレス「１００２」には元の命令が格納されることになる。加算及び減算の演算代入命令が実行される前には、メモリアドレス「１００２」に対応するブレークメモリ空間１１１にブレークポイント情報「ＢＰ１２」が格納されていたので、メモリアドレス「１００２」に格納されている命令が実行された場合には、プロセス１０は停止されるべきである。
【００５４】
上記のように、ブレークポイント情報は、プログラムを停止させる情報であるとともに、停止位置を特定する情報でもある。したがって、メモリアドレス「１００２」内の命令が実行された場合には、ブレークポイント情報「ＢＰ１２」によってプロセス１０が停止されるべきである。
【００５５】
そこで、実施例１におけるブレークポイント伝播部１４０は、実行された命令が演算代入命令である場合には、演算元に対応するブレークポイント情報を、演算先に対応するブレークポイント情報に追加する。図５に示した例の場合には、加算及び減算の演算代入命令が実行された後には、メモリアドレス「１００２」に対応するブレークメモリ空間１１１にブレークポイント情報「ＢＰ１２、ＢＰ１１」が格納される。すなわち、メモリアドレス「１００２」内の命令が実行された場合には、ブレークポイント判定部１３０によってブレークポイント情報「ＢＰ１２、ＢＰ１１」が出力されることになる。これにより、ユーザは、プログラムの停止位置を把握できるとともに、メモリアドレス「１００２」内の命令に対して演算代入命令が実行されたことを把握できる。
【００５６】
図６には、プロセス１０において、プロセスメモリ空間１１のメモリアドレス「１００２」に即値が代入される命令が実行された例を示す。かかる場合に、ブレークポイント伝播部１４０は、命令取得部１２０から入力される命令やＣＰＵ情報に基づいて、プロセス１０において実行された命令の演算元が即値であり、かつ、命令の種類が代入命令であると判定する。そして、ブレークポイント伝播部１４０は、図６に斜線を付して図示したように、プロセスメモリ空間１１のメモリアドレス「１００２」に対応するブレークメモリ空間１１１のメモリアドレス「２００２」に格納されているブレークポイント情報「ＢＰ１２」を削除する。
【００５７】
このようにブレークポイント情報を削除する理由について説明する。プロセス１０において実行された命令の演算元が即値であり、かつ、かかる命令が代入命令である場合には、例えば、プログラム内で定義されているような固定値を代入する処理が行われた可能性がある。演算元が即値である場合には、かかる演算元にブレークポイント情報が付与されていない。図６に示した例では、プロセスメモリ空間１１のメモリアドレス「１００２」には即値が格納されるので、メモリアドレス「１００２」が停止位置にはならない。
【００５８】
そこで、実施例１におけるブレークポイント伝播部１４０は、実行された命令の演算元が即値であり、かつ、命令が代入命令である場合には、演算先に対応するブレークポイント情報を削除する。これにより、解析装置１００は、不要な位置でプロセス１０を停止させないようにすることができる。
【００５９】
また、プロセスメモリ空間１１は、開放されて、新たなプロセスに割り当てられる場合がある。かかる場合には、ブレークメモリ空間１１１には、新たなプロセスに対応するブレークポイント情報が記憶されるべきである。上記のように、即値の代入命令が実行された場合に、ブレークポイント情報を削除しておくことで、ブレークメモリ空間１１１に不要なブレークポイント情報が残ってしまうことを極力避けることができる。
【００６０】
このようにして、実施例１におけるブレークポイント伝播部１４０は、プロセスメモリ空間１１内でコピー処理が行われた場合に、演算元及び演算先の情報を用いて、ブレークポイント情報を伝播させる。
【００６１】
［解析装置による処理手順］
次に、図７を用いて、実施例１に係る解析装置１００による処理の手順について説明する。図７は、実施例１に係る解析装置１００による処理手順を示すフローチャートである。
【００６２】
図７に示すように、解析装置１００の命令取得部１２０は、プロセス１０において命令が実行されていない場合には（ステップＳ１０１否定）、プロセス１０において命令が実行されるまで待機する。そして、命令取得部１２０は、プロセス１０において命令が実行された場合には（ステップＳ１０１肯定）、プロセス１０において実行された命令及びＣＰＵ情報を取得する（ステップＳ１０２）。
【００６３】
続いて、命令取得部１２０は、ステップＳ１０１において実行された命令が解析対象のプロセスである場合には（ステップＳ１０３肯定）、ステップＳ１０２において取得した命令及びＣＰＵ情報をブレークポイント判定部１３０及びブレークポイント伝播部１４０に出力する。
【００６４】
続いて、ブレークポイント判定部１３０は、命令取得部１２０から入力された命令及びＣＰＵ情報に基づいて、ブレークポイント判断処理を行う（ステップＳ１０４）。なお、ブレークポイント判定部１３０によるブレークポイント判断処理については、図８を用いて後に説明する。
【００６５】
また、ブレークポイント伝播部１４０は、命令取得部１２０から入力された命令及びＣＰＵ情報に基づいて、ブレークポイント伝播処理を行う（ステップＳ１０５）。なお、ブレークポイント伝播部１４０によるブレークポイント伝播処理については、図９を用いて後に説明する。
【００６６】
一方、命令取得部１２０は、ステップＳ１０１において実行された命令が解析対象のプロセスでない場合には（ステップＳ１０３否定）、ステップＳ１０２において取得した命令及びＣＰＵ情報をブレークポイント判定部１３０及びブレークポイント伝播部１４０に出力しない。
【００６７】
そして、解析装置１００は、解析対象のプロセスが終了していない場合には（ステップＳ１０６否定）、ステップＳ１０１における処理に戻る。一方、解析装置１００は、解析対象のプロセスが終了した場合には（ステップＳ１０６肯定）、処理を終了する。
【００６８】
次に、図８を用いて、図７のステップＳ１０４に示したブレークポイント判断処理の手順について説明する。図８は、ブレークポイント判定部１３０によるブレークポイント判断処理手順を示すフローチャートである。
【００６９】
図８に示すように、ブレークポイント判定部１３０は、命令取得部１２０から命令及びＣＰＵ情報を入力された後に、プログラムカウンタが示すメモリアドレスに対応するブレークメモリ空間１１１にブレークポイント情報を取得する（ステップＳ２０１）。すなわち、ブレークポイント判定部１３０は、プロセス１０において実行された命令が格納されているプロセスメモリ空間１１のメモリアドレスに対応するブレークメモリ空間１１１のメモリアドレスからブレークポイント情報を取得する。
【００７０】
そして、ブレークポイント判定部１３０は、ブレークメモリ空間１１１にブレークポイント情報が格納されている場合には（ステップＳ２０２肯定）、解析対象のプロセス１０を停止させる（ステップＳ２０３）。
【００７１】
続いて、ブレークポイント判定部１３０は、ブレークポイント情報等を出力し（ステップＳ２０４）、解析対象のプロセス１０に関する各種情報を出力する（ステップＳ２０５）。そして、ブレークポイント判定部１３０は、解析対象のプロセス１０を再開させる（ステップＳ２０６）。
【００７２】
一方、ブレークポイント判定部１３０は、ステップＳ２０１において、ブレークメモリ空間１１１にブレークポイント情報が格納されていない場合には（ステップＳ２０２否定）、処理を終了する。
【００７３】
次に、図９を用いて、図７のステップＳ１０５に示したブレークポイント伝播処理の手順について説明する。図９は、ブレークポイント伝播部１４０によるブレークポイント伝播処理手順を示すフローチャートである。
【００７４】
図９に示すように、ブレークポイント伝播部１４０は、命令取得部１２０から命令及びＣＰＵ情報を入力された後に、ＣＰＵ情報に基づいて、プロセス１０において実行された命令と、かかる命令の演算元及び演算先を取得する（ステップＳ３０１）。
【００７５】
続いて、ブレークポイント伝播部１４０は、プロセス１０において実行された命令の演算元が即値であるか否かを判定する（ステップＳ３０２）。そして、ブレークポイント伝播部１４０は、演算元が即値である場合には（ステップＳ３０２肯定）、実行された命令が代入命令であるか否かを判定する（ステップＳ３０３）。
【００７６】
そして、ブレークポイント伝播部１４０は、プロセス１０において実行された命令が代入命令である場合には（ステップＳ３０３肯定）、演算先のメモリアドレスに対応するブレークメモリ空間１１１のブレークポイント情報を削除する（ステップＳ３０４）。一方、ブレークポイント伝播部１４０は、命令が代入命令でない場合には（ステップＳ３０３否定）、処理を終了する。
【００７７】
また、ブレークポイント伝播部１４０は、プロセス１０において実行された命令の演算元が即値でなく、メモリやレジスタのメモリアドレスである場合には（ステップＳ３０２否定）、実行された命令が代入命令であるか否かを判定する（ステップＳ３０５）。
【００７８】
そして、ブレークポイント伝播部１４０は、プロセス１０において実行された命令が代入命令である場合には（ステップＳ３０５肯定）、演算元のメモリアドレスに対応するブレークポイント情報を、演算先のメモリアドレスに対応するブレークポイント情報に上書きする（ステップＳ３０６）。一方、ブレークポイント伝播部１４０は、プロセス１０において実行された命令が代入命令でない場合には（ステップＳ３０５否定）、かかる命令が演算代入命令であるか否かを判定する（ステップＳ３０７）。
【００７９】
そして、ブレークポイント伝播部１４０は、プロセス１０において実行された命令が演算代入命令である場合には（ステップＳ３０７肯定）、演算元のメモリアドレスに対応するブレークポイント情報を、演算先のメモリアドレスに対応するブレークポイント情報に追加する（ステップＳ３０８）。一方、ブレークポイント伝播部１４０は、プロセス１０において実行された命令が演算代入命令でない場合には（ステップＳ３０７否定）、処理を終了する。
【００８０】
［実施例１の効果］
上述してきたように、実施例１に係る解析装置１００のブレークポイント情報記憶部１１０は、コンピュータで実行されるプログラムのプロセスに割り当てられるプロセスメモリ空間１１に対応するブレークメモリ空間１１１を有し、かかるブレークメモリ空間１１１にプロセスを停止させるか否かを示すブレークポイント情報を記憶する。これにより、解析装置１００は、プロセスにより実行される各命令に対して網羅的にブレークポイント情報を設定することが可能になる。
【００８１】
また、解析装置１００のブレークポイント伝播部１４０は、実行された命令が代入命令である場合に、演算先のメモリアドレスに対応するブレークポイント情報を、演算元のメモリアドレスに対応するブレークポイント情報に更新する。すなわち、実施例１に係る解析装置１００は、プロセスに対して網羅的にブレークポイント情報を記憶することができるブレークポイント情報記憶部１１０を有するので、代入命令が行われた場合に、かかる代入命令に従ってブレークポイント情報を伝播させることができる。そして、解析装置１００は、ブレークポイント情報を伝播させることにより、解析対象のプログラムがコピーされた場合であっても、コピー後のプログラムが実行された際にかかるプログラムのプロセスを停止させることができる。
【００８２】
以上のことから、解析装置１００は、ユーザに設定された所望の位置でプログラムの動作を停止させることができるので、ＡＰＩ等の外部関数の利用状況を正確に調査することが可能になる。例えば、解析対象のプログラムが呼び出す可能性のある各ＡＰＩの先頭にブレークポイント情報が設定されているものとする。かかる場合に、解析装置１００は、解析装置１００は、解析対象のプログラムに対して解析処理を行った場合に、ＡＰＩが呼び出されるたびに、プロセスを停止させ、ブレークポイント情報やＣＰＵ情報をログ出力する。これにより、ユーザは、ＡＰＩが呼び出された順序や回数を把握することができる。
【００８３】
また、実施例１に係る解析装置１００は、実行された命令が代入命令である場合に、演算元のメモリアドレスに対応するブレークポイント情報を、演算先のメモリアドレスに対応するブレークポイント情報に追加する。これにより、実施例１に係る解析装置１００は、例えば、加算及び減算の演算代入命令が繰り返し実行された場合であっても、予め設定したブレークポイント情報をトリガとして監視対象のプロセスを停止させることができる。
【００８４】
また、実施例１に係る解析装置１００は、実行された命令の演算元が即値であり、かつ、命令の種類が代入命令である場合に、演算先のメモリアドレスに対応するブレークポイント情報を削除する。これにより、実施例１に係る解析装置１００は、不要な位置でプロセスを停止させることを防止することができる。
【００８５】
また、実施例１に係る解析装置１００は、プロセスを停止させる場合に、ブレークポイント情報や、ＣＰＵ情報等をログ等に出力する。これにより、解析装置１００は、ユーザに対して、プロセスの停止位置毎に、停止時におけるメモリやレジスタ内の各種情報を提供することができる。
【００８６】
なお、従来のハードウェアブレークポイントは、デバッグレジスタを用いるが、かかるデバッグレジスタの数に制限がある。例えば、Ｉｎｔｅｌ社のｘ８６アーキテクチャの場合には、デバッグレジスタが４個である。したがって、従来のハードウェアブレークポイントを用いたデバッガでは、多数のブレークポイントを設定できないので、プログラムを詳細に解析する場合に適用することができなかった。例えば、数百存在するＡＰＩの利用状況を調査する場合には適用することができなかった。
【００８７】
しかし、実施例１に係る解析装置１００は、上記のように、プロセスに割り当てられるプロセスメモリ空間と一対一に対応するブレークメモリ空間１１１を有するので、監視対照のプロセスに対して網羅的にブレークポイントを設定することができる。したがって、実施例１に係る解析装置１００は、数百存在するＡＰＩの利用状況を調査する場合にも適用することができる。
【００８８】
また、従来のソフトウェアブレークポイントは、命令の書き換えを行うが、プログラムの書き換えによりデバッグが行われていることを検知するようなアンチデバッグ機能を備えたプログラムも存在する。アンチデバッグ機能付きのプログラムに対してソフトウェアブレークポイントを用いると、かかるプログラムは、デバッグを検知して、本来とは異なる動作を行う場合がある。このため、従来のソフトウェアブレークポイントでは、アンチデバッグ機能付きのプログラムを所望の箇所で停止させることができない場合がある。
【００８９】
しかし、実施例１に係る解析装置１００は、監視対象のプログラムを書き換えず、図４〜図６を用いて説明したように、随時実行される命令に追従するように、ブレークポイント情報を伝播させる。したがって、実施例１に係る解析装置１００は、アンチデバッグ機能付きのプログラムに対しても所望の箇所でプロセス停止させることができる。
【実施例２】
【００９０】
ところで、本発明に係る解析方法、解析装置及び解析プログラムは、上述した実施例以外にも、種々の異なる形態にて実施されてよい。そこで、実施例２では、本発明に係る解析方法、解析装置及び解析プログラムの他の実施例について説明する。
【００９１】
［ｘｏｒ命令］
Ｉｎｔｅｌ社のｘ８６アーキテクチャでは、レジスタをゼロクリアする場合に、「ｘｏｒ  ｅａｘ  ｅａｘ」といったｘｏｒ命令による演算代入命令が用いられる。かかるｘｏｒ命令は、演算元のデータと演算先のデータをｘｏｒ演算することにより演算結果を「０」とするので、演算先のレジスタに「０」を代入する代入命令と等価であるといえる。このため、上記実施例１におけるブレークポイント伝播部１４０は、実行された命令がｘｏｒ命令であり、かつ、演算元のデータと演算先のデータとが等しい場合には、演算先のメモリアドレスに対応するブレークメモリ空間１１１のブレークポイント情報を削除してもよい。
【００９２】
［システム構成等］
図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示された構成要素と同一であることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、図１に示したブレークポイント判定部１３０とブレークポイント伝播部１４０とを一つのブレークポイント処理部として統合してもよい。かかる場合には、ブレークポイント処理部は、ブレークポイント判定処理を行った後に、ブレークポイント伝播処理を行う。また、図１に示したブレークポイント判定部１３０は、プロセスを停止させる処理を行う停止処理部と、ログを出力するログ出力部とに分散してもよい。
【００９３】
また、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００９４】
［解析プログラム］
また、上記実施例１に係る解析装置１００が実行する処理をコンピュータが実行可能な言語で記述した解析プログラムを作成することもできる。この場合、コンピュータが解析プログラムを実行することにより、上記実施例１と同様の効果を得ることができ、その結果、解析プログラムは、デバッガとして動作する。さらに、かかる解析プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録された解析プログラムをコンピュータに読み込ませて実行することにより上記実施例１と同様の処理を実現してもよい。以下に、図１に示した解析装置１００と同様の機能を実現する解析プログラムを実行するコンピュータの一例を説明する。
【００９５】
図１０は、解析プログラムを実行するコンピュータ１０００を示す図である。図１０に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【００９６】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０３１に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１０４１に接続される。ディスクドライブ１０４１には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１０５１およびキーボード１０５２が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１０６１が接続される。
【００９７】
ここで、図１０に示すように、ハードディスクドライブ１０３１は、例えば、ＯＳ（Operating  System）１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。上記実施例１で説明した解析対象のプログラムは、例えばハードディスクドライブ１０３１に記憶される。
【００９８】
また、解析プログラムは、例えば、コンピュータ１０００によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ１０３１に記憶される。具体的には、上記実施例１で説明した命令取得部１２０と同様の情報処理を実行する命令取得手順と、ブレークポイント判定部１３０と同様の情報処理を実行するブレークポイント判断手順と、ブレークポイント伝播部１４０と同様の情報処理を実行するブレークポイント伝播手順とが記述されたプログラムモジュールが、ハードディスクドライブ１０３１に記憶される。
【００９９】
また、上記実施例１で説明したブレークポイント情報記憶部１１０に記憶されるデータのように、解析プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ１０３１に記憶される。そして、ＣＰＵ１０２０が、ハードディスクドライブ１０３１に記憶されたプログラムモジュールやプログラムデータを必要に応じてＲＡＭ１０１２に読み出して、命令取得手順と、ブレークポイント判断手順と、ブレークポイント伝播手順とを実行する。
【０１００】
なお、解析プログラムに係るプログラムモジュールやプログラムデータは、ハードディスクドライブ１０３１に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１０４１等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、解析プログラムに係るプログラムモジュールやプログラムデータは、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【０１０１】
１０  プロセス
１１  プロセスメモリ空間
１００  解析装置
１１０  ブレークポイント情報記憶部
１１１  ブレークメモリ空間
１２０  命令取得部
１３０  ブレークポイント判定部
１４０  ブレークポイント伝播部
１０００  コンピュータ
１０１０  メモリ
１０１１  ＲＯＭ
１０１２  ＲＡＭ
１０２０  ＣＰＵ
１０３０  ハードディスクドライブインタフェース
１０３１  ハードディスクドライブ
１０４０  ディスクドライブインタフェース
１０４１  ディスクドライブ
１０５０  シリアルポートインタフェース
１０５１  マウス
１０５２  キーボード
１０６０  ビデオアダプタ
１０６１  ディスプレイ
１０７０  ネットワークインタフェース
１０８０  バス
１０９２  アプリケーションプログラム
１０９３  プログラムモジュール
１０９４  プログラムデータ
【図１】
0005437964.tif 000002
【図２】
0005437964.tif 000003
【図３】
0005437964.tif 000004
【図４】
0005437964.tif 000005
【図５】
0005437964.tif 000006
【図６】
0005437964.tif 000007
【図７】
0005437964.tif 000008
【図８】
0005437964.tif 000009
【図９】
0005437964.tif 000010
【図１０】
0005437964.tif 000011