(57)【要約】【課題】  動作中である分析対象プログラムに影響を及ぼさずに分析対象プログラムの実行を追跡してデバギングするか、プロファイリングすることができるプログラムの動的分析方法及びその装置を提供する。【解決手段】  本発明の一態様によるプログラムの動的分析方法は、分析対象プログラムを構成する関数の最初の命令語実行開始と最後の命令語実行直後に例外命令語を挿入、実行することによって、関数の実行前後の環境値が分かる。これにより、分析しようとするプログラムに影響を与えずに動的にプログラムを分析することができる。【選択図】      図３
2010238228.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを構成する関数の最初の命令語実行開始時に例外命令語を挿入して実行することによって、前記関数の実行前の環境値を保存する段階と、
前記関数を構成する最後の命令語が実行された後にリターンアドレスに進行すれば、例外命令語が実行されて、前記関数の実行直後の環境値を保存する段階とを含むことを特徴とするプログラムの動的分析方法。
【請求項２】
前記例外命令語が実行されれば、ＯＳ領域の例外処理ハンドラーによって点検ハンドラー（ｐｒｏｂｅ  ｈａｎｄｌｅｒ）が実行されて、前記関数の環境値を保存することを特徴とする請求項１に記載のプログラムの動的分析方法。
【請求項３】
前記関数の実行前の環境値を保存する段階は、
前記関数を構成する命令語を保存した後に例外命令語に置き換える段階と、
前記例外命令語を実行させて前記関数の実行前の環境値を保存する段階と、
前記保存された元の命令語を復旧して実行する段階とを含むことを特徴とする請求項１に記載のプログラムの動的分析方法。
【請求項４】
前記関数の実行前の環境値を保存する段階は、
前記関数を構成する最初の命令語を保存した後、その位置に前記例外命令語を挿入する段階と、
前記例外命令語が実行されて、前記関数実行前の環境値を保存して前記関数のリターンアドレスを変更した後、前記関数を構成する二番目の命令語を保存した後、その位置に例外命令語を挿入する段階と、
前記関数を構成する最初の命令語が復旧されて実行された後、前記二番目の命令語位置に挿入された例外命令語が実行されれば、前記関数を構成する最初の命令語と三番目の命令語位置に例外命令語を挿入する段階と、
前記二番目の命令語が復旧されて実行された後、前記三番目の命令語位置に挿入された例外命令語が実行されれば、前記二番目の命令語位置に例外命令語を再び挿入して前記三番目の命令語を復旧して実行する段階とを含むことを特徴とする請求項１に記載のプログラムの動的分析方法。
【請求項５】
前記関数のリターンアドレスは、
前記関数を構成する二番目の命令語位置に設定されることを特徴とする請求項４に記載のプログラムの動的分析方法。
【請求項６】
前記関数の実行直後の環境値を保存する段階は、
前記関数を構成する最後の命令語が実行されれば、そのリターンアドレスに設定された二番目の命令語位置に実行位置が移動する段階と、
前記二番目の命令語位置に挿入された例外命令語が実行されて、前記関数の実行直後の環境値を運用体制領域から分かる段階とを含むことを特徴とする請求項１に記載のプログラムの動的分析方法。
【請求項７】
プログラムを構成する関数の命令語を保存するか、その位置に例外命令語を挿入する命令語操作部と、
前記例外命令語の実行によって前記関数の環境値を保存する点検部とを含むことを特徴とするプログラムの動的分析装置。
【請求項８】
前記命令語操作部は、
前記関数を構成する最初の命令語実行開始時に例外命令語を挿入して実行し、前記関数を構成する最後の命令語が実行されれば、リターンアドレスに進行して例外命令語が実行されるように命令語を管理することを特徴とする請求項７に記載のプログラムの動的分析装置。
【請求項９】
前記点検部は、
前記関数を構成する最初の命令語に挿入された例外命令語の実行によって前記関数の実行直前の環境値が分かり、前記関数のリターンアドレスに挿入された例外命令語の実行によって前記関数の実行直後の環境値が分かることを特徴とする請求項７に記載のプログラムの動的分析装置。
【請求項１０】
前記命令語操作部及び前記点検部は、
ＯＳ領域の例外処理ハンドラーによって実行される点検ハンドラーによって具現されることを特徴とする請求項７に記載のプログラムの動的分析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの実行追跡及び分析に係り、より詳細には、動作中であるプログラムに影響を与えずにプログラムを動的に追跡して分析する方法及びその装置に関する。
【背景技術】
【０００２】
応用プログラムを開発する過程で、プログラムやシステムのエラーを探し出すためのさまざまな方法が存在する。例えば、分析対象プログラムを構成する命令語（ｉｎｓｔｒｕｃｔｉｏｎ）のいくつかの位置に例外命令語（Ｂｒｅａｋ  ｉｎｓｔｒｕｃｔｉｏｎ）を挿入して例外処理状況（Ｅｘｃｅｐｔｉｏｎ）を発生させ、それによって作られるハードウェア信号をオペレーティングシステム（Ｏｐｅｒａｔｉｏｎ  Ｓｙｓｔｅｍ）が感知して追跡プログラムを駆動することで問題点を探し出すことができる。このような方法の例として、ＳＳＩＬ（Ｓｉｎｇｌｅ−Ｓｔｅｐｐｉｎｇ  Ｉｎ  Ｌｉｎｅ）、ＳＳＯＬ（Ｓｉｎｇｌｅ−Ｓｔｅｐｐｉｎｇ  Ｏｕｔ  ｏｆ  Ｌｉｎｅ）などがある。
【０００３】
この過程で、分析対象プログラム自体の実行追跡だけではなく、このプログラムの実行を支援するＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）の動作もともに追跡されなければならない。このために、相異なる領域、すなわち、分析対象プログラムが実行されるアプリケーション領域とＯＳ領域とで生成されて処理されるデータを一貫した方法で管理しなければならない。
【０００４】
しかし、この過程で適切ではない領域で分析対象プログラムが実行されることもあり、分析対象プログラムのアドレスを場合によって変更しなければならないなど、メモリ管理やアドレス管理が複雑になりうる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、動作中である分析対象プログラムに影響を及ぼさずに分析対象プログラムの実行を追跡してデバギングするか、プロファイリングすることができるプログラムの動的分析方法及びその装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一態様によるプログラムの動的分析方法は、分析対象プログラムを構成する関数の最初の命令語実行開始と最後の命令語実行直後に例外命令語を挿入、実行することによって、関数の実行前後の環境値が分かる。
【０００７】
一態様によって、プログラムを構成する関数の最初の命令語実行開始時に例外命令語を挿入して実行することによって、関数の実行前の環境値を保存し、関数を構成する最後の命令語が実行された後にリターンアドレスに進行すれば、例外命令語が実行されて、関数の実行直後の環境値を保存する。
【０００８】
この際、関数を構成する命令語を保存した後に例外命令語に代替し、例外命令語を実行させた後には、保存された元の命令語を復旧して実行することによって、関数の実行に影響を及ぼさないようにできる。
【０００９】
また、本発明の他の態様によるプログラムの動的分析装置は、プログラムを構成する関数の命令語を保存するか、その位置に例外命令語を挿入する命令語操作部と、例外命令語の実行によって関数の環境値を保存する点検部と、を含む。
【図面の簡単な説明】
【００１０】
【図１】本発明の一実施形態による動的分析方法での例外処理を説明するための参照図である。
【図２Ａ】本発明の一実施形態による動的分析手続きを詳しく説明する図である。
【図２Ｂ】本発明の一実施形態による動的分析手続きを詳しく説明する図である。
【図２Ｃ】本発明の一実施形態による動的分析手続きを詳しく説明する図である。
【図２Ｄ】本発明の一実施形態による動的分析手続きを詳しく説明する図である。
【図２Ｅ】本発明の一実施形態による動的分析手続きを詳しく説明する図である。
【図２Ｆ】本発明の一実施形態による動的分析手続きを詳しく説明する図である。
【図２Ｇ】本発明の一実施形態による動的分析手続きを詳しく説明する図である。
【図３】本発明の一実施形態による動的分析方法のフローチャートである。
【図４】本発明の一実施形態による動的分析装置の構成図である。
【発明を実施するための形態】
【００１１】
以下、添付した図面を参照して、本発明の望ましい実施形態を詳しく説明する。本発明を説明するに当って、関連した公知機能または構成についての具体的な説明が、本発明の要旨を不明にする恐れがあると判断される場合には、その詳細な説明を省略する。また、後述する用語は、本発明での機能を考慮して定義された用語であって、これは、ユーザ、運用者の意図または慣例などによって変わりうる。したがって、その定義は、本明細書全般に亘った内容に基づいて下されなければならない。
【００１２】
図１は、本発明の一実施形態による動的分析方法での例外処理を説明するための参照図である。図１に示されたように、応用プログラムには、そのプログラムの遂行に必要なさまざまな関数（ｆｕｎｃｔｉｏｎ）が含まれうる。そのうち、分析しようとする関数１１０があれば、この関数１１０は、さまざまな命令語で構成されている。そして、関数１１０の実行時に、これら命令語を一定数ずつ束ねたページ１１２、１１４単位でシステムメモリにローディングされて関数１１０が実行される。すなわち、関数１１０を実行するため、関数を構成するあらゆる命令語を一回にシステムメモリにローディングした後に実行するものではなく、まず、第１ページ１１２をシステムメモリにローディングして実行した後、次のページである第２ページ１１４をシステムメモリにローディングして実行する。
【００１３】
一方、関数１１０の実行過程で、アプリケーション領域１０だけではなく、ＯＳ領域２０で動作するさまざまなシステムコール（ｓｙｓｔｅｍ  ｃａｌｌ）、ハンドラー（ｈａｎｄｌｅｒ）などが実行可能である。関数１１０の実行時において、アプリケーション領域１０からＯＳ領域２０への進入は、例外処理状況によってなされ、例外処理状況が発生すれば、例外処理ハンドラー（ｅｘｃｅｐｔｉｏｎ  ｈａｎｄｌｅｒ）１２０が呼び出されて点検ハンドラー（ｐｒｏｂｅ  ｈａｎｄｌｅｒ）１３０が実行される。
【００１４】
点検ハンドラー１３０は、例外処理情報保存部１４０に保存されている例外命令語と点検ポイントアドレス情報とを有し、例外処理と関連した手続きを遂行する。例外処理と関連した詳細な手続きは、以下、図２Ａないし図２Ｇを参照して詳しく説明する。
【００１５】
図２Ａないし図２Ｇは、本発明の一実施形態による動的分析手続きを詳しく説明する図である。
【００１６】
まず、図２Ａに示されたように、関数を実行するためには、その関数を構成する第１命令語（１ｓｔ  ｉｎｓｔｒｕｃｔｉｏｎ）２１１を実行させなければならない。ところで、この第１命令語２１１が含まれたページ２１０がまだシステムメモリにローディングされていない場合、ページエラー（ｐａｇｅ  ｆａｕｌｔ）が発生する。ページエラーが発生すれば、ページエラーハンドラー（ｐａｇｅ  ｆａｕｌｔ  ｈａｎｄｌｅｒ）２２０が実行されて当該ページをシステムメモリにローディングする。
【００１７】
そして、ページエラーリターンハンドラー（ｐａｇｅ  ｆａｕｌｔ  ｒｅｔｕｒｎ  ｈａｎｄｌｅｒ）２３０を実行させて第１命令語２１１を例外命令語に置き換え、第１命令語２１１は別途に保存する。一方、例外処理情報保存部２４０は、例外命令語、点検する位置についてのアドレス情報などを保存している。
【００１８】
図２Ａに示されたように、当該ページがシステムメモリにローディングされれば、当該ページの第１命令語２１１が実行される。ところで、ページエラーリターンハンドラー２３０によって第１命令語２１１が例外命令語２１２に置き換えられたので、図２Ｂに示されたように、ページ２１０の最初の位置にある例外命令語２１２が実行される。
【００１９】
次いで、図２Ｃに示されたように、例外命令語２１２が実行されれば、例外状況（ｅｘｃｅｐｔｉｏｎ）が発生して例外処理ハンドラー２５０が呼び出される。例外処理ハンドラー２５０は、点検ハンドラー２６０を実行する。点検ハンドラー２６０は、まず、環境値を測定して（ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ）保存する。環境値は、分析対象プログラムのエラーを探し出すために、ユーザが知ろうとするさまざまな値であって、レジスタの値、特定変数の値、スタックの位置など、あらゆるものになりうる。そして、点検ハンドラー２６０は、この関数のリターンアドレスを二番目の命令語の位置値に変更する。また、二番目の命令語を保存した後、この位置の命令語を例外命令語に代替する。そして、最初の命令語である第１命令語２１１を呼び出して元の位置に復旧する。
【００２０】
そうすると、図２Ｄに示されたように、復旧された第１命令語２１１が実行され、次の命令語の実行位置である二番目の命令語にプログラム実行位置が移動する。二番目の命令語は、図２Ｃに示されたように、点検ハンドラー２６０によって例外命令語２１３に置き換えられたので、その実行によって例外状況が発生して例外処理ハンドラー２５０が再び呼び出され、例外処理ハンドラー２５０は、点検ハンドラー２６０を実行する。
【００２１】
点検ハンドラー２６０は、最初の命令語と三番目の命令語とを例外命令語に代替して二番目の命令語を復旧する。一方、最初の命令語と三番目の命令語は、別途に保存される。
【００２２】
次いで、図２Ｅに示されたように、復旧された二番目の命令語２１４を実行した後、次の実行位置である三番目の命令語に移動する。三番目の命令語は、図２Ｄに示されたように、点検ハンドラー２６０によって例外命令語２１５に置き換えられたので、その実行によって例外状況が発生して例外処理ハンドラー３５０が再び呼び出され、例外処理ハンドラー２５０は、点検ハンドラー２６０を実行する。
【００２３】
点検ハンドラー２６０は、二番目の命令語を再び例外命令語に代替して三番目の命令語を復旧する。そうすると、図２Ｆに示されたように、二番目の命令語は、例外命令語２１３に取り替えられ、三番目の命令語である第３命令語２１６が実行される。以後、続いて次の命令語が実行されて関数の最後まで実行される。
【００２４】
関数が最後まで実行されれば、図２Ｇに示されたように、リターン命令２１７が示す位置である二番目の命令語位置に移動し、二番目の命令語は、図２Ｆに示されたように、例外命令語２１３に置き換えられたので、その実行によって例外状況が発生して、例外処理ハンドラー２５０が呼び出され、例外処理ハンドラー２５０は、点検ハンドラー２６０を実行する。点検ハンドラー２６０は、まず、環境値を測定して保存する。環境値は、分析対象プログラムのエラーを探し出すために、ユーザが知ろうとするさまざまな値であって、レジスタの値、特定変数の値、スタックの位置など、あらゆるものになりうる。このようにして、関数の実行直前と実行直後との環境値が分かる。
【００２５】
図３は、本発明の一実施形態による動的分析方法のフローチャートである。
【００２６】
まず、分析しようとするプログラムを構成する関数の命令語が入れられたページをメモリにローディングする（Ｓ３１０）。これは、図２Ａを参照して、前述したように、ページエラーハンドラー２２０によって実行可能である。
【００２７】
そして、プログラムを構成する関数の最初の命令語実行開始時に例外命令語を挿入して実行することによって、関数の実行前の環境値を保存する。これを詳細に説明すれば、例外命令語及び検査ポイント関連データを参照して、例外命令語を挿入するか、元の命令語を復旧する点検ハンドラーを実行する（Ｓ３２０）。例外命令語が実行されれば、運用体制領域の例外処理ハンドラー２５０によって点検ハンドラー２６０が実行されて、この関数の開始前環境値を保存する（Ｓ３３０）。環境値は、分析対象プログラムのエラーを探し出すために、ユーザが知ろうとするさまざまな値であって、レジスタの値、特定変数の値、スタックの位置など、あらゆるものになりうる。
【００２８】
この際、関数を構成する命令語は、例外命令語に取り替えられる前にあらかじめ保存されて、例外命令語が実行された後には、保存された元の命令語を復旧して実行することによって、関数の実行に影響を及ぼさないようにする。
【００２９】
例外命令語の挿入と操作とについてより詳細に説明すれば、まず、関数を構成する最初の命令語を保存した後、その位置に例外命令語を挿入する。そして、例外命令語が実行されて、関数実行前の環境値を保存し、その関数を構成する二番目の命令語を保存した後、その位置に例外命令語を挿入する。一方、関数のリターンアドレスを二番目の命令語の位置に変更する。次いで、関数を構成する最初の命令語が復旧されて実行された後、二番目の命令語位置に挿入された例外命令語が実行されれば、関数を構成する最初の命令語と三番目の命令語位置に例外命令語を挿入する。二番目の命令語が復旧されて実行された後、三番目の命令語位置に挿入された例外命令語が実行されれば、二番目の命令語位置に例外命令語を再び挿入して三番目の命令語を復旧して実行する。以後は、関数の元の命令語を順に遂行する。
【００３０】
前述したように、関数を構成する命令語が実行し続けながら、点検ハンドラー２６０の操作によって例外命令語が元の命令語に代替されうる。その詳細な過程は、図２Ｃないし図２Ｆを参照して、詳述した通りである。このようにして、例外命令語の操作による例外処理を実行するか、元の命令語が関数の最後まで実行される（Ｓ３４０）。
【００３１】
関数の最後の命令語まで実行されたか否かを判断し（Ｓ３５０）、最後まで実行されれば、リターンアドレスが指示する位置に戻って例外命令語を実行して、関数実行直後の環境値を保存する（Ｓ３６０）。このような過程を通じて関数を構成する最後の命令語が実行された後にリターンアドレスに進行すれば、例外命令語が実行されて、関数の実行直後の環境値を保存する。すなわち、関数を構成する最後の命令語が実行されれば、そのリターンアドレスに設定された二番目の命令語位置に実行位置が移動し、その位置に挿入された例外命令語が実行されて関数の実行直後の環境値を運用体制領域から分かる。
【００３２】
図４は、本発明の一実施形態による動的分析装置の構成図である。
【００３３】
本発明の一実施形態による動的分析装置は、命令語操作部４２０、点検部４１０及びデータベース４３０を含む。命令語操作部４２０は、プログラムを構成する関数の命令語を保存するか、その位置に例外命令語を挿入する。すなわち、関数を構成する最初の命令語実行開始時に例外命令語を挿入して実行し、関数を構成する最後の命令語が実行されれば、リターンアドレスに進行して例外命令語が実行されるように命令語を管理する。例外命令語の挿入手続きとその管理は、図２Ａないし図２Ｇを参照して前述した通りである。
【００３４】
点検部４１０は、例外命令語の実行によって関数の環境値を保存する。すなわち、点検部４１０は、関数を構成する最初の命令語に挿入された例外命令語の実行によって関数の実行直前の環境値が分かり、関数のリターンアドレスに挿入された例外命令語の実行によって関数の実行直後の環境値が分かる。データベース４３０は、例外命令語と、点検する位置のアドレス情報などを保存している。
【００３５】
一方、命令語操作部４２０及び点検部４１０は、ＯＳ領域の例外処理ハンドラーによって実行される点検ハンドラーによって具現可能である。
【００３６】
本発明の一実施形態によれば、分析対象プログラムを構成する関数を動的に追跡するに当たって、その具体的な追跡結果を保存するための処理プログラムをＯＳ領域で実行することができる。そして、分析対象の元のプログラムの実行に影響を及ぼさずにプログラムの遂行を追跡することができる。
【００３７】
一方、本発明の一実施形態による方法は、コンピュータで読み取り可能な記録媒体にコンピュータで読み取り可能なコードとして具現しうる。コンピュータで読み取り可能な記録媒体は、コンピュータシステムによって読み取れるデータが保存されるあらゆる種類の記録装置を含む。
【００３８】
コンピュータで読み取り可能な記録媒体の例としては、ＲＯＭ、ＲＡＭ、ＣＤ−ＲＯＭ、磁気テープ、フロッピー（登録商標）ディスク、光データ保存装置などがあり、また、キャリアウェーブ（例えば、インターネットを通じる伝送）の形態で具現することを含む。また、コンピュータで読み取り可能な記録媒体は、ネットワークで連結されたコンピュータシステムに分散されて、分散方式でコンピュータで読み取り可能なコードとして保存されて実行可能である。そして、本発明を具現するための機能的な（ｆｕｎｃｔｉｏｎａｌ）プログラム、コード及びコードセグメントは、本発明が属する技術分野のプログラマーによって容易に推論されうる。
【００３９】
以上、本発明の望ましい実施形態を中心に説明した。当業者ならば、本発明が、本発明の本質的な特性から外れない範囲で変形された形態として具現可能であることを理解できるであろう。したがって、開示された実施形態は限定的な観点ではなく、説明的な観点で考慮されなければならない。本発明の範囲は、特許請求の範囲に示されており、それと同等な範囲内にあるあらゆる差異点は、本発明に含まれたものと解析されなければならない。
【産業上の利用可能性】
【００４０】
本発明は、プログラムの動的分析方法及びその装置関連の技術分野に適用可能である。
【図１】
2010238228.tif 000003
【図２Ａ】
2010238228.tif 000004
【図２Ｂ】
2010238228.tif 000005
【図２Ｃ】
2010238228.tif 000006
【図２Ｄ】
2010238228.tif 000007
【図２Ｅ】
2010238228.tif 000008
【図２Ｆ】
2010238228.tif 000009
【図２Ｇ】
2010238228.tif 000010
【図３】
2010238228.tif 000011
【図４】
2010238228.tif 000012