JP5800777B2 - 情報処理装置及び情報処理方法及びプログラム - Google Patents

情報処理装置及び情報処理方法及びプログラム Download PDF

Info

Publication number
JP5800777B2
JP5800777B2 JP2012182381A JP2012182381A JP5800777B2 JP 5800777 B2 JP5800777 B2 JP 5800777B2 JP 2012182381 A JP2012182381 A JP 2012182381A JP 2012182381 A JP2012182381 A JP 2012182381A JP 5800777 B2 JP5800777 B2 JP 5800777B2
Authority
JP
Japan
Prior art keywords
function
system call
address
unit
trace
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
Application number
JP2012182381A
Other languages
English (en)
Other versions
JP2014041419A (ja
Inventor
敦 攝津
敦 攝津
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2012182381A priority Critical patent/JP5800777B2/ja
Publication of JP2014041419A publication Critical patent/JP2014041419A/ja
Application granted granted Critical
Publication of JP5800777B2 publication Critical patent/JP5800777B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、プログラムトレースに関する。
プログラムの動作を解析するためのプログラムトレースという手法がある。
プログラムトレースでは、プログラム実行時に特定関数が呼び出されたこと、特定の値が変更されたこと、特定の処理経路を通過したことなどをトレースログとして残し、ソフトウェアの動作を外部より把握するための仕組みである。
プログラムトレースを利用してトレースログを取得する際、プログラムのソースコードにトレースコードを埋め込む、または、あらかじめトレースコードが埋め込まれたプログラムに対してトレースON/OFFフラグを設定するなどして、プログラムをコンパイルした後、動作させるという手間があった。
また、オペレーティングシステム(OS)と、OS上で動作するアプリケーションプログラム(以下、「アプリケーション」又は「アプリ」ともいう)で構成される情報処理装置の場合、OSは複数のアプリケーションを並行に動作させるため、現在どのアプリケーションが動作しているかは把握できるものの、アプリケーション内部の動作状況、すなわち関数の呼び出し状況や、関数内データのやり取り状況を把握することができなかった。
このため、トレースについては、OSの動作状況を知りたい場合は、OS用トレースを、アプリケーションの動作状況を知りたい場合には、アプリケーション用トレースを、と別々のトレースを用いる必要があったため、情報処置装置全体での動作把握に時間を要していた。
特許文献1では、トレースしたい箇所に予め特定のメモリをアクセスする命令を埋め込んでおき、アクセスしようとしたプログラムの実行アドレスからシステムコールを特定すると共に、システムコールの引数を取得してトレースデータに蓄積する手法が記載されている。
特許文献2では、コンパイラを起動する際にトレース機能がオンになっていると、関数呼び出し命令を検索してトレース情報出力関数に置き換える手法が記載されている。
特許文献3では、トレース対象の関数がコールされると、フックされたログ取得コードが呼び出され、トレース対象の関数名、引数をメモリに保存した後、本来の関数をコールする手法が記載されている。
特許文献4では、トレース要否フラグを設け、トレース要の場合はユーザモードから出力されるトレース情報は、ユーザ側出力代行部を経由して、カーネルトレースバッファに出力する手法が記載されている。
特開2002−149444号公報 特開平4−287134号公報 特開2004−38311号公報 特開2007−328597号公報
従来の手法では、トレースする箇所をコンパイル時に決定し、予めトレース情報を取得するコードを埋めておく必要があった。
特許文献1では、トレースしたい箇所に、予め、メモリをアクセスする命令を埋め込んでおく必要があった。
特許文献2では、コンパイル時に関数呼び出し命令を検索してトレース情報を取得するコードを埋めておく必要があった。
また、従来の手法では、トレース情報はOSとアプリケーション双方で取得する必要があった。
特許文献2および特許文献3は、取得可能なのはアプリケーション用のトレースのみであった。
また、特許文献4では、ユーザ側トレース情報とカーネルトレース情報を一体に出力するものであるが、ユーザ側にもトレースを記録しておく領域を設ける必要があった。
この発明は、上記のような問題点を解決することを主な目的としており、トレースする箇所をコンパイル時に決定することなく、アプリケーション内の関数のトレースログを、OSのトレースログに含め、アプリケーション内の関数のトレースログとOSのトレースログを一元的に管理できるようにすることを主な目的としている。
本発明に係る情報処理装置は、
OS(Operating System)と、前記OS上で動作する、関数が1つ以上含まれるアプリケーションプログラムとが実装されている情報処理装置であって、
前記アプリケーションプログラムに含まれるいずれかの関数が実行される際に、実行対象の関数のプロセス空間上のアドレスを取得する関数アドレス取得部と、
前記関数アドレス取得部により取得されたプロセス空間上のアドレスが設定された、通常のシステムコールとは異なる特殊システムコールを前記OSに発行するシステムコール発行部と、
前記特殊システムコールを含む、前記OSに関するイベントのトレースログを生成するトレースログ生成部とを有することを特徴とする。
本発明によれば、アプリケーションプログラムの関数が実行される際に、当該関数のプロセス空間上のアドレスが設定された特殊システムコールがOSに発行され、特殊システムコールを含むOSに関するイベントのトレースログが生成される。
このため、トレースする箇所をコンパイル時に決定する必要がない。
また、OSのトレースログに、アプリケーションプログラムの関数のトレースログを含ませることができ、アプリケーションプログラムの関数のトレースログとOSのトレースログを一元的に管理することができる。
実施の形態1に係る情報処理装置の構成例を示す図。 実施の形態1に係るトレース方式を示すフローチャート図。 実施の形態1に係る共有ライブラリの動作例を示すフローチャート図。 実施の形態1に係るトレース解析部の動作例を示すフローチャート図。
実施の形態1.
図1は、本実施の形態に係る情報処理装置100の構成図である。
図1において、情報処理装置100は、ハードウェア資源として、プロセッサ101、メモリ102、二次記憶装置103、入力装置104及び出力装置105を備える。
また、情報処理装置100には、ソフトウェアとして、アプリケーション1と、オペレーティングシステム2と、共有ライブラリ3と、トレース解析部4が実装されている。
これらソフトウェアは、通常は二次記憶装置103に格納されており、実行に際して、プログラムコードが順次メモリ102にロードされ、プロセッサ101により読みこまれ、実行される。
アプリケーション1は複数配置されていてもよい。
アプリケーション1は、アプリケーション1とはプログラムファイルとしては別になった、共有ライブラリ3を介して、OS2のサービスをシステムコールという形式で呼び出す。
アプリケーション1には、1つ以上の関数が含まれている。
共有ライブラリ3は、アプリケーション1とは別のファイルで構成されているため、共有ライブラリ3内の関数をアプリケーション1が呼び出すためにアプリケーション1の起動時に、アプリケーション1にて必要としている共有ライブラリ3内の関数との結合(動的リンク)が実施される。
また、本情報処理装置100では、トレースログを解析するためのトレース解析部4が存在する。
アプリケーション1には、コンパイル時のオプションにてアプリケーション1内の各関数から呼び出される関数フック部5が存在する。
関数フック部5は、gcc(GNU Compiler)の−pgオプションのように、コンパイラによって、全関数の先頭で、特定の関数を呼び出すコードが埋め込まれる。
なお、本関数フック部5はトレース機能にのみ存在するのではなく、プロファイラなどの性能解析など一般的に使用されている機能である。
共有ライブラリ3において、関数フック機能処理部6は、アプリケーション1との動的リンク時に呼び出される。
開始・終了部7は、関数フック部5から呼び出され、トレースを実施すべきか否かを決定する。
つまり、開始・終了部7は、アプリケーション1に含まれる関数ごとに、関数が実行される際に、実行対象の関数に対して、後述のアプリ関数アドレス・引数取得部8を動作させるか否かを判定する。
開始・終了部7は、動作判定部の例に相当する。
アプリ関数アドレス・引数取得部8は、関数フック部5を呼び出した関数(実行対象の関数)のアドレス(プロセス空間上のアドレス)および関数の引数を取得する。
アプリ関数アドレス・引数取得部8は、関数アドレス取得部の例に相当する。
システムコール発行部9は、OS2のサービスを呼び出す。
OS2には、共有ライブラリ3からのシステムコールを処理するシステムコール処理部10と、システムコールが呼び出されたことを記録するトレース部11が存在する。
トレース部11は、特殊システムコールを含む、OS2に関するイベントのトレースログを生成する。
特殊システムコールは、通常のシステムコールとは異なるシステムコールであり、例えば、明示的にエラーとなるシステムコールである。
トレース部11は、特殊システムコールに対して、アプリ関数アドレス・引数取得部8により取得されたプロセス空間上のアドレスが記述されるOSトレースログ情報を生成する。
なお、トレース部11がOSイベントの発生の度に生成した個々のログをトレースログといい、一定期間分のトレースログが集約された情報をOSトレースログ情報という。
なお、トレース部11は、トレースログ生成部の例に相当する。
トレース解析部4において、アプリ関数アドレス抽出部12は、アプリケーション1のプログラムファイルを元に、アプリケーション1内の関数の先頭アドレスと関数のコードサイズ情報を取得する。
トレースログ収集部13は、トレース部11によって記録されたOSトレースログ情報を取得する。
トレースログ・アプリ関数/引数変換部14は、トレースログ収集部13から得られたOSトレースログ情報とアプリ関数アドレス抽出部12から得られたアプリケーション内関数情報を元に、OSトレースログ情報内に記録されている、システムコール発行部9が実施したシステムコールトレースを、アプリケーション関数および関数引数情報に変換する。
前述のように、特殊システムコールのトレースログでは、アプリ関数アドレス・引数取得部8により取得されたプロセス空間上のアドレスが記述されている。
トレースログ・アプリ関数/引数変換部14は、OSトレースログ情報の中から特殊システムコールのトレースログを抽出する。
また、トレースログ・アプリ関数/引数変換部14は、アプリ関数アドレス抽出部12により取得された関数の先頭アドレスと関数のコードサイズ情報から、アプリケーション1に含まれる各関数のプロセス空間上のアドレスの範囲を導出する。
そして、トレースログ・アプリ関数/引数変換部14は、抽出した特殊システムコールのトレースログに記述されているプロセス空間上のアドレスに対して、アプリケーション1に含まれる各関数のプロセス空間上のアドレスの範囲を照合して、特殊システムコールのトレースログに記述されているプロセス空間上のアドレスに対応する関数の関数名を判定する。
更に、トレースログ・アプリ関数/引数変換部14は、判定した関数名を出力する。
トレースログ・アプリ関数/引数変換部14は、関数アドレス導出部と関数判定部と出力部の例に相当する。
次に、図2を用いて本実施の形態に係る情報処理装置100のトレース方式の全体の動作を説明する。
まず、S101にて、アプリケーション1が起動する。
アプリケーション1の起動は、OS2の処理にて実施され、この時、共有ライブラリ3とアプリケーション1の動的リンクが実施される(S102)。
この動的リンクの際、共有ライブラリ3の関数フック機能処理部6は、関数フック部5が、共有ライブラリ3の開始・終了部7を呼び出すように関数フック部5のコードを書き換える。
この書き換えについては、直接呼び出すコードを埋め込む方式や、予め関数フック部5内に関数ポインタを配置し、関数ポインタに値が入っている場合、その関数ポインタが示すアドレスを呼び出すようにしておき、関数フック機能処理部6は、その関数ポインタに、開始・終了部7のアドレスを設定するようにしてもよい。
これにより、アプリケーション1内の各関数が関数フック部5を呼び出す際、一緒に共有ライブラリの開始・終了部7が呼び出される。
S102において共有ライブラリとの動的リンクがなされると、アプリケーション1は本格的に動作を開始し、main()関数が呼び出され、それに伴い、各関数が実行される(S103)。
各関数が実行されると、各関数の先頭で関数フック部5が呼び出され、それに伴い、共有ライブラリ3の開始・終了部7が呼び出され、アプリ関数アドレス・引数取得部8およびシステムコール発行部9を介して、特殊システムコールが発行される。
本実施の形態では、特殊システムコールは、明示的にエラーとなるシステムコールとする。
この時、システムコールの引数に、アプリ関数アドレス・引数取得部8にて取得した関数フック部5を呼び出した関数のアドレス(プロセス空間上のアドレス)と関数の引数が設定される。
そしてシステムコール処理部10にて、トレース部11が呼び出されることによりトレースログである関数トレースが記録される(S104)。
トレース部11には、OS2内の他のイベント(ファイル書き込み、割込み発生、コンテキストスイッチ等)の記録とともにシステムコールトレース情報としての関数トレース情報が記録される。
そしてアプリケーション1の動作が終了(S105)した後、トレース解析部4のトレースログ収集部13によって、トレース部11が記録したOSトレースログ情報が取得される(S106)。
この時、OSトレースログ情報には、アプリケーション1の関数トレース情報はシステムコールトレース情報としてしか記録されていない。
つまり、OSトレースログ情報のシステムコールトレース情報単体では、アプリケーション1で実行された関数の関数名は明らかでない。
次に、S107にてトレース解析部4は、OSトレースログ情報の解析を行う。
トレース解析部4では、まず、アプリ関数アドレス抽出部12が、アプリケーション1内の各関数のアドレス情報と、その関数のサイズを取得する。
そして、トレースログ・アプリ関数/引数変換部14が、OSトレースログ情報の時刻毎のトレース情報(トレースログ)を解析し、明示的にエラーとなっているシステムコールトレース情報については、システムコールトレース情報の引数情報から、アプリケーション1内の関数アドレスを抽出する。
更に、トレースログ・アプリ関数/引数変換部14は、システムコールトレース情報から抽出した関数のアドレスと、アプリ関数アドレス抽出部12が抽出したアプリケーション1内の関数情報と照合を行い、システムコールトレース情報にある関数アドレスが関数情報と合致した場合、その関数から呼び出されたと判断し、関数名を出力すると共に、同じくシステムコールトレース情報に記録された関数の引数情報を抽出し、引数情報を出力する。
S107にて、OSトレースログ情報を解析している際、システムコールトレース以外のトレースログや、システムコールトレースでもエラーになっていないもの、または、システムコールトレースでエラーになっているものの、システムコールトレースに付随する引数に格納された関数アドレス情報がアプリケーション1内の関数情報と合致していない場合は、トレースログ・アプリ関数/引数変換部14は、OSトレース情報であると判断し、OSトレース情報を出力する。
以上が本トレース方式における全体の動作である。
次に図3を用いて、関数フック部5から呼び出される共有ライブラリ3の動作の詳細を説明する。
関数フック部5から呼び出されると、共有ライブラリ3では開始・終了部7が、トレースをすべきか否かを判断する(S110)。
トレースすべきか否かは、共有ライブラリ3内の外部変数に、トレース実施の値を設定し、それを開始・終了部7で判断する方法や、開始・終了部7にて、システムコールを発行し、OS2のトレース部11が動作している場合は、トレースを実施すると判断する方法が考えられる。
トレース開始・終了部7にて、トレースをしないと判断した場合(S110でNO)は、共有ライブラリ3の動作を終了する。
S110にて開始・終了部7がトレースを実施すべきと判断した場合(S110でYES)は、アプリ関数アドレス・引数取得部8に制御が移り、アプリ関数アドレス・引数取得部8では、関数フック部5を呼び出した関数のアドレスと、関数の引数の情報を取得する(S111)。
関数のアドレス情報については、関数が関数フック部5を呼び出す際、サブルーチンコールにて呼び出しており、呼び出し元に返る際のアドレスをスタックに保存している。
さらに、関数の引数も、スタックにつまれており、関数フック部5が開始・終了部7を介して、アプリ関数アドレス・引数取得部8に至るまでの間も関数呼び出しの形式で実施されている。
このため、アプリ関数アドレス・引数取得部8実行時のスタックポインタの内容を元に、スタックを逆算していくことで、関数フック部5を呼び出した関数の呼出し後に実施されるアドレス(関数先頭アドレスから関数先頭アドレス+関数サイズ内のいずれかのアドレス)と、関数の引数の内容を取得することができる。
S111にて関数アドレス・引数が取得されると、システムコール発行部9に制御が移り、関数アドレス・引数をシステムコールの引数に設定する処理が実施される(S112)。
そして、S113にてシステムコール発行部9は、明示的にエラーとなるシステムコールを発行する。
明示的にエラーとなるシステムコールを発行することで、OS2の内部動作に影響を与えずに、トレース部11には、システムコールのトレース情報が記録される。
明示的にエラーとなるシステムコールについては、可能な限りシステムコールの入口でエラー判断され、かつ、呼び出される頻度が少なく、かつ、通常のプログラミングでは設定されないエラーを設定するのがよい。
また、システムコールの引数についても、アプリケーション内関数の引数を格納する個数を多く取ることができるため、引数の個数が多いほうがよい。
例えば、Linux(登録商標)OSにおいては、mmap_pgoff()システムコールや、splice()システムコールなどを用い、mmap_pgoff()システムコールの引数flagsに負値を入れたり(通常は正値しか持たない)、splice()システムコールの引数fd_inに負値(通常は正値しか持たない)を入れ、他の引数に関数アドレスや関数の引数を設定し、システムコールを発行することが考えられる。
以上が本トレース方式における共有ライブラリ3の動作である。
次に図4を用いてトレース解析部4の動作を説明する。
トレース解析部4は、まず、S120にて、トレースログ収集部13が動作し、OS2のトレース部11が記録しているOSトレースログ情報を収集する。
本OSトレースログ情報には、トレース開始からトレース終了までに入った、様々なOS内イベントの情報が時系列に記録されており、共有ライブラリ3のシステムコール発行部9が実施した明示的にエラーとなるシステムコールの発行も、システムコールイベントのトレースログとして記録されている。
次にトレース解析部4では、アプリ関数アドレス抽出部12が、アプリケーション1のプログラムファイルから、アプリケーション1内の各関数のアドレス情報を抽出する(S121)。
アプリケーション1のプログラムファイルには、アプリケーション1のコードおよびデータが格納されているとともに、コード・データ内にある関数や変数の、アプリケーション1起動時の位置(アドレス)情報が入っている。
この情報については、アプリケーション1起動時に、アプリケーション1が動作するメモリには格納されないものの、HDD(Hard Disc Drive)などの二次記憶装置に入っているプログラムファイル内には保存されている。
例えば、Linux(登録商標)OSにてアプリケーションとして起動可能なELFフォーマットのプログラムファイルの場合、「.symtab」と呼ばれるシンボルテーブル領域には、関数名と、その関数のメモリ上の先頭アドレスと、その関数のサイズが記録されている。
アプリ関数アドレス抽出部12は、この情報を読み取り、関数名と、その関数の先頭アドレスおよびサイズを抽出する。
次にトレース解析部4では、トレースログ・アプリ関数/引数変換部14が、OSトレースログ情報について、記録されているOS内イベントを1つ1つ、以下のように解析していく。
まず、S122にて、記録されているOS内イベントがシステムコールイベントで、かつ、システムコールがエラーとなっているか確認する。
もし、システムコールイベントでない、または、システムコールイベントであっても、システムコールエラーとなっていない場合(S122でNO)は、OSトレース情報と判断し、トレースログ・アプリ関数/引数変換部14は、S123にてOSトレースとしての出力を行う。
更に、トレースログ・アプリ関数/引数変換部14は、解析したイベントがOSトレースログ情報の最後のものであるか判断し(S124)、最後であれば終了し(S124でYES)、最後でなければ(S124でNO)、S122に戻る。
S122にて、システムコールイベントで、かつ、システムコールがエラーとなっている場合(S122でYES)は、トレースログ・アプリ関数/引数変換部14は、S125にて、システムコールイベントのトレースログに記録されている引数内にあるアドレス情報が、アプリ関数アドレス抽出部12が抽出したアプリケーション1の関数アドレス情報と合致するか照合を行う。
これは、アプリ関数アドレス抽出部12が抽出した関数の先頭アドレスと関数サイズの情報から、
(関数の先頭アドレス)≦(システムコールトレースに記録されたアドレス)
≦(関数の先頭アドレス)+(関数のサイズ)
を満たしているかで判断される。
なお、上記の式で示される「アドレス」は、すべてプロセス空間上のアドレスである。
S126にて合致した関数が存在しない場合(S126のNo)、トレースログ・アプリ関数/引数変換部14は、通常のシステムコールトレースイベントと判断し、S123にてOSトレース情報として出力する。
以降は、S122でNOであった場合と同じである。
S126にて、システムコールイベントに記録されている関数アドレス情報が、アプリ関数アドレス抽出部12が抽出したアプリケーション1の関数アドレス情報と合致している場合(S126でYES)は、トレースログ・アプリ関数/引数変換部14は、S127にてOSトレースログにシステムコールイベントと一緒に記録されている、システムコールの引数の情報から、関数の引数情報を抽出する。
ここでは、共有ライブラリ3にて、アプリ関数アドレス・引数取得部8がスタックから抽出した引数を、システムコール発行部9が明示的にエラーとなるシステムコールの引数として埋め込んだものが抽出される。
次に、トレースログ・アプリ関数/引数変換部14は、抽出された関数情報を元に、関数名を出力するとともに、S127で抽出された関数の引数を出力する。
そして、S124にて、解析したイベントがOSトレースログ情報の最後のものであるか判断し(S124)、最後であれば終了し(S124のYes)、最後でなければ(S124のNo)、S122に戻る。
以上が、トレース解析部4の動作である。
以上のように、本トレース方式では、アプリケーション1の様々な関数から呼び出される関数フック部5に、共有ライブラリ内の開始・終了部7を結合し、関数フック部5から開始・終了部7が呼び出されると、トレースを実施すべきか否かを判断する。
そして、トレースを実施する場合は、関数フック部5を呼び出した関数のアドレスと、関数の引数を抽出し、それをシステムコールの引数として格納するとともに、明示的にエラーとなるシステムコールを発行する。
更に、アプリケーションの終了後のOSトレースログ情報から、システムコールイベントでかつエラーとなっているシステムコールイベントに対し、アプリケーションのプログラムファイルから抽出したアプリケーションの関数アドレス情報と、システムコールイベントに付随する関数の引数情報を抽出し、関数名と引数を出力する。
以上の手順により、アプリケーション内のトレースする箇所をコンパイル時に決定することなく、アプリケーション内の関数トレース情報を、OSトレース情報に含め、一緒に保存することができる。
このように、本実施の形態では、プログラムの動作を解析するトレース方式において、以下の手段を備えたトレース方式を説明した。
(a)アプリケーションの各関数から呼び出される関数フック部と、共有ライブラリ内のトレース機能とを、アプリケーション起動時に結合する、関数フック機能処理部
(b)上記共有ライブラリ内のトレース機能に以下の手段を備える。
(ア)関数フック部を呼び出した関数のアドレスを抽出するアプリ関数アドレス取得部
(イ)アプリ関数アドレス取得部が取得した関数アドレスをシステムコールの引数として設定し、明示的にエラーとなるシステムコールを発行する、システムコール発行部
(c)以下の機能を備えたトレース解析部
(ア)アプリケーションのプログラムファイルからアプリケーション内の関数の先頭アドレスと関数のサイズを抽出するアプリ関数アドレス抽出部
(イ)OSのトレース機能によって記録されたOSトレースログ情報から、システムコールイベントにて、かつ、システムコールがエラーとなったトレース情報について、そのトレース情報にシステムコールの引数として記録されている関数アドレス情報と、アプリ関数アドレス抽出部が抽出した関数の先頭アドレスおよび関数のサイズを照合し、該当関数がみつかった場合に、アプリ関数アドレス抽出部が抽出した関数名の情報を出力する、トレースログ・アプリ関数変換部
また、上記の構成に加えて、共有ライブラリに、トレースを実施するか否かを判断する開始・終了部を備えるトレース方式を説明した。
また、本実施の形態では、プログラムの動作を解析するトレース方式において、以下の手段を備えたトレース方式を説明した。
(a)アプリケーションの各関数から呼び出される関数フック部と、共有ライブラリ内のトレース機能とを、アプリケーション起動時に結合する、関数フック機能処理部
(b)上記共有ライブラリ内のトレース機能に以下の手段を備える。
(ア)トレースを実施するか否かを判断する開始・終了部
(イ)関数フック部を呼び出した関数のアドレスと関数の引数を抽出するアプリ関数アドレス・引数取得部
(ウ)アプリ関数アドレス・引数取得部が取得した関数アドレスおよび引数をシステムコールの引数として設定し、明示的にエラーとなるシステムコールを発行する、システムコール発行部
(c)以下の機能を備えたトレース解析部
(ア)アプリケーションのプログラムファイルからアプリケーション内の関数の先頭アドレスと関数のサイズを抽出するアプリ関数アドレス抽出部
(イ)OSのトレース機能によって記録されたOSトレースログ情報から、システムコールイベントにて、かつ、システムコールがエラーとなったトレース情報について、そのトレース情報にシステムコールの引数として記録されている関数アドレス情報と、アプリ関数アドレス抽出部が抽出した関数の先頭アドレスおよび関数のサイズを照合し、該当関数がみつかった場合に、アプリ関数アドレス抽出部が抽出した関数名と、トレース情報にシステムコールの引数として記録されている関数引数の情報を出力する、トレースログ・アプリ関数/引数変換部
最後に、本実施の形態に示した情報処理装置100のハードウェア構成例を図1を参照して説明する。
プロセッサ101は、プログラムを実行するCPU(Central Processing Unit)である。
プロセッサ101は、プログラムである、アプリケーション1、オペレーティングシステム2、共有ライブラリ3、トレース解析部4を実行する。
メモリ102は、RAM(Random Access Memory)である。
二次記憶装置103は、例えばROM(Read Only Memory)やフラッシュメモリ、ハードディスク装置である。
入力装置104は、例えばマウス、キーボードである。
出力装置105は、例えばディスプレイ装置である。
また、本実施の形態の説明において、「〜の判断」、「〜の判定」、「〜の取得」、「〜の抽出」、「〜の導出」、「〜の照合」、「〜の設定」、「〜の登録」、「〜の選択」、「〜の生成」、「〜の入力」、「〜の出力」等として説明している処理の結果を示す情報やデータや信号値や変数値がメモリ102にファイルとして記憶されている。
なお、図1の構成は、あくまでも情報処理装置100のハードウェア構成の一例を示すものであり、情報処理装置100のハードウェア構成は図1に記載の構成に限らず、他の構成であってもよい。
また、本実施の形態に示す手順により、本発明に係る情報処理方法を実現可能である。
1 アプリケーション、2 OS、3 共有ライブラリ、4 トレース解析部、5 関数フック部、6 関数フック機能処理部、7 開始・終了部、8 アプリ関数アドレス・引数取得部、9 システムコール発行部、10 システムコール処理部、11 トレース部、12 アプリ関数アドレス抽出部、13 トレースログ収集部、14 トレースログ・アプリ関数/引数変換部、100 情報処理装置、101 プロセッサ、102 メモリ、103 二次記憶装置、104 入力装置、105 出力装置。

Claims (9)

  1. OS(Operating System)と、前記OS上で動作する、関数が1つ以上含まれるアプリケーションプログラムとが実装されている情報処理装置であって、
    前記アプリケーションプログラムに含まれるいずれかの関数が実行される際に、実行対象の関数のプロセス空間上のアドレスを取得する関数アドレス取得部と、
    前記関数アドレス取得部により取得されたプロセス空間上のアドレスが設定された、通常のシステムコールとは異なる特殊システムコールを前記OSに発行するシステムコール発行部と、
    前記特殊システムコールを含む、前記OSに関するイベントのトレースログを生成するトレースログ生成部とを有することを特徴とする情報処理装置。
  2. 前記トレースログ生成部は、
    前記特殊システムコールに対して、前記関数アドレス取得部により取得されたプロセス空間上のアドレスが記述されるトレースログを生成し、
    前記情報処理装置は、更に、
    前記アプリケーションプログラムに含まれる各関数のプロセス空間上のアドレスの範囲を導出する関数アドレス導出部と、
    前記トレースログ生成部により生成されたトレースログの中から前記特殊システムコールのトレースログを抽出し、抽出した前記特殊システムコールのトレースログに記述されているプロセス空間上のアドレスに対して、前記関数アドレス導出部により導出された各関数のプロセス空間上のアドレスの範囲を照合して、前記特殊システムコールのトレースログに記述されているプロセス空間上のアドレスに対応する関数の関数名を判定する関数判定部と、
    前記関数判定部により判定された関数名を出力する出力部とを有することを特徴とする請求項1に記載の情報処理装置。
  3. 前記関数アドレス取得部は、
    前記アプリケーションプログラムに含まれるいずれかの関数が実行される際に、実行対象の関数のプロセス空間上のアドレスを取得するとともに、実行対象の関数の引数を取得し、
    前記システムコール発行部は、
    前記関数アドレス取得部により取得されたプロセス空間上のアドレスと引数とが設定された特殊システムコールを前記OSに発行し、
    前記トレースログ生成部は、
    前記特殊システムコールに対して、前記関数アドレス取得部により取得されたプロセス空間上のアドレスと引数とが記述されるトレースログを生成し、
    前記出力部は、
    前記関数判定部により判定された関数名を出力するとともに、前記特殊システムコールのトレースログに記述されている引数を出力することを特徴とする請求項2に記載の情報処理装置。
  4. 前記出力部は、
    前記トレースログ生成部により生成されたトレースログのうち前記特殊システムコールのトレースログ以外のトレースログを、前記OSで発生したイベントのトレースログとして出力することを特徴とする請求項2又は3に記載の情報処理装置。
  5. 前記システムコール発行部は、
    前記関数アドレス取得部により取得されたプロセス空間上のアドレスが設定された、エラーとして取り扱われるシステムコールを、前記特殊システムコールとして発行することを特徴とする請求項1〜4のいずれかに記載の情報処理装置。
  6. 前記情報処理装置は、更に、
    前記アプリケーションプログラムに含まれる関数ごとに、関数が実行される際に、実行対象の関数に対して、前記関数アドレス取得部を動作させるか否かを判定する動作判定部を有することを特徴とする請求項1〜5のいずれかに記載の情報処理装置。
  7. 前記関数アドレス取得部と前記システムコール発行部が、前記アプリケーションプログラムと動的にリンクされる共有ライブラリに含まれ、
    前記トレースログ生成部が、前記OSに含まれていることを特徴とする請求項1〜6のいずれかに記載の情報処理装置。
  8. OS(Operating System)と、前記OS上で動作する、関数が1つ以上含まれるアプリケーションプログラムとが実装されているコンピュータが行う情報処理方法であって、
    前記アプリケーションプログラムに含まれるいずれかの関数が実行される際に、実行対象の関数のプロセス空間上のアドレスを取得する関数アドレス取得ステップと、
    前記関数アドレス取得ステップにより取得されたプロセス空間上のアドレスが設定された、通常のシステムコールとは異なる特殊システムコールを前記OSに発行するシステムコール発行ステップと、
    前記特殊システムコールを含む、前記OSに関するイベントのトレースログを生成するトレースログ生成ステップとを有することを特徴とする情報処理方法。
  9. OS(Operating System)と、前記OS上で動作する、関数が1つ以上含まれるアプリケーションプログラムとが実装されているコンピュータに、
    前記アプリケーションプログラムに含まれるいずれかの関数が実行される際に、実行対象の関数のプロセス空間上のアドレスを取得する関数アドレス取得ステップと、
    前記関数アドレス取得ステップにより取得されたプロセス空間上のアドレスが設定された、通常のシステムコールとは異なる特殊システムコールを前記OSに発行するシステムコール発行ステップと、
    前記特殊システムコールを含む、前記OSに関するイベントのトレースログを生成するトレースログ生成ステップとを実行させることを特徴とするプログラム。
JP2012182381A 2012-08-21 2012-08-21 情報処理装置及び情報処理方法及びプログラム Expired - Fee Related JP5800777B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012182381A JP5800777B2 (ja) 2012-08-21 2012-08-21 情報処理装置及び情報処理方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012182381A JP5800777B2 (ja) 2012-08-21 2012-08-21 情報処理装置及び情報処理方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2014041419A JP2014041419A (ja) 2014-03-06
JP5800777B2 true JP5800777B2 (ja) 2015-10-28

Family

ID=50393647

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012182381A Expired - Fee Related JP5800777B2 (ja) 2012-08-21 2012-08-21 情報処理装置及び情報処理方法及びプログラム

Country Status (1)

Country Link
JP (1) JP5800777B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9535814B2 (en) * 2014-03-31 2017-01-03 Nec Corporation Dynamic border line tracing for tracking message flows across distributed systems

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000172530A (ja) * 1998-12-08 2000-06-23 Nec Corp リアルタイム処理ソフトウェアの動作状態データの収集/表示装置、及び方法
JP4628149B2 (ja) * 2005-03-14 2011-02-09 株式会社エヌ・ティ・ティ・ドコモ アクセス制御装置及びアクセス制御方法
WO2009102006A1 (ja) * 2008-02-14 2009-08-20 Nec Corporation アクセス制御装置、その方法及び情報記録媒体
JP5717678B2 (ja) * 2012-03-08 2015-05-13 三菱電機株式会社 コンピュータシステムおよびコンピュータシステムを用いたネットワークシステム

Also Published As

Publication number Publication date
JP2014041419A (ja) 2014-03-06

Similar Documents

Publication Publication Date Title
JP6516870B2 (ja) プログラム命令を安全に実行する方法及び該方法用プログラム
US9274923B2 (en) System and method for stack crawl testing and caching
US9727436B2 (en) Adding a profiling agent to a virtual machine to permit performance and memory consumption analysis within unit tests
JP5386905B2 (ja) プロファイリング方法およびプロファイリングプログラム
JP4681491B2 (ja) プロファイリングプログラムおよびプロファイリング方法
KR20090017598A (ko) 소프트웨어를 분석하기 위한 방법 및 시스템
KR101325954B1 (ko) 코드분석과 화면분석을 이용한 안드로이드 어플의 자동실행 방법, 및 이를 위한 안드로이드 어플 자동실행 프로그램을 기록한 컴퓨터로 판독가능한 기록매체
CN109471697B (zh) 一种监控虚拟机中系统调用的方法、装置及存储介质
EP3387536B1 (en) Method and device for non-intrusively collecting function trace data
US20090228875A1 (en) Method and System for Reducing Disk Allocation by Profiling Symbol Usage
JP5303795B2 (ja) アプリケーションの解析方法、解析システム及び解析プログラム
JP6023317B2 (ja) 情報処理装置、および、情報処理方法
CN111813672B (zh) 一种针对多种处理器架构的非侵入式覆盖率统计方法
TWI656453B (zh) 檢測系統及檢測方法
CN113176926B (zh) 一种基于虚拟机自省技术的api动态监控方法及系统
JP5800777B2 (ja) 情報処理装置及び情報処理方法及びプログラム
JP2007018254A (ja) 言語処理装置
US11294653B2 (en) Methods and systems of disassembling executable code
CN112861138A (zh) 软件安全性分析方法及分析装置、电子设备及存储介质
JP2009064125A (ja) サーバ装置、そのプログラム
KR101583306B1 (ko) 가상화 난독화 기법이 적용된 실행 파일의 분석 방법 및 분석 장치
RU2390821C1 (ru) Способ динамической инструментации
JP2015114786A (ja) 情報処理システム及びプログラム
CN116009825A (zh) 一种快捷操作在线集成开发环境的方法、系统及装置
JP2005301415A (ja) コンパイル方式、シミュレータ、エミュレータおよびプログラム開発支援システム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141203

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150724

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: 20150728

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150825

R150 Certificate of patent or registration of utility model

Ref document number: 5800777

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees