JP6061763B2 - 単体試験支援装置及び単体試験支援プログラム - Google Patents
単体試験支援装置及び単体試験支援プログラム Download PDFInfo
- Publication number
- JP6061763B2 JP6061763B2 JP2013081223A JP2013081223A JP6061763B2 JP 6061763 B2 JP6061763 B2 JP 6061763B2 JP 2013081223 A JP2013081223 A JP 2013081223A JP 2013081223 A JP2013081223 A JP 2013081223A JP 6061763 B2 JP6061763 B2 JP 6061763B2
- Authority
- JP
- Japan
- Prior art keywords
- function
- replaced
- address
- unit
- replacement
- 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.)
- Active
Links
- 238000012360 testing method Methods 0.000 title claims description 300
- 230000006870 function Effects 0.000 claims description 593
- 238000000034 method Methods 0.000 claims description 166
- 230000008569 process Effects 0.000 claims description 162
- 238000012545 processing Methods 0.000 description 54
- 238000010586 diagram Methods 0.000 description 12
- 230000000694 effects Effects 0.000 description 6
- 238000006467 substitution reaction Methods 0.000 description 6
- 101100219321 Oryza sativa subsp. japonica CYP85A1 gene Proteins 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 238000004886 process control Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000012812 general test Methods 0.000 description 1
- 238000012905 input function Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Landscapes
- Debugging And Monitoring (AREA)
Description
図1は、この発明の実施の形態1による単体試験支援装置を示す構成図である。
図1に示す単体試験支援装置は、試験設定部100、試験対象プログラム110、試験支援部120、言語処理部130を備えている。この単体試験支援装置は、試験対象プログラム110中の試験対象関数111の単体試験を想定している。単体試験の目的は、試験対象関数111が仕様通りに実装されていることを確認することである。
図2に、試験ドライバ101の処理フローを示す。
試験ドライバ101は、ステップST201で試験対象関数が実行の前提とする事前条件を設定する。具体的には、試験対象関数111が利用する入力変数の初期化などを行う。ステップST202は、試験対象関数111が利用する関数を置換関数102に置き換える処理である。試験ドライバ101は、試験支援部120が提供する関数置換部121を呼び出すことで、試験支援部120が、被置換関数112を置換関数102に置き換える。本実施の形態では、試験対象プログラム110自身の識別子と被置換関数112の識別子と置換関数102の識別子とを関数置換部121への入力とする。以下の説明では、具体的に試験対象プログラム110自身の識別子として試験対象プログラム110のファイル名、被置換関数112の識別子として被置換関数の名前、置換関数102の識別子として置換関数のアドレスを使用するが、識別子の形式をこれに限定するものではない点に注意が必要である。なお、置換関数102のアドレスは、C/C++言語によって構成されている試験ドライバ101の場合、アドレス参照の演算子である&で取得可能な値である。
ステップST204は、試験対象関数111が期待通りに動作したか否かを確認する処理である。事後条件として試験対象関数111が変更した値やステップST203で記憶した試験対象関数の戻り値などを確認する。一般的なxUNITなどの試験フレームワークを用いる場合、事後条件の確認には、試験ドライバ101は、フレームワークが提供するアサーションなどを利用する。
始めに、図3と図4とを用いて、試験対象関数111における関数置換前後の関数呼出しの様子を説明した後、関数置換処理の説明を行う。
図3は、関数置換前の関数呼出しの模式図である。試験対象関数301と被置換関数302とは、計算機の主記憶上に格納されたプログラムである。これら試験対象関数301と被置換関数302は、図1の試験対象関数111と被置換関数112に対応している。試験対象関数301は、被置換関数302への呼出し命令CALLを含んでいる。計算機が被置換関数302への呼出し命令を実行すると、計算機のプログラムカウンタは、被置換関数302のアドレスに移る。計算機は、被置換関数302を実行し、被置換関数302の関数復帰命令retを実行すると試験対象関数301に制御が移動する。
図3と異なるのは、被置換関数402の先頭部分である。被置換関数402の先頭部分の命令は、置換関数403への無条件分岐命令JMP命令に書き換わっている。計算機は、試験対象関数401の被置換関数402への呼出し命令CALLを実行すると、プログラムカウンタは、被置換関数402の先頭アドレスとなる。先頭には置換関数403への無条件分岐命令が存在するため、計算機の制御は直ちに置換関数403の先頭に移る。置換関数403中で関数復帰命令retが実行されると、制御は試験対象関数401中の被置換関数402呼出し命令の直後の命令に移る。
図5は、関数先頭書換えによる図1の試験支援部120の処理フローである。なお、図1のアドレス解決部122の処理がステップST502に対応し、プログラム書換え部123の処理がステップST503に対応する。
関数置換処理の入力は、試験対象プログラム110のファイル名、被置換関数112の名前、置換関数102のアドレスである。本処理の概要は、入力となる試験対象プログラム110の実行可能ファイルを解析し、プログラム書換え箇所のアドレスを解決し、当該箇所のプログラムを書き換えることである。本実施の形態では、プログラム書換え箇所は被置換関数112の先頭アドレスである。また、被置換関数112の先頭アドレスの取得を試験対象プログラム110のシンボル情報から行う。以下の説明では、シンボル情報として試験対象プログラム110の実行可能ファイルに含まれるシンボルテーブルを想定するが、シンボルテーブルの代わりに言語処理系が生成するMAPファイルを用いても同様の結果を得ることができる。
このように、プログラム書換え部123の処理であるステップST503において、関数の先頭アドレスのコードを置換関数に無条件分岐する命令に書き換えることによって、試験対象プログラム110が被置換関数112を呼び出すと、結果的に置換関数が実行される効果を得ることができる。
シンボル検索処理は、シンボルテーブルエントリを巡回し、入力とする検索条件と一致するを持つシンボルテーブルエントリの一覧を返す処理である。ステップST801は、検索結果をクリアする処理である。ステップST802〜ST805は、シンボルテーブルエントリを巡回するループ処理である。すなわち、ステップST803でシンボルが検索条件と一致するかを判定し、一致した場合はステップST804で検索結果にシンボルテーブルエントリを追加し、一致しなかった場合はそのまま次のシンボルテーブルエントリに進む。シンボルテーブルエントリ数は、図6のELFファイル読出し処理のステップST606処理時に記憶した値を参照することで得られる。
実施の形態1では、試験対象プログラム110のソースファイル群のうち、複数のソースファイルで同一名のローカル関数が定義されている場合、シンボルテーブルには、同一のシンボル名を持つエントリが複数存在する。このような場合は、被置換関数112の先頭アドレスを正しく解決できないことが問題となる。具体的には、図7のステップST703でシンボルが複数見つかるため、エラーとなる。このような問題を解決するのが実施の形態2である。なお、図面上の構成は図1と同様であるため、図1の構成を用いて説明する。
まず、実施の形態2では、図5のステップST502の関数先頭アドレス取得処理が、シンボル情報ではなく、試験対象プログラム110のデバッグ情報を用いる点と、被置換関数112を含むソースファイルの名前を余分に入力とする点とが実施の形態1と異なる。また、関数置換部121への入力として、被置換関数112を含むソースファイル識別子が入力に加わる。同様に、図2のステップST202では、入力にソースファイル識別子が入力として加わる。
図9は、デバッグ情報による関数先頭アドレス取得処理のフローである。処理の入力は、被置換関数112の名前と被置換関数112を含むソースファイルの名前である。
ステップST901では、関数置換処理の入力の試験対象プログラム110に含まれるデバッグ情報から、ソース名と被置換関数名をキーとして被置換関数112のアドレスを取得する。本処理において、デバッグ情報からソース名と関数名の対で関数のアドレスを取得する処理は公知であるため、ここでは処理の概要のみを示す。デバッグ情報がDWARF形式の場合、デバッグ情報は、.debug_infoセクションに格納されている。ステップST901では、はじめにタグがDW_TAG_compilation_unitであるDIEの中から属性DW_AT_nameがソースファイル名と一致するDIE検索する。次に当該DIEの後続DIEのうちタグがDW_TAG_subprogramの中からDW_AT_nameが関数名と一致するDIEを検索する。結果として見つかったDIEの属性DW_AT_low_pcの値が求める関数先頭アドレスである。
実施の形態2では、被置換関数112が定義されているファイル名を用いて被置換関数112の先頭アドレスを取得した。このため、被置換関数112を定義しているソースファイルを変更した場合は、正しく試験が実行できないことになる。具体的には、被置換関数112を定義しているソースファイルが変更された場合、図9のステップST902において、被置換関数112の情報が見つからないため、エラー終了する。従って、被置換関数112を定義しているソースファイルが変更された後も正しく試験を実行するためには、試験ドライバ101側の修正も必要となる。具体的には、図2のステップST202の入力の被置換関数112を含むソースファイル識別子を更新する必要がある。ソースファイルが変更される例としては、試験対象関数111と同じソースファイルに定義されていた被置換関数112が、リファクタリングなどで別のソースファイルに移動される場合などが挙げられる。
図5のステップST502の関数先頭アドレス取得処理の入力は、被置換関数112を含むソースファイルの名前ではなく、試験対象関数111のソースファイル識別子である。また、関数置換部121への入力も同様に、被置換関数112を含むソースファイル識別子ではなく、試験対象関数111のソースファイル識別子である。同様に、図2のステップST202では、試験対象関数111のソースファイル識別子を入力とする。
図10は、ソースファイル名を用いた関数先頭アドレス取得処理を示すフローチャートである。処理の入力は、被置換関数112の名前と、試験対象関数111を含むソースファイルの名前である。
ステップST1001では、試験対象関数111を含むソースファイルの名前と被置換関数112の名前とで関数のアドレスを検索する。具体的には、試験対象関数111のソースファイルに定義されている関数の中から被置換関数112の名前を持つ関数のアドレスを取得する。この処理は実施の形態2におけるステップST901と概ね同じである。
ステップST1003では、ステップST1001で見つかった被置換関数の情報から先頭アドレスを取得し、処理の結果として出力する。
ステップST1006は、ステップST1004で見つかった被置換関数112の情報から先頭アドレスを取得し、処理の結果として出力する。
実施の形態2、3では、被置換関数112のアドレスを取得するためにデバッグ情報を用いた。このため、被置換関数112を含むオブジェクトファイル自体がデバッグ情報を保持する必要がある。そのためには、被置換関数112を定義するソースファイルのコンパイル時にデバッグ情報の出力オプションがコンパイラに指定されている必要がある。従って、被置換関数112を含むオブジェクトファイルのソースコードが得られない場合などに、実施の形態2は適用できないことになる。本実施の形態では、この問題を解決する方法を提供する。なお、本実施の形態においても、図面上の構成は図1と同様である。
始めに、処理が単純なステップST1004のシンボル情報を用いた関数先頭アドレス取得処理を説明する。ステップST1004では、グローバルな被置換関数112のアドレスを取得することが目的である。そこで、本実施の形態では、ステップST501で読み出した試験対象プログラム110のシンボルテーブルから、被置換関数112の名前と一致しかつグローバルなシンボルのエントリを取得すればよい。シンボル検索処理は実施の形態1で示した通りである。なお、シンボルがグローバルであるか否かは、シンボルテーブルエントリのst_infoの上位4ビットがSTB_GLOBALか否かで判定可能である。また、シンボルが関数か否かは、シンボルテーブルエントリのst_infoフィールドの下位4ビットがSTT_FUNCか否かで判定可能である。
図11は、リロケータブルファイルのシンボル情報による関数先頭アドレス取得の模式図である。アドレス空間1101は、試験対象プログラム110を含むプロセスのアドレス空間である。また、リロケータブルファイル1103は、試験対象関数111を含むリロケータブルファイルである。リロケータブルファイル1103は、コードを含む.textセクション1105を保持している。また、.textセクション1105の中に図1の被置換関数112に対応する被置換関数1106が存在するものとする。.textセクション1105は、アドレス空間1101においては、セクション先頭アドレスB1102の位置にマップされている。また、リロケータブルファイル1103は、リロケータブルファイルシンボルテーブル1104も含んでいる。リロケータブルファイルシンボルテーブル1104は、被置換関数1106に対応するエントリをもつ。当該シンボルテーブルエントリには、被置換関数の.textセクション1105からのオフセットAが値として記憶されている。本実施の形態では、計算機が(セクション先頭アドレスB)+(オフセットA)を計算することで、ロケータブルファイルのシンボル情報による関数先頭アドレス取得処理を実現する。
ステップST1201は、被置換関数1106を含むリロケータブルファイル名を入力としてオブジェクトファイル読出し処理を行う。オブジェクトファイル読出し処理は、実施の形態1で示した通りである。リロケータブルファイル1103の名前は、ソースファイル名の拡張子を変更して得られる。例えば、C言語のソースファイルであれば、拡張子を.cから.oや.objに変更すればよい。
図13は、セクション先頭アドレス取得の模式図である。アドレス空間1301は、試験対象プログラム110のプロセスのアドレス空間である。リロケータブルファイル1303は、試験対象プログラム110を含むリロケータブルファイルであり、.textセクション1304とリロケータブルファイルシンボルテーブル1306を含む。また、.textセクション1304には任意のグローバル関数G1305が1つ含まれるものとする。リロケータブルファイルシンボルテーブル1306は、グローバル関数G1305に対応するエントリを保持している。当該エントリは、グローバル関数G1305の.textセクション1304からのオフセットXを保持している。また、実行可能ファイルシンボルテーブル1307は、試験対象プログラム110の実行可能ファイルのシンボルテーブルである。実行可能ファイルシンボルテーブル1307も、グローバル関数G1305に対応するエントリを保持している。当該エントリは、アドレス空間1301におけるグローバル関数G1305のアドレスYを保持している。本実施の形態では、ステップST1205におけるセクション先頭アドレス取得処理が、(グローバル関数G1305のアドレスY)−(グローバル関数G1305のセクション先頭1からのオフセットX)を計算することでテキスト先頭アドレスを求める。
ステップST1401は、ステップST1201で読み出したリロケータブルファイルからグローバルな関数のシンボルを取得する処理である。シンボル検索処理は、実施の形態1で説明した通りであるが、検索条件としては、シンボルがグローバルな関数であることを指定する。シンボルがグローバルか否かはシンボルテーブルエントリのst_infoの上位4ビットがSTB_GLOBALか否かで判定可能である。また、シンボルが関数か否かは、シンボルテーブルエントリのst_infoフィールドの下位4ビットがSTT_FUNCか否かで判定可能である。
ステップST1405では、ステップST1404で読み出したファイル情報からシンボルを検索する処理である。このとき、検索条件として、ステップST1403で代入したシンボルXの名前と一致することを指定する。
ステップST1406は、ステップST1405の結果に基づく条件分岐処理である。ステップST1405でシンボルが見つからなかった場合はエラー終了する。一方、シンボルが見つかった場合はステップST1407に分岐する。
ステップST1408では、Y−Xを計算することでセクション先頭アドレスを計算する。シンボルの値は、具体的にはXとYとそれぞれのst_valueフィールドの値である。Yのシンボル値は、グローバル関数の先頭アドレスであり、Xのシンボル値は、セクション先頭からのオフセットである。両者の差をとることで、セクション先頭のアドレスを取得することができる。
実施の形態1〜4では、それぞれアドレス解決部122は異なる関数先頭アドレスの取得手段を用いて先頭アドレスの取得を行った。具体的には、実施の形態1では、図7に示した実行可能ファイルのシンボル情報を用いた関数先頭アドレス取得手段を用いた。また、実施の形態2では、図9に示したデバッグ情報による関数先頭アドレス取得手段を用いた。また、実施の形態3では、図10のソースファイル名を用いた関数先頭アドレス取得手段としてデバッグ情報を用いて実現する手段を示した。また、実施の形態4では、図10のソースファイル名を用いた関数先頭アドレス取得手段としてリロケータブルファイルのシンボル情報を用いて実現する手段について示した。このように、アドレス解決部122における関数先頭アドレス取得手段は複数存在する。それぞれの関数先頭アドレス取得手段は、シンボル情報やデバッグ情報など異なる情報を用いて被置換関数112のアドレスを取得する。このため、試験ドライバ作成者は、利用可能な情報を元に適切な関数先頭アドレス取得手段を選択する必要があるという問題があった。上記問題を解決するのが本実施の形態である。
関数置換部121の入力は、試験対象関数111のソースファイル名、試験対象プログラム110の実行可能ファイル名、被置換関数112の名前である。
ステップST1501は、試験対象プログラム110の実行可能ファイルの情報を読み出す処理である。本処理は、ステップST501と同じである。ステップST1502は、デバッグ情報があるか否に基づく分岐処理である。デバッグ情報が存在する場合はステップST1505に分岐し、それ以外の場合は、ステップST1504に分岐する。デバッグ情報があるか否かは、ステップST1501で読み出したセクションヘッダテーブルを検索し、デバッグ情報を含むセクションの存在有無を確認することで行うことができる。例えば、実行可能ファイルのフォーマットがELF形式でデバッグ情報のフォーマットがDWARFである場合、.debug_infoセクションがあればデバッグ情報が存在するとみなし、なければ存在しないとみなせばよい。
ステップST1506は、実行可能ファイルシンボル情報による関数先頭アドレス取得処理である。本処理は、実施の形態1の図7の処理と同じである。
ステップST1507は、ステップST1503、またはステップST1505またはステップST1506で取得した関数先頭アドレスに置換関数102への無条件分岐命令を書き込む処理である。本処理の詳細は実施の形態1で示した通りである。
実施の形態1では、被置換関数自体を書き換えることで関数置換処理を実現している。しかし、被置換関数が共有ライブラリ関数の場合には置換できないことが問題となる。一般に、共有ライブラリは複数のプロセスから共有されるため、共有ライブラリ関数が書き換わると試験対象プログラム110以外のプログラムにも影響を及ぼすことになる。そこで、被置換関数112が共有ライブラリ関数の場合の関数置換処理を実現するのが本実施の形態である。
図16は、関数置換前の共有ライブラリ関数呼出しの模式図である。ここでは、具体的にオブジェクトファイルの形式がELFの場合の共有ライブラリ関数呼出しの様子を示すが、Windows PEやMach−oも類似のトランポリンコードを用いた共有ライブラリ関数呼出しとなるため、本発明を適用することが可能である。なお、ここではダイナミックリンクが完了している状態を示す。
図18は、共有ライブラリ関数用の試験支援部120の処理フローである。ステップST1801では、試験対象プログラム110のファイル名を入力としてオブジェクトファイルを読み出す。本処理の詳細は、実施の形態1に示したので省略する。
関数アドレス参照書換え処理では、リロケーション情報を利用することで、.GOT.PLT中の被置換関数112のエントリを、被置換関数112のアドレスから置換関数102のアドレスに書き換える。
図19に示す関数アドレス参照書換え処理では、被置換関数112の名前と.textセクション先頭アドレスと置換関数102のアドレスとを入力とする。また、関数アドレス参照書換え処理では、ステップST1901で読出した.textセクションのリロケーションテーブルも利用する。
ステップST1902は、巡回中のリロケーションテーブルエントリの対象が被置換関数112か否かに基づく条件分岐処理である。巡回エントリの対象が被置換関数112でない場合、ステップST1903とステップST1904をスキップする。一方、巡回中のエントリが被置換関数112に対応する場合ステップST1903に分岐する。
実施の形態6では、被置換関数112が共有ライブラリの場合の関数置換処理を示した。しかし、このような場合、試験ドライバ作成者は、被置換関数112が共有ライブラリ関数か否かで試験ドライバ101の仕様に対応した関数置換処理を選択する必要がある。そこで、本実施の形態では、被置換関数112が共有ライブラリ関数か否かに関わらず関数を置換することができる関数置換処理について示す。即ち、実施の形態7におけるアドレス解決部122は、被置換関数112が共有ライブラリか否かを判定し、共有ライブラリであった場合に実施の形態6の処理を行い、かつ、プログラム書換え部も実施の形態6の処理を行うよう構成されている。その他の構成は図1に示した実施の形態1と同様である。
ステップST2001では、試験対象プログラム110のオブジェクトファイル情報を読み出す処理である。本処理の詳細は実施の形態1の説明で示した通りである。
ステップST2004は、関数先頭アドレス取得処理である。関数先頭アドレスの取得手段は任意であり、実施の形態1〜5で示した関数先頭アドレス取得処理などを利用すればよい。
ステップST2005では、ステップST2004で取得した関数先頭アドレスのコードを置換関数102への無条件分岐命令に書き換える。本処理の詳細は実施の形態1に示した通りである。
実施の形態1〜7では、実行中の試験プログラム自体を動的に書き換えることで、被置換関数を置換関数に置き換えた。このため、関数置換処理を呼び出す試験ドライバの実行後に別の試験ドライバを呼び出すと、別の試験ドライバが期待通りに動作しない場合があることが問題となる。そこで、本実施の形態では、置換した関数を元に戻す手段を実施の形態1〜7に加えるようにしたものである。
なお、置換履歴を記憶するタイミングを具体的に記述すると、図5におけるステップST503、図15におけるステップ1507、図19におけるステップST1904、図20におけるステップST2005である。
実施の形態1では、ジャンプコード挿入処理においてメモリ上の関数アドレスをジャンプコードに入れ換えることで関数の置換を行った。しかし、Linux(Linuxは登録商標/以下省略して記載)などのオペレーティングシステムでは、セキュリティ対策などのため、コード領域への書き込みが禁止されている場合が多い。したがって、Linuxのようにコード領域への書込みを禁止しているオペレーティングシステム上では、実施の形態1のジャンプコード挿入処理において、メモリアクセス違反が発生してしまう。この問題を解決するのが本実施の形態である。
本実施の形態では、試験支援部120bとして、実施の形態1〜8のいずれかの構成に加えてメモリ解除部125が加わっていることが特徴である。なお、図22では、実施の形態1〜7の構成に対してメモリ解除部125を付加した構成を示している。メモリ解除部125は、プログラム書換え部123によるプログラム書換え処理の前にメモリ保護解除処理を行う処理部である。他の構成は、実施の形態1〜8のいずれかと同様であるため、ここでの説明は省略する。
Claims (13)
- 試験対象プログラム中で書き換えられる被置換関数の識別子と、前記被置換関数を書き換えるための置換関数の識別子を入力する関数置換部と、
前記被置換関数の識別子から前記試験対象プログラムの書換え位置のアドレスを取得するアドレス解決部と、
前記アドレス解決部が取得したアドレスの前記試験対象プログラムを書き換えることで前記被置換関数を前記置換関数で書き換えるプログラム書換え部とを備えた単体試験支援装置。 - 前記アドレス解決部は、前記被置換関数の識別子から前記試験対象プログラムの書換え位置のアドレスとして当該被置換関数の先頭アドレスを取得し、
前記プログラム書換え部は、前記先頭アドレスからのメモリ内容を前記置換関数に直接または間接的に分岐する1つ以上の命令に書き換えることを特徴とする請求項1記載の単体試験支援装置。 - 前記アドレス解決部は、前記被置換関数の識別子を用いて前記試験対象プログラムのシンボル情報を検索することで、前記被置換関数の先頭アドレスを取得することを特徴とする請求項2記載の単体試験支援装置。
- 前記アドレス解決部は、前記被置換関数の名前と当該被置換関数を含むソースファイルの識別子を用いて前記試験対象プログラムのデバッグ情報を検索することで、前記被置換関数の先頭アドレスを取得することを特徴とする請求項2の単体試験支援装置。
- 前記アドレス解決部は、前記被置換関数の名前と、前記試験対象プログラムが実行される場合に前記被置換関数を呼び出す試験対象関数のソースプログラム識別子とを用いて前記被置換関数の先頭アドレスを取得し、見つからなければ前記被置換関数の名前のみを用いて当該被置換関数の先頭アドレスを検索することを特徴とする請求項2記載の単体試験支援装置。
- 前記アドレス解決部は、前記被置換関数の名前と、前記試験対象プログラムが実行される場合に前記被置換関数を呼び出す試験対象関数のリロケータブルファイルとを用いて前記被置換関数の先頭アドレスを取得し、見つからなければ前記被置換関数の名前のみを用いて当該被置換関数の先頭アドレスを検索することを特徴とする請求項2記載の単体試験支援装置。
- 前記アドレス解決部は、前記被置換関数の定義を含むリロケータブルファイルのシンボル情報と前記試験対象プログラムのシンボル情報とセクション先頭アドレスとから、前記被置換関数の先頭アドレスを算出することを特徴とする請求項2記載の単体試験支援装置。
- 前記アドレス解決部は、前記試験対象プログラムのデバッグ情報の有無、または、前記試験対象プログラムが実行される場合に前記被置換関数を呼び出す試験対象関数のリロケータブルファイルの有無に基づいて、前記被置換関数の先頭アドレスを取得する手段を選択することを特徴とする請求項1記載の単体試験支援装置。
- 前記アドレス解決部は、前記試験対象プログラムのアドレス空間において前記被置換関数を参照している箇所のアドレスを取得し、
前記プログラム書換え部は、前記アドレス解決部が取得したアドレスの箇所を前記置換関数のアドレス参照に書き換えることを特徴とする請求項1記載の単体試験支援装置。 - 前記アドレス解決部は、前記被置換関数が共有ライブラリか否かを判定し、当該共有ライブラリであった場合に前記アドレスの取得を行い、かつ、前記プログラム書換え部による前記アドレスの書換えを行うことを特徴とする請求項9記載の単体試験支援装置。
- 前記被置換関数を前記置換関数で置き換えた場合、置き換えたアドレスとサイズと置き換え前のデータの組を置き換え履歴として記憶すると共に、
前記記憶した置き換え履歴に基づいて、関数置換を復元する関数置換復元部を備えたことを特徴とする請求項1記載の単体試験支援装置。 - プログラム書換え部によるプログラム書換え処理の前にメモリ保護解除処理を行うメモリ解除部を備えたことを特徴とする請求項1記載の単体試験支援装置。
- ソフトウェアの単体試験を行うためのコンピュータを、
試験対象プログラム中で書き換えられる被置換関数の識別子と、前記被置換関数を書き換えるための置換関数の識別子を入力する関数置換部と、
前記被置換関数の識別子から前記試験対象プログラムの書換え位置のアドレスを取得するアドレス解決部と、
前記アドレス解決部が取得したアドレスの前記試験対象プログラムを書き換えることで前記被置換関数を前記置換関数で書き換えるプログラム書換え部として機能させるための単体試験支援プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013081223A JP6061763B2 (ja) | 2013-04-09 | 2013-04-09 | 単体試験支援装置及び単体試験支援プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013081223A JP6061763B2 (ja) | 2013-04-09 | 2013-04-09 | 単体試験支援装置及び単体試験支援プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2014203384A JP2014203384A (ja) | 2014-10-27 |
JP6061763B2 true JP6061763B2 (ja) | 2017-01-18 |
Family
ID=52353742
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013081223A Active JP6061763B2 (ja) | 2013-04-09 | 2013-04-09 | 単体試験支援装置及び単体試験支援プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6061763B2 (ja) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07319683A (ja) * | 1994-05-30 | 1995-12-08 | Nippon Telegr & Teleph Corp <Ntt> | 運用中プログラム更新方式 |
JP2008123438A (ja) * | 2006-11-15 | 2008-05-29 | Fujitsu Ltd | コンピュータシステム、プログラム情報収集方法、およびコンピュータプログラム |
JP4931711B2 (ja) * | 2007-07-02 | 2012-05-16 | 日本電信電話株式会社 | カーネル更新方法、情報処理装置、プログラムおよび記憶媒体 |
JP5550578B2 (ja) * | 2011-02-06 | 2014-07-16 | 三菱電機株式会社 | エントリ書換装置及びエントリ書換プログラム |
-
2013
- 2013-04-09 JP JP2013081223A patent/JP6061763B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2014203384A (ja) | 2014-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Williams-King et al. | Egalito: Layout-agnostic binary recompilation | |
ElWazeer et al. | Scalable variable and data type detection in a binary rewriter | |
US9134966B2 (en) | Management of mixed programming languages for a simulation environment | |
CN107451474B (zh) | 用于终端的软件漏洞修复方法和装置 | |
US20080127113A1 (en) | Method and system for implementing watchpoints | |
JP7042270B2 (ja) | セルフデバッギング | |
US10795659B1 (en) | System and method for live patching processes in user space | |
Stüttgen et al. | Robust Linux memory acquisition with minimal target impact | |
US11693760B2 (en) | System and methods for live debugging of transformed binaries | |
US20230267067A1 (en) | Software protection from attacks using self-debugging techniques | |
US9047403B2 (en) | Debugger with previous version feature | |
US20110029953A1 (en) | System and Method for Scalable Handling of Debug Information | |
JP2008052688A (ja) | プログラムのパッチデータ生成装置 | |
Heitman et al. | BARF: a multiplatform open source binary analysis and reverse engineering framework | |
JP6061763B2 (ja) | 単体試験支援装置及び単体試験支援プログラム | |
JP5550578B2 (ja) | エントリ書換装置及びエントリ書換プログラム | |
JP2011090511A (ja) | 実行プログラム、コンパイラ、実行プログラム動作修正装置及び実行プログラム動作修正方法 | |
KR102684371B1 (ko) | 셀프 디버깅 | |
JP2007041777A (ja) | 言語処理方法 | |
Yin et al. | PAST: accurate instrumentation on fully optimized program | |
Ghafari | Detecting Variadic Functions in Stripped Binaries from C/C++ | |
JP5109808B2 (ja) | 追加実行可能情報生成装置、情報処理装置、及びプログラム | |
HELLEBRANDT | Vyhledávání výrazů s nedefinovaným chováním v jazyce C | |
Nguyen et al. | Simulating Loader for Mach-O Binary Obfuscation and Hooking | |
Fahem et al. | Efficient Conditional Tracepoints in Kernel Space |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20151015 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20160729 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20160809 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20160923 |
|
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: 20161115 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20161213 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6061763 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |