(57)【特許請求の範囲】
【請求項１】
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場合に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうための警告処理部と、
前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在するときには、前記呼び出し関数の代わりに前記代替関数を実行するための代替関数実行部とを備える、情報処理装置。
【請求項２】
前記代替関数実行部は、前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在しないときには、前記呼び出し関数を実行する、請求項１に記載の情報処理装置。
【請求項３】
前記警告処理部は、前記警告処理として警告情報のログファイルへの出力を行なう、請求項１または２に記載の情報処理装置。
【請求項４】
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場合に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうための警告処理部を備え、
前記不正コーディング検知ライブラリは、前記所定の関数としてスレッドセーフでない関数をラッピングしたラッパー関数を含み、
前記所定の条件は、前記呼び出し元がマルチスレッドプログラムであることである、情報処理装置。
【請求項５】
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場合に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうための警告処理部を備え、
前記不正コーディング検知ライブラリは、前記所定の関数として非同期シグナルセーフでない関数をラッピングしたラッパー関数を含み、
前記所定の条件は、前記関数の呼び出し元がシグナルハンドラであることである、情報処理装置。
【請求項６】
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場合に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうステップを含み、
前記不正コーディング検知ライブラリは、前記所定の関数としてスレッドセーフでない関数をラッピングしたラッパー関数を含み、
前記所定の条件は、前記呼び出し元がマルチスレッドプログラムであることである、プログラム不正検知方法。
【請求項７】
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場合に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうステップを含み、
前記不正コーディング検知ライブラリは、前記所定の関数として非同期シグナルセーフでない関数をラッピングしたラッパー関数を含み、
前記所定の条件は、前記関数の呼び出し元がシグナルハンドラであることである、プログラム不正検知方法。
【請求項８】
コンピュータに、
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場合に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうステップを実行させ、
前記不正コーディング検知ライブラリは、前記所定の関数としてスレッドセーフでない関数をラッピングしたラッパー関数を含み、
前記所定の条件は、前記呼び出し元がマルチスレッドプログラムであることである、プログラム不正検知プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、プログラム不正検知方法、およびプログラム不正検知プログラムに関し、特に、関数呼び出しについてのプログラム不正を検知する情報処理装置、プログラム不正検知方法、およびプログラム不正検知プログラムに関する。
【背景技術】
【０００２】
マルチスレッドプログラミングにおけるプログラム不正検知を行なうための技術として、たとえば、特開２００７−２４９８８４号公報（特許文献１）には、以下のような技術が開示されている。すなわち、ライブラリと該ライブラリを利用して並行動作または並列動作を行なうプログラムとで構成されるソフトウェアの検証をコンピュータに実行させるソフトウェア検証プログラムであって、上記ライブラリ中で定義された要素であって上記プログラムが利用できる要素である共有要素が、上記プログラム中で利用されている箇所を共有要素利用箇所として抽出する共有要素利用箇所抽出ステップと、上記ライブラリ中で上記共有要素毎に定義されたスレッドセーフ条件に基づいて、上記共有要素利用箇所抽出ステップにより抽出された共有要素利用箇所における共有要素がスレッドセーフ条件を満足するか否かの検証を行なう条件検証ステップとをコンピュータに実行させる。
【０００３】
また、マルチスレッド環境で最適な処理を行なうための技術として、たとえば、特開２００１−５１８６０号公報（特許文献２）には、以下のような技術が開示されている。すなわち、複数のスレッドを並行して実行可能なマルチスレッドプログラムからシングルスレッドプログラムを呼び出して実行するマルチスレッド処理装置において、上記マルチスレッドプログラムの特定の１スレッドにより上記シングルスレッドプログラムを最初に呼び出して実行する際に生成され、上記シングルスレッドブログラムを呼び出す唯一の呼出専用スレッドを備える。
【０００４】
また、特開２００１−２２９０３５号公報（特許文献３）には、以下のような技術が開示されている。すなわち、マルチスレッドで動作するアプリケーションを含む処理システム１０における処理方法は、アプリケーションの起動時に、マルチスレッドで動作する親プロセス、およびシングルスレッドで動作する子プロセスを起動する工程と、マルチスレッドに対応していないプログラムライブラリが必要な動作であるかを判断する工程と、マルチスレッドに対応していないプログラムライブラリが必要であると判断された場合に、待機状態の子プロセスがあるかを判断する工程と、待機状態の子プロセスがないと判断された場合に、停止状態の子プロセスを新たに起動する工程とを含む。
【０００５】
また、特開平１０−１３３８８８号公報（特許文献４）には、以下のような技術が開示されている。すなわち、１以上のソフトウェア実行環境の各プロセスに１以上のＣＰＵ割当て単位を持つマルチスレッド環境で各スレッドに割りつけられたソフト部品から他の
ソフト部品の実行依頼情報が発行された場合に、ソフト部品の配置を示す共通参照情報を参照し、ソフト部品を結合し実行を制御するソフト部品結合制御装置であって、スレッド毎に、受け取った実行依頼情報と上記共通参照情報により宛先のソフト部品の所在を判定し上記所在に基づいた手続きで上記実行依頼情報を伝達するスレッド間部品結合手段と、２つのプロセス間のソフト部品の結合と実行を制御するとき、プロセス毎に、受け取った実行依頼情報と上記共通参照情報により宛先のソフト部品の所在を判定し上記所在に基づいた手続きで上記実行依頼情報を伝達するプロセス間部品結合手段とを備える。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−２４９８８４号公報
【特許文献２】特開２００１−５１８６０号公報
【特許文献３】特開２００１−２２９０３５号公報
【特許文献４】特開平１０−１３３８８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
マルチスレッドプログラミングにおいては、開発者が、スレッドセーフである関数を確認しながらコーディングを行なうのが一般的である。ここで、スレッドセーフとは、たとえば、マルチスレッド環境において、一方のスレッドが、あるデータの処理または手続きを呼び出した場合に、他方のスレッドにおいてデータの破壊および異常動作が生じないように設計されていることを意味する。
【０００８】
すなわち、マルチスレッドプログラムにおいて、スレッドセーフでない関数を使用した場合には、各関数の競合状況などによって動作が不定となる可能性がある。そして、明示的なエラーの出力等を行なわないと、このような不正なコーディングによって生成されたモジュールにおける不具合の原因究明が困難となる。
【０００９】
また、このような警告処理を行なうためには、アプリケーションプログラムを修正してプログラム不正検知機能を実装する必要が生じてしまう。
【００１０】
しかしながら、特許文献１〜４には、このような問題点を解決するための構成は開示されていない。
【００１１】
この発明は、上述の課題を解決するためになされたもので、その目的は、アプリケーションプログラムを修正することなく、当該プログラムの不正検知および警告処理を適切に行なうことが可能な情報処理装置、プログラム不正検知方法、およびプログラム不正検知プログラムを提供することである。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、この発明のある局面に係わる情報処理装置は、アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場合に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうための警告処理部を備える。
【００１３】
上記課題を解決するために、この発明のある局面に係わるプログラム不正検知方法は、アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場合に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうステップを含む。
【００１４】
上記課題を解決するために、この発明のある局面に係わるプログラム不正検知プログラムは、コンピュータに、アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場合に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうステップを実行させるためのプログラムである。
【発明の効果】
【００１５】
本発明によれば、アプリケーションプログラムを修正することなく、当該プログラムの不正検知および警告処理を適切に行なうことができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施の形態に係る情報処理装置の概略構成図である。
【図２】本発明の実施の形態に係る情報処理装置が提供する制御構造を示すブロック図である。
【図３】本発明の実施の形態に係る情報処理装置がプログラム不正検知を行なう際の動作手順を示すフローチャートである。
【図４】本発明の実施の形態に係る情報処理装置がプログラム不正検知を行なう際の動作手順の他の例を示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態について図面を用いて説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰り返さない。
【００１８】
本発明の実施の形態に係る情報処理装置は、典型的には、汎用的なアーキテクチャを有するコンピュータを基本構造としており、予めインストールされたプログラムを実行することで、後述するような各種機能を提供する。一般的に、このようなプログラムは、フレキシブルディスク（Flexible Disk）およびＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの記録媒体に格納されて、あるいはネットワークなどを介して流通する。
【００１９】
本発明の実施の形態に係るプログラムは、ＯＳ等の他のプログラムの一部に組み込まれて提供されるものであってもよい。この場合でも、本発明の実施の形態に係るプログラム自体は、上記のような組み込み先の他のプログラムが有するモジュールを含んでおらず、当該他のプログラムと協働して処理が実行される。すなわち、本発明の実施の形態に係るプログラムとしては、このような他のプログラムに組み込まれた形態であってもよい。
【００２０】
なお、代替的に、プログラムの実行により提供される機能の一部もしくは全部を専用のハードウェア回路として実装してもよい。
【００２１】
［装置構成］
図１は、本発明の実施の形態に係る情報処理装置の概略構成図である。
【００２２】
図１を参照して、情報処理装置１０１は、ハードウエアコンポーネントとして、ディスプレイ２と、キーボード３と、Ｉ／Ｏインタフェース５と、ＣＰＵ（Central Processing Unit）６と、メモリ７と、ストレージ８とを備える。ディスプレイ２、キーボード３、ネットワーク４およびメモリ７は、Ｉ／Ｏインタフェース５を介して接続される。
【００２３】
また、ストレージ８は、ソフトウェアコンポーネントとして、ユーザプログラム９と、不正コーディング検知ライブラリ１０と、ＯＳ標準ライブラリ１１と、ログファイル１２と、設定ファイル１３とを格納している。
【００２４】
ＣＰＵ６は、メモリ７に格納されたプログラム（コード）を所定順序で実行することにより、各種の演算を実施する。メモリ７は、典型的には、ＤＲＡＭ（Dynamic Random Access Memory）などの揮発性の記憶装置であり、ストレージ８から読み出されたプログラムに加えて、各種の演算処理結果を示すデータなどを保持する。また、ストレージ８は不揮発性の磁気記憶装置であり、ＣＰＵ６で実行されるプログラムに加えて、各種設定値などが格納される。このストレージ８にインストールされるプログラムは、記録媒体に格納された状態で流通する。この記録媒体は、たとえば、ＣＦ（Compact Flash）およびＳＤ（Secure Digital）などの汎用的な半導体記憶デバイス、フレキシブルディスク（Flexible Disk）などの磁気記憶媒体、またはＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの光学記憶媒体である。
【００２５】
なお、記録媒体に格納されたプログラムを情報処理装置１０１にインストールする形態に代えて、ネットワーク４を介して配信サーバなどからダウンロードしたプログラムを情報処理装置１０１にインストールしてもよい。
【００２６】
また、情報処理装置１０１には、必要に応じてプリンタなどの他の出力装置が接続されてもよい。
【００２７】
［制御構造］
次に、情報処理装置１０１におけるプログラム不正検知機能を提供するための制御構造について説明する。
【００２８】
図２は、本発明の実施の形態に係る情報処理装置が提供する制御構造を示すブロック図である。図２に示す情報処理装置１０１における各ブロックは、ストレージ８に格納されたプログラム（コード）などをメモリ７に展開して、ＣＰＵ６に実行させることで提供される。なお、図２に示す情報処理装置１０１の制御構造の一部もしくは全部を専用ハードウェアおよび／または配線回路によって実現してもよい。
【００２９】
図２を参照して、情報処理装置１０１は、その制御構造として、関数判定部２１と、警告処理部２２と、代替関数実行部２３とを備える。
【００３０】
関数判定部２１は、アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリ１０における所定の関数に対応するか否かを判定する。
【００３１】
警告処理部２２は、呼び出し関数が上記所定の関数に対応すると判定した場合には、不正コーディング検知ライブラリ１０における上記所定の関数を実行することにより、呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、当該呼び出し元が所定の条件を満たす場合に警告処理を行なう。たとえば、警告処理部２２は、警告処理として警告情報のログファイルへの出力を行なう。
【００３２】
代替関数実行部２３は、呼び出し関数の呼び出し元が上記所定の条件を満たす場合であって呼び出し関数の代替関数が存在するときには、呼び出し関数の代わりに代替関数を実行する。一方、代替関数実行部２３は、呼び出し関数の呼び出し元が上記所定の条件を満たす場合であって呼び出し関数の代替関数が存在しないときには、呼び出し関数を実行する。
【００３３】
たとえば、不正コーディング検知ライブラリ１０は、所定の関数としてスレッドセーフでない関数を含む。
【００３４】
警告処理部２２は、呼び出し関数が不正コーディング検知ライブラリ１０における所定の関数に対応すると判定した場合には、呼び出し関数の呼び出し元がマルチスレッドプログラムであるか否かを判定し、マルチスレッドプログラムである場合に警告処理を行なう。
【００３５】
具体的には、ユーザプログラム９は、利用者が開発したアプリケーションである。また、不正コーディング検知ライブラリ１０は、ＯＳ標準ライブラリ１１が提供するスレッドセーフでない関数をラッピングしたライブラリである。
【００３６】
ユーザプログラム９を実行するＣＰＵ６は、優先的に不正コーディング検知ライブラリ１０の関数を実行し、正しくないコーディングである場合にはログファイル１２に警告を出力する。これにより、ユーザプログラム９の実行時に当該プログラムの問題を検知することが可能となる。
【００３７】
すなわち、情報処理装置１０１では、オペレーティングシステムの標準ライブラリ１１が提供するスレッドセーフでない関数をラッピングした不正コーディング検知ライブラリ１０を新たに提供する。そして、ユーザプログラム９を実行するＣＰＵ６が優先的に不正コーディング検知ライブラリ１０のラッパー関数を実行する。
【００３８】
これにより、アプリケーションにおいてスレッドセーフでない関数が実行されたことを検知し、これをログファイル１２に記録することができる。
【００３９】
また、設定ファイル１３に必要に応じて任意に設定を行なうことにより、ＯＳ標準ライブラリ１１にスレッドセーフな代替関数が存在する場合において、当該代替関数を動的に実行する動作を選択可能となる。
【００４０】
［動作］
次に、本発明の実施の形態に係る情報処理装置の動作について図面を用いて説明する。本発明の実施の形態では、情報処理装置１０１を動作させることによって、本発明の実施の形態に係るプログラム不正検知方法が実施される。よって、本発明の実施の形態に係るプログラム不正検知方法の説明は、以下の情報処理装置１０１の動作説明に代える。なお、以下の説明においては、適宜図１を参照する。
【００４１】
図３は、本発明の実施の形態に係る情報処理装置がプログラム不正検知を行なう際の動作手順を示すフローチャートである。
【００４２】
図３を参照して、ＣＰＵ６がユーザプログラム９を実行し、スレッドセーフでない関数を呼び出した場合には（ステップＳ１でＹＥＳ）、ＣＰＵ６は、不正コーディング検知ライブラリ１０において提供される対応のラッパー関数を、不正コーディング検知ライブラリ１０のプリロードを行なうことによって優先的に実行する。なお、このような動作を行なうための設定は、設定ファイル１３に対して行なうことが可能である。
【００４３】
次に、ＣＰＵ６は、当該ラッパー関数において、当該スレッドセーフでない関数の呼び出し元がマルチスレッドプログラムであるか否かを判定し、マルチスレッドプログラムから呼び出された場合には（ステップＳ３でＹＥＳ）、ログファイル１２に警告を出力する（ステップＳ４）。
【００４４】
次に、ＣＰＵ６は、当該ラッパー関数において、代替処理を実行するか否かの判定を行い、代替実行を行なう場合には（ステップＳ５でＹＥＳ）、ＯＳ標準ライブラリ１１に当該スレッドセーフでない関数と代替可能なスレッドセーフな代替関数が存在するか否かを確認する。
【００４５】
そして、ＣＰＵ６は、当該ラッパー関数において、スレッドセーフな代替関数が存在する場合には（ステップＳ６でＹＥＳ）、当該代替関数を実行して（ステップＳ７）処理を終了する。
【００４６】
一方、ＣＰＵ６は、当該スレッドセーフでない関数の呼び出し元がマルチスレッドプログラムでない場合（ステップＳ３でＮＯ）、代替関数を実行しない設定である場合（ステップＳ５でＮＯ）または代替関数が存在しない場合（ステップＳ６でＮＯ）には、当該スレッドセーフでない関数を実行する（ステップＳ８）。
【００４７】
ところで、マルチスレッドプログラムにおいて、スレッドセーフでない関数を使用した場合には、各関数の競合状況などによって動作が不定となる可能性がある。そして、明示的なエラーの出力等を行なわないと、このような不正なコーディングによって生成されたモジュールにおける不具合の原因究明が困難となる。また、このような警告処理を行なうためには、アプリケーションプログラムを修正してプログラム不正検知機能を実装する必要が生じてしまう。
【００４８】
これに対して、本発明の実施の形態に係る情報処理装置では、関数判定部２１は、アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリ１０における所定の関数に対応するか否かを判定する。そして、警告処理部２２は、当該呼び出し関数が上記所定の関数に対応すると判定した場合には、不正コーディング検知ライブラリ１０における上記所定の関数を実行することにより、呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、当該呼び出し元が所定の条件を満たす場合に警告処理を行なう。
【００４９】
このような構成により、アプリケーションプログラムを修正することなく、マルチスレッドプログラムにおけるスレッドセーフでない関数の実行を検知することが可能となる。すなわち、情報処理装置１０１では、不正コーディング検知ライブラリ１０が提供するラッパー関数により、プログラム実行時にマルチスレッドプログラムからの関数呼び出しであるか否かを判断することが可能である。これにより、ユーザプログラム９がマルチスレッドプログラムである場合において、当該プログラムがスレッドセーフでない関数を呼び出したときには、ユーザプログラム９の修正を行なうことなく明示的な警告を出力することができる。
【００５０】
たとえば、オペレーティングシステムの標準ライブラリが提供するスレッドセーフでない関数がマルチスレッドプログラムにおいて使用された場合において、当該プログラムの実行時に不正を検知し、マルチスレッドプログラムからスレッドセーフでない関数の実行が行われたという警告をログファイル１２に記録することができる。これにより、プログラムのデバッグを効率的に行なうことが可能となる。
【００５１】
すなわち、本発明の実施の形態に係る情報処理装置における各構成要素のうち、関数判定部２１および警告処理部２２からなる最小構成により、アプリケーションプログラムを修正することなく、当該プログラムの不正検知および警告処理を適切に行なう、という本発明の目的を達成することが可能となる。
【００５２】
また、本発明の実施の形態に係る情報処理装置では、代替関数実行部２３は、呼び出し関数の呼び出し元が所定の条件を満たす場合であって呼び出し関数の代替関数が存在するときには、呼び出し関数の代わりに代替関数を実行する。
【００５３】
具体的には、情報処理装置１０１では、不正コーディング検知ライブラリ１０が提供するラッパー関数により、代替関数の情報を保持し、当該代替関数を呼び出すことが可能である。これにより、マルチスレッドプログラムからスレッドセーフでない関数を呼び出した場合において、スレッドセーフな代替関数が提供されていれば、プログラム実行時に、スレッドセーフな代替関数に置き換えてプログラムを実行することができる。
【００５４】
すなわち、スレッドセーフな代替関数が存在する場合には、設定ファイル１３に対する設定内容に基づき、自動的にこの代替関数を実行することができる。これにより、アプリケーションプログラムを修正することなく、マルチスレッドプログラムにおいて、スレッドセーフでない関数の実行を検知することに加えて、スレッドセーフな関数を正しく実行することが可能となる。
【００５５】
また、本発明の実施の形態に係る情報処理装置では、代替関数実行部２３は、呼び出し関数の呼び出し元が所定の条件を満たす場合であって呼び出し関数の代替関数が存在しないときには、呼び出し関数を実行する。
【００５６】
このような構成により、スレッドセーフな代替関数が存在しない場合に、アプリケーションにおいて呼び出されたスレッドセーフでない関数を実行し、処理を継続することができる。
【００５７】
また、本発明の実施の形態に係る情報処理装置では、警告処理部２２は、警告処理として警告情報のログファイルへの出力を行なう。
【００５８】
このような構成により、プログラムの不正を示す警告情報をユーザに適切に提示することができる。
【００５９】
また、本発明の実施の形態に係る情報処理装置では、不正コーディング検知ライブラリ１０は、所定の関数としてスレッドセーフでない関数を含む。そして、警告処理部２２は、呼び出し関数が不正コーディング検知ライブラリ１０における所定の関数に対応すると判定した場合には、呼び出し関数の呼び出し元がマルチスレッドプログラムであるか否かを判定し、マルチスレッドプログラムである場合に警告処理を行なう。
【００６０】
このような構成により、特にマルチスレッドプログラムの不正検知および警告処理を適切に行なうことができる。
【００６１】
なお、本発明の実施の形態に係る情報処理装置は、スレッドセーフでない関数の実行検知に限らず、非同期シグナルセーフでない関数の実行検知などを行ってもよい。
【００６２】
ここで、シグナルとは、たとえば、ＯＳにおける非同期イベントの通知、すなわちアプリケーションレベルでの割り込みを意味する。非同期シグナルセーフな関数とは、たとえば、関数内でシグナルに割り込まれても、次回の関数コールにおいて問題の生じない関数を意味する。
【００６３】
すなわち、不正コーディング検知ライブラリ１０は、所定の関数として非同期シグナルセーフでない関数を含む。
【００６４】
警告処理部２２は、呼び出し関数が不正コーディング検知ライブラリ１０における所定の関数に対応すると判定した場合には、呼び出し関数の呼び出し元がシグナルハンドラであるか否かを判定し、シグナルハンドラである場合に警告処理を行なう。
【００６５】
図４は、本発明の実施の形態に係る情報処理装置がプログラム不正検知を行なう際の動作手順の他の例を示すフローチャートである。
【００６６】
図４を参照して、ＣＰＵ６がユーザプログラム９を実行し、非同期シグナルセーフでない関数を呼び出した場合には（ステップＳ１１でＹＥＳ）、ＣＰＵ６は、不正コーディング検知ライブラリ１０において提供される対応のラッパー関数を、不正コーディング検知ライブラリ１０のプリロードを行なうことによって優先的に実行する。なお、このような動作を行なうための設定は、設定ファイル１３に対して行なうことが可能である。
【００６７】
次に、ＣＰＵ６は、当該ラッパー関数において、当該非同期シグナルセーフでない関数の呼び出し元がシグナルハンドラであるか否かを判定し、シグナルハンドラから呼び出された場合には（ステップＳ１３でＹＥＳ）、ログファイル１２に警告を出力する（ステップＳ１４）。ここで、シグナルハンドラとは、たとえば、プロセスがシグナルを受信したときに実行する関数を意味する。
【００６８】
次に、ＣＰＵ６は、当該ラッパー関数において、代替処理を実行するか否かの判定を行い、代替実行を行なう場合には（ステップＳ１５でＹＥＳ）、ＯＳ標準ライブラリ１１に当該非同期シグナルセーフでない関数と代替可能な非同期シグナルセーフな代替関数が存在するか否かを確認する。
【００６９】
そして、ＣＰＵ６は、当該ラッパー関数において、非同期シグナルセーフな代替関数が存在する場合には（ステップＳ１６でＹＥＳ）、当該代替関数を実行して（ステップＳ１７）処理を終了する。
【００７０】
一方、ＣＰＵ６は、当該非同期シグナルセーフでない関数の呼び出し元がシグナルハンドラでない場合（ステップＳ１３でＮＯ）、代替関数を実行しない設定にしている場合（ステップＳ１５でＮＯ）または代替関数が存在しない場合（ステップＳ１６でＮＯ）には、当該非同期シグナルセーフでない関数を実行する（ステップＳ１８）。
【００７１】
このように、本発明の実施の形態に係る情報処理装置では、不正コーディング検知ライブラリ１０は、所定の関数として非同期シグナルセーフでない関数を含む。そして、警告処理部２２は、呼び出し関数が不正コーディング検知ライブラリ１０における所定の関数に対応すると判定した場合には、呼び出し関数の呼び出し元がシグナルハンドラであるか否かを判定し、シグナルハンドラである場合に警告処理を行なう。
【００７２】
このような構成により、特に非同期シグナルを採用するプログラムの不正検知および警告処理を適切に行なうことができる。
【００７３】
上記実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記説明ではなく特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【００７４】
上記実施の形態の一部または全部は以下の付記のようにも記載されうるが、本発明の範囲は、以下の付記に限定されるものではない。
【００７５】
［付記１］
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応するか否かを判定するための関数判定部と、
前記呼び出し関数が前記所定の関数に対応すると判定した場合には、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうための警告処理部とを備える、情報処理装置。
【００７６】
［付記２］
前記情報処理装置は、さらに、
前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在するときには、前記呼び出し関数の代わりに前記代替関数を実行するための代替関数実行部を備える、付記１に記載の情報処理装置。
【００７７】
［付記３］
前記代替関数実行部は、前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在しないときには、前記呼び出し関数を実行する、付記２に記載の情報処理装置。
【００７８】
［付記４］
前記警告処理部は、前記警告処理として警告情報のログファイルへの出力を行なう、付記１から３のいずれかに記載の情報処理装置。
【００７９】
［付記５］
前記不正コーディング検知ライブラリは、前記所定の関数としてスレッドセーフでない関数を含み、
前記所定の条件は、前記呼び出し元がマルチスレッドプログラムであることである、付記１から４のいずれかに記載の情報処理装置。
【００８０】
［付記６］
前記不正コーディング検知ライブラリは、前記所定の関数として非同期シグナルセーフでない関数を含み、
前記所定の条件は、前記関数の呼び出し元がシグナルハンドラであることである、付記１から４のいずれかに記載の情報処理装置。
【００８１】
［付記７］
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応するか否かを判定するステップと、
前記呼び出し関数が前記所定の関数に対応すると判定した場合には、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうステップとを含む、プログラム不正検知方法。
【００８２】
［付記８］
前記プログラム不正検知方法は、さらに、
前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在するときには、前記呼び出し関数の代わりに前記代替関数を実行するステップを含む、付記７に記載のプログラム不正検知方法。
【００８３】
［付記９］
前記代替関数を実行するステップにおいては、前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在しないときには、前記呼び出し関数を実行する、付記８に記載のプログラム不正検知方法。
【００８４】
［付記１０］
前記警告処理を行なうステップにおいては、前記警告処理として警告情報のログファイルへの出力を行なう、付記７から９のいずれかに記載のプログラム不正検知方法。
【００８５】
［付記１１］
前記不正コーディング検知ライブラリは、前記所定の関数としてスレッドセーフでない関数を含み、
前記所定の条件は、前記呼び出し元がマルチスレッドプログラムであることである、付記７から１０のいずれかに記載のプログラム不正検知方法。
【００８６】
［付記１２］
前記不正コーディング検知ライブラリは、前記所定の関数として非同期シグナルセーフでない関数を含み、
前記所定の条件は、前記関数の呼び出し元がシグナルハンドラであることである、付記７から１０のいずれかに記載のプログラム不正検知方法。
【００８７】
［付記１３］
コンピュータに、
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応するか否かを判定するステップと、
前記呼び出し関数が前記所定の関数に対応すると判定した場合には、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうステップとを実行させるための、プログラム不正検知プログラム。
【００８８】
［付記１４］
前記プログラム不正検知プログラムは、さらに、コンピュータに、
前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在するときには、前記呼び出し関数の代わりに前記代替関数を実行するステップを実行させる、付記１３に記載のプログラム不正検知プログラム。
【００８９】
［付記１５］
前記代替関数を実行するステップにおいては、前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在しないときには、前記呼び出し関数を実行する、付記１４に記載のプログラム不正検知プログラム。
【００９０】
［付記１６］
前記警告処理を行なうステップにおいては、前記警告処理として警告情報のログファイルへの出力を行なう、付記１３から１５のいずれかに記載のプログラム不正検知プログラム。
【００９１】
［付記１７］
前記不正コーディング検知ライブラリは、前記所定の関数としてスレッドセーフでない関数を含み、
前記所定の条件は、前記呼び出し元がマルチスレッドプログラムであることである、付記１３から１６のいずれかに記載のプログラム不正検知プログラム。
【００９２】
［付記１８］
前記不正コーディング検知ライブラリは、前記所定の関数として非同期シグナルセーフでない関数を含み、
前記所定の条件は、前記関数の呼び出し元がシグナルハンドラであることである、付記１３から１６のいずれかに記載のプログラム不正検知プログラム。
【産業上の利用可能性】
【００９３】
本発明によれば、情報処理装置におけるソフトウェア評価および性能検証を行なうことができる。したがって、本発明は、産業上の利用可能性を有している。
【符号の説明】
【００９４】
２  ディスプレイ
３  キーボード
５  Ｉ／Ｏインタフェース
６  ＣＰＵ
７  メモリ
８  ストレージ
９  ユーザプログラム
１０  不正コーディング検知ライブラリ
１１  ＯＳ標準ライブラリ
１２  ログファイル
１３  設定ファイル
２１  関数判定部
２２  警告処理部
２３  代替関数実行部
１０１  情報処理装置
【図１】
0005803157.tif 000002
【図２】
0005803157.tif 000003
【図３】
0005803157.tif 000004
【図４】
0005803157.tif 000005