説明

解析方法、解析装置及び解析プログラム

【課題】所望の位置でプログラムの動作を停止することができる解析方法、解析装置及び解析プログラムを提供すること。
【解決手段】コンピュータが、コンピュータで実行されるプログラムのプロセスに割り当てられるプロセスメモリ空間に対応するブレークメモリ空間に、プロセスを停止させるか否かを示すブレークポイント情報を記憶する。そして、プロセスにおいて命令が実行された場合に、命令が記憶されているプロセスメモリ空間に対応するブレークメモリ空間のブレークポイント情報に基づいて、プロセスを停止させるか否かを判定する。また、実行された命令がプロセスメモリ空間内でデータを代入する代入命令である場合に、データの代入先となるプロセスメモリ空間に対応するブレークメモリ空間の情報を、データが記憶されているプロセスメモリ空間に対応するブレークメモリ空間のブレークポイント情報に更新する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、解析方法、解析装置及び解析プログラムに関する。
【背景技術】
【0002】
コンピュータで動作するプログラム等は、デバッガによって解析される場合がある。例えば、プログラム開発者は、デバッガを用いて、プログラムの動作を解析する。また、例えば、セキュリティ管理者は、デバッガを用いて、コンピュータウィルスやワームのように悪意のある挙動を示すプログラム(以下、悪意のあるプログラムを「マルウェア」と表記する場合がある)の動作を解析する。
【0003】
デバッガは、一般に、ブレークポイントを用いて、解析対象のプログラムにより生成されたプロセスを停止させる制御を行う。ブレークポイントの例としては、ハードウェアブレークポイント、ソフトウェアブレークポイント、データブレークポイント等が挙げられる。
【0004】
ハードウェアブレークポイントは、デバッグレジスタ内のメモリアドレスが示すメモリに対して、読み出し、書き込み、実行等が行われた場合に、プロセスを停止させる方式である。また、ソフトウェアブレークポイントは、停止対象のメモリアドレスが示すメモリ内の命令を停止用の命令に書き換えることにより、かかる停止用の命令が実行された場合に、プロセスを停止させる方式である。また、データブレークポイントは、予め指定されたメモリアドレスが示すメモリに対して、読み出し、書き込み、実行等が行われた場合に、プロセスを停止させる方式である。
【0005】
プログラム開発者やセキュリティ管理者等は、このようなデバッガを用いて、実行中のプログラムを停止させ、停止状態におけるレジスタやメモリ等の情報を調査することにより、プログラムの詳細な動作を解析する。また、膨大なプログラムコードを網羅的に解析することは多くの時間を要するので、近年では、デバッガを用いて、解析対象のプログラムによって呼び出されるAPI(Application Program Interface)等の外部関数の種類や、外部関数の呼び出し順序が解析される場合もある。このような外部関数の利用状況を調査することは、外部関数の先頭にブレークポイントを設定したり、外部関数の先頭を解析用の処理を実行させるプログラムに書き換えたりすることで実現される。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】Konstantin Rozinov, "REVERSE CODE ENGINEERING: An In-Depth Analysis of the Bagle Virus",[online],[平成22年9月27日検索],インターネット<URL:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.84.2440&rep=rep1&type=pdf>
【非特許文献2】API Monitor,[online],[平成22年9月27日検索],インターネット<URL:http://www.apimonitor.com/>
【非特許文献3】Detours,[online],[平成22年9月27日検索],インターネット<URL:http://research.microsoft.com/en-us/projects/detours/>
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、上記の従来技術では、所望の位置でプログラムの動作を停止させることができない場合がある。具体的には、上記のハードウェアブレークポイント、ソフトウェアブレークポイント、データブレークポイント等のいずれのブレークポイント方式を採用したデバッガであっても、メモリアドレスに基づいてプロセスを停止させる。したがって、ブレークポイントが設定されたメモリ領域内のプログラムが別のメモリ領域にコピーされた場合には、コピー後のプログラムは、ブレークポイントが設定されたメモリアドレスと異なるメモリアドレスにアクセスされることで実行される。このため、プログラムがメモリ内でコピーされると、プロセスを停止させることができない場合がある。このことは、所望の位置でプログラムを解析できないという問題や、API等の外部関数の利用状況を正確に調査することができないという問題を招く。
【0008】
本発明は、上記に鑑みてなされたものであって、所望の位置でプログラムの動作を停止することができる解析方法、解析装置及び解析プログラムを提供することを目的とする。
【課題を解決するための手段】
【0009】
上述した課題を解決し、目的を達成するために、本発明に係る解析方法は、コンピュータが、前記コンピュータで実行されるプログラムのプロセスに割り当てられる第一メモリ空間に対応する第二メモリ空間に、前記プロセスを停止させるか否かを示す停止情報を記憶する記憶部を有し、前記プロセスにおいて命令が実行された場合に、該命令が記憶されている前記第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に基づいて、前記プロセスを停止させるか否かを判定する判定ステップと、前記実行された命令が前記第一メモリ空間内でデータを代入する代入命令である場合に、前記データの代入先となる第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の情報を、該データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に更新する更新ステップとを実行することを特徴とする。
【0010】
また、本発明に係る解析装置は、コンピュータで実行されるプログラムの解析又は解析の支援を行う解析装置であって、前記プログラムのプロセスに割り当てられる第一メモリ空間に対応する第二メモリ空間を有し、該第二メモリ空間に前記プロセスを停止させるか否かを示す停止情報を記憶する記憶部と、前記プロセスにおいて命令が実行された場合に、該命令が記憶されている前記第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に基づいて、前記プロセスを停止させるか否かを判定する判定部と、前記実行された命令が前記第一メモリ空間内でデータを代入する代入命令である場合に、前記データの代入先となる第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の情報を、該データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に更新する更新部とを有することを特徴とする。
【0011】
また、本発明に係る解析プログラムは、コンピュータで実行されるプログラムの解析又は解析の支援を行う解析プログラムであって、前記コンピュータが、前記プログラムのプロセスに割り当てられる第一メモリ空間に対応する第二メモリ空間を有し、該第二メモリ空間に前記プロセスを停止させるか否かを示す停止情報を記憶する記憶部を有し、前記コンピュータに、前記プロセスにおいて命令が実行された場合に、該命令が記憶されている前記第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に基づいて、前記プロセスを停止させるか否かを判定する判定手順と、前記実行された命令が前記第一メモリ空間内でデータを代入する代入命令である場合に、前記データの代入先となる第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の情報を、該データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に更新する更新手順とを実行させることを特徴とする。
【発明の効果】
【0012】
本発明に係る解析方法、解析装置及び解析プログラムは、所望の位置でプログラムの動作を停止することができるという効果を奏する。
【図面の簡単な説明】
【0013】
【図1】図1は、実施例1に係る解析装置の構成例を示すブロック図である。
【図2】図2は、ブレークポイント情報記憶部の一例を模式的に示す図である。
【図3】図3は、ブレークポイント判定部による処理の一例を示す図である。
【図4】図4は、ブレークポイント伝播部による処理の一例を示す図である。
【図5】図5は、ブレークポイント伝播部による処理の一例を示す図である。
【図6】図6は、ブレークポイント伝播部による処理の一例を示す図である。
【図7】図7は、実施例1に係る解析装置による処理手順を示すフローチャートである。
【図8】図8は、ブレークポイント判定部によるブレークポイント判断処理手順を示すフローチャートである。
【図9】図9は、ブレークポイント伝播部によるブレークポイント伝播処理手順を示すフローチャートである。
【図10】図10は、解析プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【0014】
以下に、本発明に係る解析方法、解析装置及び解析プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例により本発明が限定されるものではない。
【実施例1】
【0015】
[解析装置の構成]
まず、図1を用いて、実施例1に係る解析装置について説明する。図1は、実施例1に係る解析装置100の構成例を示すブロック図である。図1に示した解析装置100は、所定のプログラムを実行するコンピュータに実装される。
【0016】
ここで、プログラムを実行するコンピュータの動作例を説明する。コンピュータによってプログラムが実行される場合には、例えば、コンピュータ内部のCPU(Central Processing Unit)は、ハードディスク装置等に記憶されているプログラムを、RAM(Random Access Memory)等のメモリ空間に展開する。具体的には、CPUは、メモリ空間に、命令や値等のデータを展開する。これにより、プログラムは、プロセスとして機能する。以下では、CPUによってプログラムが展開されるメモリ空間を「プロセスメモリ空間」と表記する場合がある。
【0017】
このようにしてプロセスが生成された後に、CPUは、プロセスメモリ空間に展開された各種データを用いて各種命令を実行する。ここで、CPUによって実行される命令について簡単に説明すると、命令は、命令部とアドレス部とを含む。命令部は、実行内容を示し、例えば、加算や減算等を示す。また、アドレス部は、例えば、命令の実行に用いられる情報として、即値や、値が格納されている記憶領域のメモリアドレスを示す。また、アドレス部は、例えば、命令の実行後に用いられる情報として、命令の実行結果が格納される記憶領域のメモリアドレスを示す。なお、以下では、アドレス部のうち、命令の実行に用いられる情報を「演算元(source)」と表記し、命令の実行後に用いられる情報を「演算先(destination)」と表記する場合がある。
【0018】
実施例1に係る解析装置100は、このように動作するプログラムの解析又は解析の支援を行う。具体的には、解析装置100は、コンピュータでプログラムが実行された場合に、プロセスを監視し、ユーザ等によって予め設定された位置でプロセスを停止することで、プログラムの動作を停止する。
【0019】
以下に、解析装置100の構成及び処理について詳細に説明する。図1に示すように、解析装置100は、ブレークポイント情報記憶部110と、命令取得部120と、ブレークポイント判定部130と、ブレークポイント伝播部140とを有する。なお、図1に示した例では、解析装置100は、監視対象のプログラムから生成されたプロセス10を監視している。
【0020】
ブレークポイント情報記憶部110は、プロセス10に割り当てられたプロセスメモリ空間に対応するメモリ空間を有する。具体的には、解析装置100は、プロセスメモリ空間のメモリアドレスと一対一に対応するメモリアドレスによって示されるメモリ空間を有する。そして、ブレークポイント情報記憶部110は、かかるメモリ空間に、プロセス10を停止させるか否かを示すブレークポイント情報を記憶する。かかるブレークポイント情報は、ユーザ等によって予め設定される。なお、以下では、ブレークポイント情報記憶部110が有するメモリ空間を「ブレークメモリ空間」と表記する場合がある。
【0021】
なお、プログラムの動作を複数の位置で停止させる場合には、ブレークポイント情報記憶部110には、複数のブレークポイント情報が記憶される。実施例1におけるブレークポイント情報記憶部110は、プログラムの停止位置を特定できるように、複数のブレークポイント情報を識別できる形式で記憶する。例えば、ブレークポイント情報記憶部110は、プログラム内の位置「P1」で停止させるブレークポイント情報として「BP1」を記憶し、プログラム内の位置「P2」で停止させるブレークポイント情報として「BP2」を記憶する。
【0022】
ここで、図2を用いて、ブレークポイント情報記憶部110について説明する。図2は、ブレークポイント情報記憶部110の一例を模式的に示す図である。図2に示すように、ブレークメモリ空間111は、プロセスメモリ空間11のメモリアドレスと一対一に対応するメモリアドレスによって示されるメモリ空間である。図2に示した例では、ブレークメモリ空間111のメモリアドレス「2000」は、プロセスメモリ空間11のメモリアドレス「1000」に対応する。同様に、ブレークメモリ空間111のメモリアドレス「2001」〜「2006」は、プロセスメモリ空間11のメモリアドレス「1001」〜「1006」に対応する。
【0023】
また、ブレークポイント情報記憶部110は、ブレークメモリ空間111にブレークポイント情報を記憶する。図2では、ブレークポイント情報記憶部110が、メモリアドレス「2000」にブレークポイント情報「BP11」を記憶し、メモリアドレス「2002」にブレークポイント情報「BP12」を記憶している例を示している。図2に示した例では、ブレークメモリ空間111に格納されているブレークポイント情報「BP11」や「BP12」は、プロセス10を停止させることを示すものとする。なお、図2に示したメモリアドレスやブレークポイント情報の具体的な値は、一例であって、図示した例に限られない。
【0024】
図1の説明に戻って、命令取得部120は、CPUによって実行された命令に関する各種情報を取得する。例えば、プロセス10において実行された命令は、CPUが保持するプログラムカウンタ内のメモリアドレスが示す記憶領域に格納されている。したがって、命令取得部120は、プロセス10において命令が実行された場合には、例えば、プログラムカウンタ内のメモリアドレスが示すプロセスメモリ空間11から命令を取得する。また、命令取得部120は、CPUが保持する各種情報を取得する。ここでいうCPUが保持する各種情報とは、CPUが有するレジスタに記憶されている情報等を示し、例えば、命令の演算元、演算先を特定する情報である。以下では、CPUが保持する各種情報を「CPU情報」と表記する場合がある。
【0025】
そして、命令取得部120は、取得した命令が解析対象のプロセスにおいて実行されたか否かを判定する。命令取得部120は、取得した命令が解析対象のプロセスにおいて実行された場合には、かかる命令とCPU情報をブレークポイント判定部130及びブレークポイント伝播部140に出力する。図2に示した例では、解析装置100は、プロセス10を解析対象としているので、プロセス10において命令が実行された場合には、プロセスメモリ空間11から取得した命令やCPU情報をブレークポイント判定部130及びブレークポイント伝播部140に出力する。
【0026】
一方、命令取得部120は、取得した命令が解析対象以外のプロセスにおいて実行された場合には、かかる命令とCPU情報をブレークポイント判定部130及びブレークポイント伝播部140に出力しない。
【0027】
ブレークポイント判定部130は、プロセス10において命令が実行された場合に、ブレークポイント情報記憶部110に記憶されているブレークポイント情報に基づいて、プロセス10を停止させるか否かを判定する。
【0028】
具体的には、ブレークポイント判定部130は、命令取得部120から命令及びCPU情報を入力された場合に、かかる命令が格納されているプロセスメモリ空間11のメモリアドレスに対応するブレークメモリ空間111にブレークポイント情報が格納されているか否かを判定する。なお、プロセス10において実行された命令は、CPUが保持するプログラムカウンタ内のメモリアドレスが示す記憶領域に格納されている。したがって、ブレークポイント判定部130は、例えば、プログラムカウンタ内のメモリアドレスに対応するブレークメモリ空間111にブレークポイント情報が格納されているか否かを判定する。
【0029】
そして、ブレークポイント判定部130は、ブレークメモリ空間111にブレークポイント情報が格納されていない場合には、プロセス10を停止させない。
【0030】
一方、ブレークポイント判定部130は、ブレークメモリ空間111にブレークポイント情報が格納されている場合には、プロセス10を停止させる。そして、ブレークポイント判定部130は、ブレークメモリ空間111に格納されているブレークポイント情報や、命令の内容、CPU情報等を、ログや表示装置等に出力する。上記のように、ブレークポイント情報記憶部110は、プログラムの停止位置を特定できるように、複数のブレークポイント情報を識別できる形式で記憶している。したがって、ブレークポイント判定部130によってブレークポイント情報が出力されることにより、ユーザは、プログラムの停止位置と対応付けて、命令の内容、CPU情報等を把握することができる。
【0031】
そして、ブレークポイント判定部130は、ブレークポイント情報等を出力した後に、プロセス10を再開させる。なお、ブレークポイント判定部130は、プロセス10を自動的に再開させずに、ユーザ等によって停止中のプログラムの動作を再開させる旨の操作が行われた場合に、停止中のプロセス10を再開させてもよい。
【0032】
ここで、図3を用いて、ブレークポイント判定部130による処理の一例について説明する。図3は、ブレークポイント判定部130による処理の一例を示す図である。図3に示した例では、プロセス10において、プロセスメモリ空間11のメモリアドレス「1000」に格納されている命令が実行されたものとする。かかる場合に、命令取得部120は、プロセスメモリ空間11のメモリアドレス「1000」に格納されている命令や、CPU情報を取得し、取得した命令及びCPU情報をブレークポイント判定部130に出力する。
【0033】
ブレークポイント判定部130は、命令取得部120から命令及びCPU情報を入力された場合に、かかる命令が格納されているプロセスメモリ空間11のメモリアドレス「1000」に対応するブレークメモリ空間111のメモリアドレス「2000」が示す記憶領域にブレークポイント情報が格納されているか否かを判定する。なお、上述したように、ブレークポイント判定部130は、プログラムカウンタを取得することで、プロセス10において実行された命令が格納されている記憶領域のメモリアドレス「1000」を取得することができる。
【0034】
図3に示した例では、ブレークメモリ空間111のメモリアドレス「2000」が示す記憶領域には、ブレークポイント情報「BP11」が格納されている。したがって、ブレークポイント判定部130は、プロセス10を停止させる。このように、ブレークポイント判定部130は、プロセス10においてプロセスメモリ空間11のメモリアドレス「1000」に格納されている命令が実行された場合には、プロセス10を停止させる。
【0035】
同様に、ブレークポイント判定部130は、図3に示した例において、例えば、プロセスメモリ空間11のメモリアドレス「1002」に格納されている命令が実行された場合には、かかる命令に対応するブレークメモリ空間111にブレークポイント情報「BP12」が格納されているので、プロセス10を停止させる。一方、ブレークポイント判定部130は、例えば、プロセスメモリ空間11のメモリアドレス「1001」、「1003」〜「1006」に格納されている命令が実行された場合には、かかる命令に対応するブレークメモリ空間111にブレークポイント情報が格納されていないので、プロセス10を停止させない。
【0036】
図1の説明に戻って、ブレークポイント伝播部140は、プロセス10において命令が実行された場合に、ブレークポイント情報記憶部110のブレークメモリ空間111に記憶されているブレークポイント情報を更新する。
【0037】
実施例1におけるブレークポイント伝播部140は、実行された命令の種類や、命令に用いられた値の種別を判別することで、各種更新処理を行う。ここで、ブレークポイント伝播部140により判定される命令の種類について簡単に説明する。ブレークポイント伝播部140により判定される命令の種類として、演算元のデータを演算先のメモリアドレスが示す記憶領域に代入する「代入命令」と、演算元のデータと演算先のデータとの演算結果を、演算先のメモリアドレスが示す記憶領域に代入する「演算代入命令」とがある。
【0038】
具体的には、ブレークポイント伝播部140は、命令取得部120から命令及びCPU情報を入力された場合に、かかる命令及びCPU情報に基づいて、命令の演算元が即値、又は、メモリやレジスタ等のメモリアドレスのいずれを示すかを判定する。また、ブレークポイント伝播部140は、命令取得部120から入力された命令及びCPU情報に基づいて、かかる命令が代入命令又は演算代入命令のいずれであるかを判定する。
【0039】
そして、ブレークポイント伝播部140は、演算元がメモリやレジスタのメモリアドレスであり、かつ、命令の種類が代入命令である場合には、演算先のメモリアドレスに対応するブレークポイント情報を、演算元のメモリアドレスに対応するブレークポイント情報に更新する。言い換えれば、ブレークポイント伝播部140は、演算元のメモリアドレスに対応するブレークポイント情報を、演算先のメモリアドレスに対応するブレークポイント情報に上書きする。
【0040】
また、ブレークポイント伝播部140は、演算元がメモリやレジスタのメモリアドレスであり、かつ、命令の種類が演算代入命令である場合には、演算元のメモリアドレスに対応するブレークポイント情報を、演算先のメモリアドレスに対応するブレークポイント情報に追加する。
【0041】
また、ブレークポイント伝播部140は、演算元が即値であり、かつ、命令の種類が代入命令である場合には、演算先のメモリアドレスに対応するブレークメモリ空間111のブレークポイント情報を削除する。
【0042】
ここで、図4〜図6を用いて、ブレークポイント伝播部140による処理と、かかる処理を行う理由について説明する。図4〜図6は、ブレークポイント伝播部140による処理の一例を示す図である。なお、図4〜図6に示した例において、ブレークポイント伝播部140による処理の前には、ブレークメモリ空間111に図2に例示したブレークポイント情報が格納されているものとする。
【0043】
図4には、プロセス10において、プロセスメモリ空間11のメモリアドレス「1000」に格納されているデータをメモリアドレス「1004」に代入する命令が実行された例を示す。かかる場合に、ブレークポイント伝播部140は、命令取得部120から入力される命令やCPU情報に基づいて、プロセス10において実行された命令の演算元がメモリアドレスであり、かつ、命令の種類が代入命令であると判定する。
【0044】
そして、ブレークポイント伝播部140は、図4に斜線を付して図示したように、演算元のメモリアドレス「1000」に対応するブレークポイント情報「BP11」を、演算先のメモリアドレス「1004」に対応するブレークポイント情報に上書きする。すなわち、ブレークポイント伝播部140は、ブレークメモリ空間111のメモリアドレス「2000」に格納されているブレークポイント情報「BP11」を、メモリアドレス「2004」に上書きする。
【0045】
このようにブレークポイント情報を上書きする理由について説明する。プロセス10において実行された命令の演算元がメモリアドレスであり、かつ、かかる命令が代入命令である場合には、単に命令をコピーする処理が行われた可能性がある。すなわち、図4に示した例では、プロセスメモリ空間11のメモリアドレス「1000」に格納されている命令がメモリアドレス「1004」にコピーされた可能性がある。かかる例の場合、メモリアドレス「1000」に格納されている命令は、対応するブレークメモリ空間111にブレークポイント情報「BP11」が格納されている。したがって、メモリアドレス「1000」に格納されている命令が実行される場合には、プロセス10は停止されるべきである。つまり、メモリアドレス「1000」に格納されている命令がメモリアドレス「1004」にコピーされた場合であっても、かかるメモリアドレス「1004」にコピー命令が実行された際にも、プロセス10は停止されるべきである。
【0046】
そこで、実施例1におけるブレークポイント伝播部140は、演算元に対応するブレークポイント情報「BP11」を、演算先に対応するブレークメモリ空間111のメモリアドレス「2004」に上書きする。これにより、解析装置100は、メモリアドレス「1004」に格納されている命令が実行された場合に、プロセス10を停止させることができる。このように、ブレークポイント伝播部140は、ブレークポイント情報が付与されている命令がコピーされた場合であっても、ブレークポイント情報についてもコピーするので、プロセス10を停止させるべき命令が実行された際に確実にプロセス10を停止させることができる。
【0047】
なお、図4に示した例において、例えば、プロセスメモリ空間11のメモリアドレス「1001」に格納されているデータがメモリアドレス「1002」に代入される命令が実行されたものとする。すなわち、プロセスメモリ空間11のメモリアドレス「1001」に格納されている命令がメモリアドレス「1002」にコピーされた可能性がある。かかる例の場合、メモリアドレス「1001」に格納されている命令は、対応するブレークメモリ空間111にブレークポイント情報が格納されていない。したがって、メモリアドレス「1001」に格納されている命令が実行される場合には、プロセス10は停止されるべきでない。つまり、メモリアドレス「1001」に格納されている命令がメモリアドレス「1002」にコピーされた場合であっても、かかるメモリアドレス「1002」にコピー命令が実行された際にも、プロセス10は停止されるべきでない。
【0048】
上記例の場合には、ブレークポイント伝播部140は、命令の演算元のメモリアドレス「1001」に対応するブレークメモリ空間111にブレークポイント情報が格納されていないので、演算先に対応するブレークメモリ空間111のメモリアドレス「2002」に格納されているブレークポイント情報「BP12」を削除する。すなわち、解析装置100は、メモリアドレス「1002」に格納されている命令が実行された場合に、プロセス10を停止させないようにすることができる。
【0049】
図5には、プロセス10において、プロセスメモリ空間11のメモリアドレス「1000」に格納されているデータと、メモリアドレス「1002」に格納されているデータとの演算結果をメモリアドレス「1002」に代入する命令が実行された例を示す。かかる場合に、ブレークポイント伝播部140は、命令取得部120から入力される命令やCPU情報に基づいて、プロセス10において実行された命令の演算元がメモリアドレスであり、かつ、命令の種類が演算代入命令であると判定する。
【0050】
そして、ブレークポイント伝播部140は、図5に斜線を付して図示したように、演算元のメモリアドレス「1000」に対応するブレークポイント情報「BP11」を、演算先のメモリアドレス「1002」に対応するブレークポイント情報「BP12」に追加する。すなわち、ブレークポイント伝播部140は、ブレークメモリ空間111のメモリアドレス「2000」に格納されているブレークポイント情報「BP11」を、メモリアドレス「2002」に追加する。ブレークポイント伝播部140による追加処理の前において、ブレークメモリ空間111のメモリアドレス「2002」にブレークポイント情報「BP12」が格納されているので、ブレークポイント伝播部140による追加処理によって、メモリアドレス「2002」には、ブレークポイント情報「BP12、BP11」が格納される。
【0051】
このようにブレークポイント情報を追加する理由について説明する。プロセス10において実行された命令の演算元がメモリアドレスであり、かつ、かかる命令が演算代入命令である場合には、命令をコピーする処理が行われた可能性がある。すなわち、図4に示した例と同様に、メモリアドレス「1000」に格納されている命令がメモリアドレス「1002」にコピーされた場合であっても、かかるメモリアドレス「1002」にコピー命令が実行された際にも、プロセス10は停止されるべきである。
【0052】
ここで、以下に説明する例のように演算代入命令が実行されることが考えられる。例えば、プロセスメモリ空間11のメモリアドレス「1002」に格納されているデータに、メモリアドレス「1000」に格納されているデータを加算する演算代入命令が実行された後に、メモリアドレス「1002」に格納されているデータに、メモリアドレス「1000」に格納されているデータを減算する演算代入命令が実行されることが考えられる。また、加算と減算とが逆の順番で行われることも考えられる。
【0053】
かかる場合には、メモリアドレス「1002」に格納されているデータは、加算及び減算の演算代入命令が実行される前の状態に戻る。すなわち、メモリアドレス「1002」に命令が格納されていた場合には、上記の加算及び減算の演算代入命令が実行された場合であっても、メモリアドレス「1002」には元の命令が格納されることになる。加算及び減算の演算代入命令が実行される前には、メモリアドレス「1002」に対応するブレークメモリ空間111にブレークポイント情報「BP12」が格納されていたので、メモリアドレス「1002」に格納されている命令が実行された場合には、プロセス10は停止されるべきである。
【0054】
上記のように、ブレークポイント情報は、プログラムを停止させる情報であるとともに、停止位置を特定する情報でもある。したがって、メモリアドレス「1002」内の命令が実行された場合には、ブレークポイント情報「BP12」によってプロセス10が停止されるべきである。
【0055】
そこで、実施例1におけるブレークポイント伝播部140は、実行された命令が演算代入命令である場合には、演算元に対応するブレークポイント情報を、演算先に対応するブレークポイント情報に追加する。図5に示した例の場合には、加算及び減算の演算代入命令が実行された後には、メモリアドレス「1002」に対応するブレークメモリ空間111にブレークポイント情報「BP12、BP11」が格納される。すなわち、メモリアドレス「1002」内の命令が実行された場合には、ブレークポイント判定部130によってブレークポイント情報「BP12、BP11」が出力されることになる。これにより、ユーザは、プログラムの停止位置を把握できるとともに、メモリアドレス「1002」内の命令に対して演算代入命令が実行されたことを把握できる。
【0056】
図6には、プロセス10において、プロセスメモリ空間11のメモリアドレス「1002」に即値が代入される命令が実行された例を示す。かかる場合に、ブレークポイント伝播部140は、命令取得部120から入力される命令やCPU情報に基づいて、プロセス10において実行された命令の演算元が即値であり、かつ、命令の種類が代入命令であると判定する。そして、ブレークポイント伝播部140は、図6に斜線を付して図示したように、プロセスメモリ空間11のメモリアドレス「1002」に対応するブレークメモリ空間111のメモリアドレス「2002」に格納されているブレークポイント情報「BP12」を削除する。
【0057】
このようにブレークポイント情報を削除する理由について説明する。プロセス10において実行された命令の演算元が即値であり、かつ、かかる命令が代入命令である場合には、例えば、プログラム内で定義されているような固定値を代入する処理が行われた可能性がある。演算元が即値である場合には、かかる演算元にブレークポイント情報が付与されていない。図6に示した例では、プロセスメモリ空間11のメモリアドレス「1002」には即値が格納されるので、メモリアドレス「1002」が停止位置にはならない。
【0058】
そこで、実施例1におけるブレークポイント伝播部140は、実行された命令の演算元が即値であり、かつ、命令が代入命令である場合には、演算先に対応するブレークポイント情報を削除する。これにより、解析装置100は、不要な位置でプロセス10を停止させないようにすることができる。
【0059】
また、プロセスメモリ空間11は、開放されて、新たなプロセスに割り当てられる場合がある。かかる場合には、ブレークメモリ空間111には、新たなプロセスに対応するブレークポイント情報が記憶されるべきである。上記のように、即値の代入命令が実行された場合に、ブレークポイント情報を削除しておくことで、ブレークメモリ空間111に不要なブレークポイント情報が残ってしまうことを極力避けることができる。
【0060】
このようにして、実施例1におけるブレークポイント伝播部140は、プロセスメモリ空間11内でコピー処理が行われた場合に、演算元及び演算先の情報を用いて、ブレークポイント情報を伝播させる。
【0061】
[解析装置による処理手順]
次に、図7を用いて、実施例1に係る解析装置100による処理の手順について説明する。図7は、実施例1に係る解析装置100による処理手順を示すフローチャートである。
【0062】
図7に示すように、解析装置100の命令取得部120は、プロセス10において命令が実行されていない場合には(ステップS101否定)、プロセス10において命令が実行されるまで待機する。そして、命令取得部120は、プロセス10において命令が実行された場合には(ステップS101肯定)、プロセス10において実行された命令及びCPU情報を取得する(ステップS102)。
【0063】
続いて、命令取得部120は、ステップS101において実行された命令が解析対象のプロセスである場合には(ステップS103肯定)、ステップS102において取得した命令及びCPU情報をブレークポイント判定部130及びブレークポイント伝播部140に出力する。
【0064】
続いて、ブレークポイント判定部130は、命令取得部120から入力された命令及びCPU情報に基づいて、ブレークポイント判断処理を行う(ステップS104)。なお、ブレークポイント判定部130によるブレークポイント判断処理については、図8を用いて後に説明する。
【0065】
また、ブレークポイント伝播部140は、命令取得部120から入力された命令及びCPU情報に基づいて、ブレークポイント伝播処理を行う(ステップS105)。なお、ブレークポイント伝播部140によるブレークポイント伝播処理については、図9を用いて後に説明する。
【0066】
一方、命令取得部120は、ステップS101において実行された命令が解析対象のプロセスでない場合には(ステップS103否定)、ステップS102において取得した命令及びCPU情報をブレークポイント判定部130及びブレークポイント伝播部140に出力しない。
【0067】
そして、解析装置100は、解析対象のプロセスが終了していない場合には(ステップS106否定)、ステップS101における処理に戻る。一方、解析装置100は、解析対象のプロセスが終了した場合には(ステップS106肯定)、処理を終了する。
【0068】
次に、図8を用いて、図7のステップS104に示したブレークポイント判断処理の手順について説明する。図8は、ブレークポイント判定部130によるブレークポイント判断処理手順を示すフローチャートである。
【0069】
図8に示すように、ブレークポイント判定部130は、命令取得部120から命令及びCPU情報を入力された後に、プログラムカウンタが示すメモリアドレスに対応するブレークメモリ空間111にブレークポイント情報を取得する(ステップS201)。すなわち、ブレークポイント判定部130は、プロセス10において実行された命令が格納されているプロセスメモリ空間11のメモリアドレスに対応するブレークメモリ空間111のメモリアドレスからブレークポイント情報を取得する。
【0070】
そして、ブレークポイント判定部130は、ブレークメモリ空間111にブレークポイント情報が格納されている場合には(ステップS202肯定)、解析対象のプロセス10を停止させる(ステップS203)。
【0071】
続いて、ブレークポイント判定部130は、ブレークポイント情報等を出力し(ステップS204)、解析対象のプロセス10に関する各種情報を出力する(ステップS205)。そして、ブレークポイント判定部130は、解析対象のプロセス10を再開させる(ステップS206)。
【0072】
一方、ブレークポイント判定部130は、ステップS201において、ブレークメモリ空間111にブレークポイント情報が格納されていない場合には(ステップS202否定)、処理を終了する。
【0073】
次に、図9を用いて、図7のステップS105に示したブレークポイント伝播処理の手順について説明する。図9は、ブレークポイント伝播部140によるブレークポイント伝播処理手順を示すフローチャートである。
【0074】
図9に示すように、ブレークポイント伝播部140は、命令取得部120から命令及びCPU情報を入力された後に、CPU情報に基づいて、プロセス10において実行された命令と、かかる命令の演算元及び演算先を取得する(ステップS301)。
【0075】
続いて、ブレークポイント伝播部140は、プロセス10において実行された命令の演算元が即値であるか否かを判定する(ステップS302)。そして、ブレークポイント伝播部140は、演算元が即値である場合には(ステップS302肯定)、実行された命令が代入命令であるか否かを判定する(ステップS303)。
【0076】
そして、ブレークポイント伝播部140は、プロセス10において実行された命令が代入命令である場合には(ステップS303肯定)、演算先のメモリアドレスに対応するブレークメモリ空間111のブレークポイント情報を削除する(ステップS304)。一方、ブレークポイント伝播部140は、命令が代入命令でない場合には(ステップS303否定)、処理を終了する。
【0077】
また、ブレークポイント伝播部140は、プロセス10において実行された命令の演算元が即値でなく、メモリやレジスタのメモリアドレスである場合には(ステップS302否定)、実行された命令が代入命令であるか否かを判定する(ステップS305)。
【0078】
そして、ブレークポイント伝播部140は、プロセス10において実行された命令が代入命令である場合には(ステップS305肯定)、演算元のメモリアドレスに対応するブレークポイント情報を、演算先のメモリアドレスに対応するブレークポイント情報に上書きする(ステップS306)。一方、ブレークポイント伝播部140は、プロセス10において実行された命令が代入命令でない場合には(ステップS305否定)、かかる命令が演算代入命令であるか否かを判定する(ステップS307)。
【0079】
そして、ブレークポイント伝播部140は、プロセス10において実行された命令が演算代入命令である場合には(ステップS307肯定)、演算元のメモリアドレスに対応するブレークポイント情報を、演算先のメモリアドレスに対応するブレークポイント情報に追加する(ステップS308)。一方、ブレークポイント伝播部140は、プロセス10において実行された命令が演算代入命令でない場合には(ステップS307否定)、処理を終了する。
【0080】
[実施例1の効果]
上述してきたように、実施例1に係る解析装置100のブレークポイント情報記憶部110は、コンピュータで実行されるプログラムのプロセスに割り当てられるプロセスメモリ空間11に対応するブレークメモリ空間111を有し、かかるブレークメモリ空間111にプロセスを停止させるか否かを示すブレークポイント情報を記憶する。これにより、解析装置100は、プロセスにより実行される各命令に対して網羅的にブレークポイント情報を設定することが可能になる。
【0081】
また、解析装置100のブレークポイント伝播部140は、実行された命令が代入命令である場合に、演算先のメモリアドレスに対応するブレークポイント情報を、演算元のメモリアドレスに対応するブレークポイント情報に更新する。すなわち、実施例1に係る解析装置100は、プロセスに対して網羅的にブレークポイント情報を記憶することができるブレークポイント情報記憶部110を有するので、代入命令が行われた場合に、かかる代入命令に従ってブレークポイント情報を伝播させることができる。そして、解析装置100は、ブレークポイント情報を伝播させることにより、解析対象のプログラムがコピーされた場合であっても、コピー後のプログラムが実行された際にかかるプログラムのプロセスを停止させることができる。
【0082】
以上のことから、解析装置100は、ユーザに設定された所望の位置でプログラムの動作を停止させることができるので、API等の外部関数の利用状況を正確に調査することが可能になる。例えば、解析対象のプログラムが呼び出す可能性のある各APIの先頭にブレークポイント情報が設定されているものとする。かかる場合に、解析装置100は、解析装置100は、解析対象のプログラムに対して解析処理を行った場合に、APIが呼び出されるたびに、プロセスを停止させ、ブレークポイント情報やCPU情報をログ出力する。これにより、ユーザは、APIが呼び出された順序や回数を把握することができる。
【0083】
また、実施例1に係る解析装置100は、実行された命令が代入命令である場合に、演算元のメモリアドレスに対応するブレークポイント情報を、演算先のメモリアドレスに対応するブレークポイント情報に追加する。これにより、実施例1に係る解析装置100は、例えば、加算及び減算の演算代入命令が繰り返し実行された場合であっても、予め設定したブレークポイント情報をトリガとして監視対象のプロセスを停止させることができる。
【0084】
また、実施例1に係る解析装置100は、実行された命令の演算元が即値であり、かつ、命令の種類が代入命令である場合に、演算先のメモリアドレスに対応するブレークポイント情報を削除する。これにより、実施例1に係る解析装置100は、不要な位置でプロセスを停止させることを防止することができる。
【0085】
また、実施例1に係る解析装置100は、プロセスを停止させる場合に、ブレークポイント情報や、CPU情報等をログ等に出力する。これにより、解析装置100は、ユーザに対して、プロセスの停止位置毎に、停止時におけるメモリやレジスタ内の各種情報を提供することができる。
【0086】
なお、従来のハードウェアブレークポイントは、デバッグレジスタを用いるが、かかるデバッグレジスタの数に制限がある。例えば、Intel社のx86アーキテクチャの場合には、デバッグレジスタが4個である。したがって、従来のハードウェアブレークポイントを用いたデバッガでは、多数のブレークポイントを設定できないので、プログラムを詳細に解析する場合に適用することができなかった。例えば、数百存在するAPIの利用状況を調査する場合には適用することができなかった。
【0087】
しかし、実施例1に係る解析装置100は、上記のように、プロセスに割り当てられるプロセスメモリ空間と一対一に対応するブレークメモリ空間111を有するので、監視対照のプロセスに対して網羅的にブレークポイントを設定することができる。したがって、実施例1に係る解析装置100は、数百存在するAPIの利用状況を調査する場合にも適用することができる。
【0088】
また、従来のソフトウェアブレークポイントは、命令の書き換えを行うが、プログラムの書き換えによりデバッグが行われていることを検知するようなアンチデバッグ機能を備えたプログラムも存在する。アンチデバッグ機能付きのプログラムに対してソフトウェアブレークポイントを用いると、かかるプログラムは、デバッグを検知して、本来とは異なる動作を行う場合がある。このため、従来のソフトウェアブレークポイントでは、アンチデバッグ機能付きのプログラムを所望の箇所で停止させることができない場合がある。
【0089】
しかし、実施例1に係る解析装置100は、監視対象のプログラムを書き換えず、図4〜図6を用いて説明したように、随時実行される命令に追従するように、ブレークポイント情報を伝播させる。したがって、実施例1に係る解析装置100は、アンチデバッグ機能付きのプログラムに対しても所望の箇所でプロセス停止させることができる。
【実施例2】
【0090】
ところで、本発明に係る解析方法、解析装置及び解析プログラムは、上述した実施例以外にも、種々の異なる形態にて実施されてよい。そこで、実施例2では、本発明に係る解析方法、解析装置及び解析プログラムの他の実施例について説明する。
【0091】
[xor命令]
Intel社のx86アーキテクチャでは、レジスタをゼロクリアする場合に、「xor eax eax」といったxor命令による演算代入命令が用いられる。かかるxor命令は、演算元のデータと演算先のデータをxor演算することにより演算結果を「0」とするので、演算先のレジスタに「0」を代入する代入命令と等価であるといえる。このため、上記実施例1におけるブレークポイント伝播部140は、実行された命令がxor命令であり、かつ、演算元のデータと演算先のデータとが等しい場合には、演算先のメモリアドレスに対応するブレークメモリ空間111のブレークポイント情報を削除してもよい。
【0092】
[システム構成等]
図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示された構成要素と同一であることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、図1に示したブレークポイント判定部130とブレークポイント伝播部140とを一つのブレークポイント処理部として統合してもよい。かかる場合には、ブレークポイント処理部は、ブレークポイント判定処理を行った後に、ブレークポイント伝播処理を行う。また、図1に示したブレークポイント判定部130は、プロセスを停止させる処理を行う停止処理部と、ログを出力するログ出力部とに分散してもよい。
【0093】
また、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【0094】
[解析プログラム]
また、上記実施例1に係る解析装置100が実行する処理をコンピュータが実行可能な言語で記述した解析プログラムを作成することもできる。この場合、コンピュータが解析プログラムを実行することにより、上記実施例1と同様の効果を得ることができ、その結果、解析プログラムは、デバッガとして動作する。さらに、かかる解析プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録された解析プログラムをコンピュータに読み込ませて実行することにより上記実施例1と同様の処理を実現してもよい。以下に、図1に示した解析装置100と同様の機能を実現する解析プログラムを実行するコンピュータの一例を説明する。
【0095】
図10は、解析プログラムを実行するコンピュータ1000を示す図である。図10に示すように、コンピュータ1000は、例えば、メモリ1010と、CPU1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、シリアルポートインタフェース1050と、ビデオアダプタ1060と、ネットワークインタフェース1070とを有する。これらの各部は、バス1080によって接続される。
【0096】
メモリ1010は、ROM(Read Only Memory)1011およびRAM1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、ハードディスクドライブ1031に接続される。ディスクドライブインタフェース1040は、ディスクドライブ1041に接続される。ディスクドライブ1041には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース1050には、例えば、マウス1051およびキーボード1052が接続される。ビデオアダプタ1060には、例えば、ディスプレイ1061が接続される。
【0097】
ここで、図10に示すように、ハードディスクドライブ1031は、例えば、OS(Operating System)1091、アプリケーションプログラム1092、プログラムモジュール1093およびプログラムデータ1094を記憶する。上記実施例1で説明した解析対象のプログラムは、例えばハードディスクドライブ1031に記憶される。
【0098】
また、解析プログラムは、例えば、コンピュータ1000によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ1031に記憶される。具体的には、上記実施例1で説明した命令取得部120と同様の情報処理を実行する命令取得手順と、ブレークポイント判定部130と同様の情報処理を実行するブレークポイント判断手順と、ブレークポイント伝播部140と同様の情報処理を実行するブレークポイント伝播手順とが記述されたプログラムモジュールが、ハードディスクドライブ1031に記憶される。
【0099】
また、上記実施例1で説明したブレークポイント情報記憶部110に記憶されるデータのように、解析プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ1031に記憶される。そして、CPU1020が、ハードディスクドライブ1031に記憶されたプログラムモジュールやプログラムデータを必要に応じてRAM1012に読み出して、命令取得手順と、ブレークポイント判断手順と、ブレークポイント伝播手順とを実行する。
【0100】
なお、解析プログラムに係るプログラムモジュールやプログラムデータは、ハードディスクドライブ1031に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ1041等を介してCPU1020によって読み出されてもよい。あるいは、解析プログラムに係るプログラムモジュールやプログラムデータは、LAN(Local Area Network)やWAN(Wide Area Network)等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
【符号の説明】
【0101】
10 プロセス
11 プロセスメモリ空間
100 解析装置
110 ブレークポイント情報記憶部
111 ブレークメモリ空間
120 命令取得部
130 ブレークポイント判定部
140 ブレークポイント伝播部
1000 コンピュータ
1010 メモリ
1011 ROM
1012 RAM
1020 CPU
1030 ハードディスクドライブインタフェース
1031 ハードディスクドライブ
1040 ディスクドライブインタフェース
1041 ディスクドライブ
1050 シリアルポートインタフェース
1051 マウス
1052 キーボード
1060 ビデオアダプタ
1061 ディスプレイ
1070 ネットワークインタフェース
1080 バス
1092 アプリケーションプログラム
1093 プログラムモジュール
1094 プログラムデータ

【特許請求の範囲】
【請求項1】
コンピュータが、
前記コンピュータで実行されるプログラムのプロセスに割り当てられる第一メモリ空間に対応する第二メモリ空間に、前記プロセスを停止させるか否かを示す停止情報を記憶する記憶部を有し、
前記プロセスにおいて命令が実行された場合に、該命令が記憶されている前記第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に基づいて、前記プロセスを停止させるか否かを判定する判定ステップと、
前記実行された命令が前記第一メモリ空間内でデータを代入する代入命令である場合に、前記データの代入先となる第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の情報を、該データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に更新する更新ステップと
を実行することを特徴とする解析方法。
【請求項2】
前記更新ステップは、
前記実行された命令が前記第一メモリ空間に記憶されている第一データと第二データとの演算結果を該第二データが記憶されていた領域に代入する演算代入命令である場合に、前記第二データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間を、前記第一データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間内の停止情報に更新する
ことを特徴とする請求項1に記載の解析方法。
【請求項3】
前記更新ステップは、
前記実行された命令が前記第一メモリ空間に即値を代入する代入命令である場合に、該即値の代入先となる第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間に記憶されている停止情報を削除する
ことを特徴とする請求項1又は2に記載の解析方法。
【請求項4】
前記判定ステップは、
前記実行された命令に対応する停止情報が前記プロセスを停止させることを示す場合に、該プロセスを停止させるとともに、前記第一メモリ空間に記憶されている情報と該命令の内容と該停止情報とを含むプロセス情報を出力する
ことを特徴とする請求項1〜3のいずれか一つに記載の解析方法。
【請求項5】
コンピュータで実行されるプログラムの解析又は解析の支援を行う解析装置であって、
前記プログラムのプロセスに割り当てられる第一メモリ空間に対応する第二メモリ空間を有し、該第二メモリ空間に前記プロセスを停止させるか否かを示す停止情報を記憶する記憶部と、
前記プロセスにおいて命令が実行された場合に、該命令が記憶されている前記第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に基づいて、前記プロセスを停止させるか否かを判定する判定部と、
前記実行された命令が前記第一メモリ空間内でデータを代入する代入命令である場合に、前記データの代入先となる第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の情報を、該データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に更新する更新部と
を有することを特徴とする解析装置。
【請求項6】
コンピュータで実行されるプログラムの解析又は解析の支援を行う解析プログラムであって、
前記コンピュータが、
前記プログラムのプロセスに割り当てられる第一メモリ空間に対応する第二メモリ空間を有し、該第二メモリ空間に前記プロセスを停止させるか否かを示す停止情報を記憶する記憶部を有し、
前記コンピュータに、
前記プロセスにおいて命令が実行された場合に、該命令が記憶されている前記第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に基づいて、前記プロセスを停止させるか否かを判定する判定手順と、
前記実行された命令が前記第一メモリ空間内でデータを代入する代入命令である場合に、前記データの代入先となる第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の情報を、該データが記憶されている第一メモリ空間のメモリアドレスに対応する前記第二メモリ空間の停止情報に更新する更新手順と
を実行させることを特徴とする解析プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate