JP4763743B2 - プログラム動作比較装置及び方法及びプログラム - Google Patents
プログラム動作比較装置及び方法及びプログラム Download PDFInfo
- Publication number
- JP4763743B2 JP4763743B2 JP2008087886A JP2008087886A JP4763743B2 JP 4763743 B2 JP4763743 B2 JP 4763743B2 JP 2008087886 A JP2008087886 A JP 2008087886A JP 2008087886 A JP2008087886 A JP 2008087886A JP 4763743 B2 JP4763743 B2 JP 4763743B2
- Authority
- JP
- Japan
- Prior art keywords
- function
- program
- execution
- function block
- execution history
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Description
プログラムを実行するプログラム実行手段40と、
プログラム自身が関数の実行履歴を出力可能なように該プログラムの実行ファイルを変更し、プログラム実行手段40により、実行した該プログラムの実行履歴を取得して実行履歴記憶手段180に格納するプログラム実行履歴収集手段100と、
実行履歴記憶手段180のプログラムの実行履歴を、実行された該プログラムの関数コールスタックの深さと、出現パターンに基づいて関数コールシーケンスの局所を関数ブロックとして区切り、関数ブロック記憶手段250に格納するプログラム実行履歴分割手段200と、
関数ブロック記憶手段250の関数ブロックと、プログラム実行手段40により実行中のプログラムの関数コールシーケンスを比較し、異なる箇所を検出し、比較結果記憶手段370に格納する比較手段300と、を有する。
プログラムの実行履歴として取得する関数について、該関数についての情報を収集するためのプログラムの実行ファイルを変更する実行ファイル変更手段と、
取得する関数について、詳細な情報を取得するために必要となる値を取得するデバッグ情報取得手段と、
プログラムの実行ファイル内で定義されている関数や、ユーザが指定した共有ライブラリの関数について、該プログラムがプログラム実行手段により実行された時刻、関数名、引数、コールスタックの深さの情報を取得し、取得した情報を実行履歴記憶手段180に登録する実行履歴収集手段と、を有する。
実行履歴記憶手段180に格納されている履歴情報を読み込んで、関数の呼び出しのみに着目し、呼び出した関数のコールスタックの深さの値が小さくなったところで区切り、区切られた箇所を1つの関数ブロックとする実行履歴区分手段と、
関数ブロック内の関数がその実行順序も含め同一となる関数ブロックが存在するかを検索し、存在する場合は、その次の関数ブロックについても関数ブロック内の関数がその実行順序も含め、同一であるかを調べる処理を繰り返し、同一である関数ブロックが存在した場合には、その一連の長さが最も長い関数ブロックに対して、複数の関数ブロックを1つの関数ブロックとしてまとめ、関数ブロック記憶手段250に登録する手段と、
関数ブロック内の関数の引数、返り値が、全ての関数において同一か、同一の値を持つ関数が存在するか、全ての関数において異なっているかを関数と関連付けした関数ブロック記憶手段250に登録する手段と、を有する。
関数ブロック記憶手段250から関数ブロックを読み出して、該関数ブロックとプログラム実行手段により実行中のプログラムの関数コールシーケンスを比較することにより、該実行中のプログラムの動作がユーザの想定した動作と異なる箇所を検出する手段と、
関数コールシーケンスのみの比較では異なる箇所が検出できなかった場合に、関数ブロック内の実行された関数の引数や返り値と、実行中のプログラムが実行した関数の引数や返り値を比較することにより、該実行中のプログラムの動作がユーザの想定した動作と異なる箇所を検出する手段と、を有する。
プログラム自身が関数の実行履歴を出力可能なように該プログラムの実行ファイルを変更し、該プログラムを実行する機能(プログラム実行手段)により、実行した該プログラムの実行履歴を取得して実行履歴記憶手段に格納するプログラム実行履歴収集ステップ(ステップ1)と、
実行履歴記憶手段のプログラムの実行履歴を、実行された該プログラムの関数コールスタックの深さと、出現パターンに基づいて関数コールシーケンスの局所を関数ブロックとして区切り、関数ブロック記憶手段に格納するプログラム実行履歴分割ステップ(ステップ2)と、
関数ブロック記憶手段の関数ブロックと、プログラムを実行する機能により実行中のプログラムの関数コールシーケンスを比較し、異なる箇所を検出し、比較結果記憶手段に格納する比較ステップ(ステップ3)と、を行う。
プログラムの実行履歴として取得する関数について、該関数についての情報を収集するためのプログラムの実行ファイルを変更する実行ファイル変更ステップと、
呼ばれた関数から呼び出し元に戻るときの時刻、呼ばれた関数内で変更された引数、返り値を取得するデバッグ情報取得ステップと、
プログラムの実行ファイル内で定義されている関数や、ユーザが指定した共有ライブラリの関数について、該プログラムがプログラムを実行する機能により実行された時刻、関数名、引数、コールスタックの深さの値、返り値を含む情報を取得し、取得した情報を実行履歴記憶手段に登録する実行履歴収集ステップと、を行う。
実行履歴記憶手段に格納されている履歴情報を読み込んで、関数の呼び出しのみに着目し、呼び出した関数のコールスタックの深さの値が小さくなったところで区切り、区切られた箇所を1つの関数ブロックとする実行履歴区分ステップと、
関数ブロック内の関数がその実行順序も含め同一となる関数ブロックが存在するかを検索し、存在する場合は、その次の関数ブロックについても関数ブロック内の関数がその実行順序も含め、同一であるかを調べる処理を繰り返し、同一である関数ブロックが存在した場合には、その一連の長さが最も長い関数ブロックに対して、複数の関数ブロックを1つの関数ブロックとしてまとめ、関数ブロック記憶手段に登録するステップと、
関数ブロック内の関数の引数、返り値が、全ての関数において同一か、同一の値を持つ関数が存在するか、全ての関数において異なっているかを関数と関連付けした関数ブロック記憶手段に登録するステップと、を行う。
関数ブロック記憶手段から関数ブロックを読み出して、該関数ブロックとプログラムを実行する機能により実行中のプログラムの関数コールシーケンスを比較することにより、該実行中のプログラムの動作がユーザの想定した動作と異なる箇所を検出するステップと、
関数コールシーケンスのみの比較では異なる箇所が検出できなかった場合に、関数ブロック内の実行された関数の引数や返り値と、実行中のプログラムが実行した関数の引数や返り値を比較することにより、該実行中のプログラムの動作がユーザの想定した動作と異なる箇所を検出するステップと、を行う。
図3は、本発明の一実施の形態におけるプログラム実行履歴収集装置の構成を示す。
・動的リンクされるライブラリ内で定義されている関数の実行履歴を取得するライブラリ名:
ディスクに設定ファイルを作成し、設定ファイルからこれらの情報を読み出す方式にすることもできる。
・置き換えた元の機械語命令;
・置き換えた後のリターンアドレス(関数実行履歴取得部を実行する命令の次の命令のアドレス);
ステップ12140) 「置き換えた元の機械語命令」に、「置き換えた元の機械語命令」の次の命令のアドレスにジャンプする命令(jmp)を追加する。
・関数を呼び出す命令のアドレス;
・置き換えた元の機械語命令;
・置き換えた後のリターンアドレス;
等である。
・オフセット;
・有効アドレスの範囲;
・格納場所(レジスタ名、ベースポインタからの距離);
である。
・ソースファイル名;
・コンパイル時のディレクトリ名;
である。
・関数名;
・マッピングされるアドレス範囲;
・ソースファイルに記述されている位置;
・返り値の型情報;
である。
・引数名;
・ソースファイルに記述されている位置;
・型情報;
・値の格納場所(レジスタ名、ベースポインタからの距離、デバッグ位置情報テーブルのオフセット);
である。関数を実行中に格納場所が変更されない変数や引数の「値の格納場所」には、「レジスタ名」、「ベースポインタから距離」がデバッグ情報テーブルに登録されている。変更される変数や引数の「値の格納場所」には、「デバッグ位置情報テーブルのオフセット」がデバッグ情報に登録されている。「レジスタ」は、値が格納されているレジスタを示す。「ベースポインタからの距離」は、ベースポインタから距離、つまり、メモリ上の位置を示す。
−eax,ebx,ecx,edx
であり、「インデックスレジスタ」は、
−esi,edi
である。
・フックした関数の関数名;
・フックした関数のマッピングされるアドレス;
・取得した引数;
である。
ステップ14260) シンボル情報格納部150からフックされた関数のレコードを読み出す。
次に、プログラム実行履歴分割装置について説明する。
上記のプログラム実行履歴分割装置200によって作成した関数ブロックが、ユーザが想定しているプログラムの実行結果であると定義する。このため、エラーが発生したプログラムの関数コールシーケンスに、作成した関数ブロックとは異なる関数が実行されている箇所、これらの箇所においても、関数の呼び出し関係が同一となる関数が存在しない関数、特異性が高い関数にバグが存在する可能性が高い。これは、プログラムのバグとは、開発者の想定していない入力値がプログラムに入力されることによって、顕在化するためである。さらに、プログラムの開発や検証で使用している計算機の性能と、このプログラムを実行している計算機の性能が異なることによっても顕在化する。
20 プログラムの実行ファイル
30 ライブラリの実行ファイル
40 プログラム実行手段、プログラム実行部
100 プログラム実行履歴収集手段、プログラム実行履歴収集装置
110 実行ファイル変更部
120 デバッグ情報取得部
130 実行履歴収集部
140 実行履歴を取得する実行ファイルリスト(メモリまたはディスク)
150 シンボル情報格納部(メモリ)
160 デバッグ情報格納部(メモリ)
170 レジスタリスト(メモリ)
180 実行履歴記憶手段、実行履歴格納部
200 プログラム実行履歴分割手段、プログラム実行履歴分割装置
210 実行履歴読込み部
220 実行履歴区分部
230 関数ブロック生成部
240 関数ブロック登録部
250 関数ブロック記憶手段、関数ブロックテーブル
300 比較手段、プログラム実行履歴比較装置
310 関数ブロック読込み部
320 プログラム実行履歴収集部
330 実行履歴データ格納部
340 関数ブロックと実行履歴の比較部
350 関数ブロック登録部
360 関数登録部
370 比較結果記憶手段、比較結果格納テーブル
Claims (9)
- プログラムの動作の差異を発見するためのプログラム動作比較装置であって、
プログラムを実行するプログラム実行手段と、
プログラム自身が関数の実行履歴を出力可能なように該プログラムの実行ファイルを変更し、前記プログラム実行手段により、実行した該プログラムの実行履歴を取得して実行履歴記憶手段に格納するプログラム実行履歴収集手段と、
前記実行履歴記憶手段のプログラムの実行履歴を、実行された該プログラムの関数コールスタックの深さと、出現パターンに基づいて関数コールシーケンスの局所を関数ブロックとして区切り、関数ブロック記憶手段に格納するプログラム実行履歴分割手段と、
前記関数ブロック記憶手段の前記関数ブロックと、前記プログラム実行手段により実行中のプログラムの関数コールシーケンスを比較し、異なる箇所を検出し、比較結果記憶手段に格納する比較手段と、
を有することを特徴とするプログラム動作比較装置。 - 前記プログラム実行履歴収集手段は、
プログラムの実行履歴として取得する関数について、該関数についての情報を収集するためのプログラムの実行ファイルを変更する実行ファイル変更手段と、
取得する関数について詳細な情報を取得するために必要となる値を取得するデバッグ情報取得手段と、
プログラムの実行ファイル内で定義されている関数や、ユーザが指定した共有ライブラリの関数について、該プログラムが前記プログラム実行手段により実行された時刻、関数名、引数、コールスタックの深さの値、返り値を含む情報を取得し、取得した情報を実行履歴記憶手段に登録する実行履歴収集手段と、
を有する請求項1記載のプログラム動作比較装置。 - 前記プログラム実行履歴分割手段は、
前記実行履歴記憶手段に格納されている履歴情報を読み込んで、関数の呼び出しのみに着目し、呼び出した関数のコールスタックの深さの値が小さくなったところで区切り、区切られた箇所を1つの関数ブロックとする実行履歴区分手段と、
前記関数ブロック内の関数がその実行順序も含め同一となる関数ブロックが存在するかを検索し、存在する場合は、その次の関数ブロックについても関数ブロック内の関数がその実行順序も含め、同一であるかを調べる処理を繰り返し、同一である関数ブロックが存在した場合には、その一連の長さが最も長い関数ブロックに対して、複数の関数ブロックを1つの関数ブロックとしてまとめ、前記関数ブロック記憶手段に登録する手段と、
前記関数ブロック内の関数の引数、返り値が、全ての関数において同一か、同一の値を持つ関数が存在するか、全ての関数において異なっているかを関数と関連付けした前記関数ブロック記憶手段に登録する手段と、
を有する請求項1記載のプログラム動作比較装置。 - 前記比較手段は、
前記関数ブロック記憶手段から前記関数ブロックを読み出して、該関数ブロックと前記プログラム実行手段により実行中のプログラムの関数コールシーケンスを比較することにより、該実行中のプログラムの動作がユーザの想定した動作と異なる箇所を検出する手段と、
前記関数コールシーケンスのみの比較では異なる箇所が検出できなかった場合に、関数ブロック内の実行された関数についての情報と、前記実行中のプログラムが実行した関数についての情報を比較することにより、該実行中のプログラムの動作がユーザの想定した動作と異なる箇所を検出する手段と、
を有する請求項1記載のプログラム動作比較装置。 - プログラムの動作の差異を発見するためのプログラム動作比較方法であって、
プログラム自身が関数の実行履歴を出力可能なように該プログラムの実行ファイルを変更し、該プログラムを実行する機能により、実行した該プログラムの実行履歴を取得して実行履歴記憶手段に格納するプログラム実行履歴収集ステップと、
前記実行履歴記憶手段のプログラムの実行履歴を、実行された該プログラムの関数コールスタックの深さと、出現パターンに基づいて関数コールシーケンスの局所を関数ブロックとして区切り、関数ブロック記憶手段に格納するプログラム実行履歴分割ステップと、
前記関数ブロック記憶手段の前記関数ブロックと、前記プログラムを実行する機能により実行中のプログラムの関数コールシーケンスを比較し、異なる箇所を検出し、比較結果記憶手段に格納する比較ステップと、
を行うことを特徴とするプログラム動作比較方法。 - 前記プログラム実行履歴収集ステップにおいて、
プログラムの実行履歴として取得する関数について、該関数を取得するためのプログラムの実行ファイルを変更する実行ファイル変更ステップと、
呼ばれた関数から呼び出し元に戻るときの時刻、呼ばれた関数内で変更された引数、返り値を取得するデバッグ情報取得ステップと、
プログラムの実行ファイル内で定義されている関数や、ユーザが指定した共有ライブラリの関数について、該プログラムが前記プログラムを実行する機能により実行された時刻、関数名、引数、コールスタックの深さの値、返り値を含む情報を取得し、取得した情報を実行履歴記憶手段に登録する実行履歴収集ステップと、
を行う請求項5記載のプログラム動作比較方法。 - プログラム実行履歴分割ステップにおいて、
前記実行履歴記憶手段に格納されている履歴情報を読み込んで、関数の呼び出しのみに着目し、呼び出した関数のコールスタックの深さの値が小さくなったところで区切り、区切られた箇所を1つの関数ブロックとする実行履歴区分ステップと、
前記関数ブロック内の関数がその実行順序も含め同一となる関数ブロックが存在するかを検索し、存在する場合は、その次の関数ブロックについても関数ブロック内の関数がその実行順序も含め、同一であるかを調べる処理を繰り返し、同一である関数ブロックが存在した場合には、その一連の長さが最も長い関数ブロックに対して、複数の関数ブロックを1つの関数ブロックとしてまとめ、前記関数ブロック記憶手段に登録するステップと、
前記関数ブロック内の関数の引数、返り値が、全ての関数において同一か、同一の値を持つ関数が存在するか、全ての関数において異なっているかを関数と関連付けした前記関数ブロック記憶手段に登録するステップと、
を行う請求項5記載のプログラム動作比較方法。 - 前記比較ステップにおいて、
前記関数ブロック記憶手段から前記関数ブロックを読み出して、該関数ブロックと前記プログラムを実行する機能により実行中のプログラムの関数コールシーケンスを比較することにより、該実行中のプログラムの動作がユーザの想定した動作と異なる箇所を検出するステップと、
前記関数コールシーケンスのみの比較では異なる箇所が検出できなかった場合に、関数ブロック内の実行された関数の引数や返り値と、前記実行中のプログラムが実行した関数の引数や返り値を比較することにより、該実行中のプログラムの動作がユーザの想定した動作と異なる箇所を検出するステップと、
を行う請求項5記載のプログラム動作比較方法。 - 請求項1乃至4のいずれか1項に記載のプログラム動作比較装置を構成する各手段としてコンピュータを機能させるためのプログラム動作比較プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008087886A JP4763743B2 (ja) | 2008-03-28 | 2008-03-28 | プログラム動作比較装置及び方法及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008087886A JP4763743B2 (ja) | 2008-03-28 | 2008-03-28 | プログラム動作比較装置及び方法及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2009244969A JP2009244969A (ja) | 2009-10-22 |
JP4763743B2 true JP4763743B2 (ja) | 2011-08-31 |
Family
ID=41306815
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008087886A Expired - Fee Related JP4763743B2 (ja) | 2008-03-28 | 2008-03-28 | プログラム動作比較装置及び方法及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4763743B2 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6006577B2 (ja) * | 2012-08-01 | 2016-10-12 | 株式会社日立システムズ | デグレードテスト支援システム、デグレードテスト支援方法及びデグレードテスト支援プログラム |
US10289847B2 (en) * | 2016-07-29 | 2019-05-14 | Qualcomm Incorporated | Updating virtual memory addresses of target application functionalities for an updated version of application binary code |
KR102496539B1 (ko) * | 2020-12-15 | 2023-02-06 | 현대오토에버 주식회사 | 소프트웨어 검증 방법 및 이를 위한 장치 |
-
2008
- 2008-03-28 JP JP2008087886A patent/JP4763743B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2009244969A (ja) | 2009-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Blazytko et al. | {AURORA}: Statistical crash analysis for automated root cause explanation | |
Sridharan et al. | Thin slicing | |
US6430741B1 (en) | System and method for data coverage analysis of a computer program | |
US10019240B2 (en) | Method and apparatus for detecting code change | |
Scott et al. | Minimizing faulty executions of distributed systems | |
US7536678B2 (en) | System and method for determining the possibility of adverse effect arising from a code change in a computer program | |
WO2016138953A1 (en) | A method for identifying a cause for a failure of a test | |
JP6342129B2 (ja) | 混合モードプログラムのソースコードエラー位置検出装置及び方法 | |
CN103559123A (zh) | 基于VxWorks操作系统的函数调用栈分析方法及装置 | |
KR101979329B1 (ko) | 바이너리의 취약점을 유발하는 입력데이터 위치 추적 방법 및 그 장치 | |
JP6303749B2 (ja) | ソフトウェアプログラムを解析する方法及びシステム並びに非一時的なコンピュータ可読媒体 | |
CN107220175B (zh) | 应用程序死循环定位方法、装置、计算机设备和存储介质 | |
Bai et al. | Effective detection of sleep-in-atomic-context bugs in the Linux kernel | |
KR102165747B1 (ko) | 보안성을 고려한 경량 크래시 리포트 기반 디버깅 방법 | |
JP4763743B2 (ja) | プログラム動作比較装置及び方法及びプログラム | |
CN112433706A (zh) | 编译选项调优方法、装置、处理器芯片及服务器 | |
US9189372B2 (en) | Trace coverage analysis | |
Mahmud et al. | Acid: an api compatibility issue detector for android apps | |
Xin et al. | An automation-assisted empirical study on lock usage for concurrent programs | |
TWI484413B (zh) | 基於功能性的程式比較方法 | |
JP5891976B2 (ja) | コンパイル実行・管理方法、装置、及びプログラム | |
JP4869581B2 (ja) | カバレッジ計測システム及びそのプログラム | |
Pečimúth et al. | Diagnosing Compiler Performance by Comparing Optimization Decisions | |
Žáčik | Analyzing semantic stability of cryptography libraries using DIFFKEMP | |
RU2390821C1 (ru) | Способ динамической инструментации |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20100208 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20110531 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20110607 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110609 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140617 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
LAPS | Cancellation because of no payment of annual fees |