特許第5803157号(P5803157)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本電気株式会社の特許一覧

特許5803157情報処理装置、プログラム不正検知方法、およびプログラム不正検知プログラム
<>
  • 特許5803157-情報処理装置、プログラム不正検知方法、およびプログラム不正検知プログラム 図000002
  • 特許5803157-情報処理装置、プログラム不正検知方法、およびプログラム不正検知プログラム 図000003
  • 特許5803157-情報処理装置、プログラム不正検知方法、およびプログラム不正検知プログラム 図000004
  • 特許5803157-情報処理装置、プログラム不正検知方法、およびプログラム不正検知プログラム 図000005
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5803157
(24)【登録日】2015年9月11日
(45)【発行日】2015年11月4日
(54)【発明の名称】情報処理装置、プログラム不正検知方法、およびプログラム不正検知プログラム
(51)【国際特許分類】
   G06F 11/30 20060101AFI20151015BHJP
   G06F 11/28 20060101ALI20151015BHJP
【FI】
   G06F11/30 K
   G06F11/28 340A
【請求項の数】8
【全頁数】15
(21)【出願番号】特願2011-49308(P2011-49308)
(22)【出願日】2011年3月7日
(65)【公開番号】特開2012-185732(P2012-185732A)
(43)【公開日】2012年9月27日
【審査請求日】2014年2月13日
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】110002044
【氏名又は名称】特許業務法人ブライタス
(72)【発明者】
【氏名】秋山 隆之
【審査官】 多賀 実
(56)【参考文献】
【文献】 特開2004−126854(JP,A)
【文献】 特開平07−225703(JP,A)
【文献】 特表2003−508846(JP,A)
【文献】 特表2003−521063(JP,A)
【文献】 特表2004−530184(JP,A)
【文献】 特開平11−015694(JP,A)
【文献】 特開平09−319598(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F11/28−11/36
G06F9/46−9/54
(57)【特許請求の範囲】
【請求項1】
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場合に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうための警告処理部と、
前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在するときには、前記呼び出し関数の代わりに前記代替関数を実行するための代替関数実行部とを備える、情報処理装置
【請求項2】
前記代替関数実行部は、前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在しないときには、前記呼び出し関数を実行する、請求項に記載の情報処理装置。
【請求項3】
前記警告処理部は、前記警告処理として警告情報のログファイルへの出力を行なう、請求項1または2に記載の情報処理装置。
【請求項4】
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場合に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうための警告処理部を備え、
前記不正コーディング検知ライブラリは、前記所定の関数としてスレッドセーフでない関数をラッピングしたラッパー関数を含み、
前記所定の条件は、前記呼び出し元がマルチスレッドプログラムであることである、情報処理装置。
【請求項5】
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場合に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうための警告処理部を備え、
前記不正コーディング検知ライブラリは、前記所定の関数として非同期シグナルセーフでない関数をラッピングしたラッパー関数を含み、
前記所定の条件は、前記関数の呼び出し元がシグナルハンドラであることである、情報処理装置。
【請求項6】
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場合に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうステップを含
前記不正コーディング検知ライブラリは、前記所定の関数としてスレッドセーフでない関数をラッピングしたラッパー関数を含み、
前記所定の条件は、前記呼び出し元がマルチスレッドプログラムであることである、プログラム不正検知方法。
【請求項7】
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場合に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうステップを含み、
前記不正コーディング検知ライブラリは、前記所定の関数として非同期シグナルセーフでない関数をラッピングしたラッパー関数を含み、
前記所定の条件は、前記関数の呼び出し元がシグナルハンドラであることである、プログラム不正検知方法。
【請求項8】
コンピュータに、
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場合に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうステップを実行させ、
前記不正コーディング検知ライブラリは、前記所定の関数としてスレッドセーフでない関数をラッピングしたラッパー関数を含み、
前記所定の条件は、前記呼び出し元がマルチスレッドプログラムであることである、プログラム不正検知プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、プログラム不正検知方法、およびプログラム不正検知プログラムに関し、特に、関数呼び出しについてのプログラム不正を検知する情報処理装置、プログラム不正検知方法、およびプログラム不正検知プログラムに関する。
【背景技術】
【0002】
マルチスレッドプログラミングにおけるプログラム不正検知を行なうための技術として、たとえば、特開2007−249884号公報(特許文献1)には、以下のような技術が開示されている。すなわち、ライブラリと該ライブラリを利用して並行動作または並列動作を行なうプログラムとで構成されるソフトウェアの検証をコンピュータに実行させるソフトウェア検証プログラムであって、上記ライブラリ中で定義された要素であって上記プログラムが利用できる要素である共有要素が、上記プログラム中で利用されている箇所を共有要素利用箇所として抽出する共有要素利用箇所抽出ステップと、上記ライブラリ中で上記共有要素毎に定義されたスレッドセーフ条件に基づいて、上記共有要素利用箇所抽出ステップにより抽出された共有要素利用箇所における共有要素がスレッドセーフ条件を満足するか否かの検証を行なう条件検証ステップとをコンピュータに実行させる。
【0003】
また、マルチスレッド環境で最適な処理を行なうための技術として、たとえば、特開2001−51860号公報(特許文献2)には、以下のような技術が開示されている。すなわち、複数のスレッドを並行して実行可能なマルチスレッドプログラムからシングルスレッドプログラムを呼び出して実行するマルチスレッド処理装置において、上記マルチスレッドプログラムの特定の1スレッドにより上記シングルスレッドプログラムを最初に呼び出して実行する際に生成され、上記シングルスレッドブログラムを呼び出す唯一の呼出専用スレッドを備える。
【0004】
また、特開2001−229035号公報(特許文献3)には、以下のような技術が開示されている。すなわち、マルチスレッドで動作するアプリケーションを含む処理システム10における処理方法は、アプリケーションの起動時に、マルチスレッドで動作する親プロセス、およびシングルスレッドで動作する子プロセスを起動する工程と、マルチスレッドに対応していないプログラムライブラリが必要な動作であるかを判断する工程と、マルチスレッドに対応していないプログラムライブラリが必要であると判断された場合に、待機状態の子プロセスがあるかを判断する工程と、待機状態の子プロセスがないと判断された場合に、停止状態の子プロセスを新たに起動する工程とを含む。
【0005】
また、特開平10−133888号公報(特許文献4)には、以下のような技術が開示されている。すなわち、1以上のソフトウェア実行環境の各プロセスに1以上のCPU割当て単位を持つマルチスレッド環境で各スレッドに割りつけられたソフト部品から他の
ソフト部品の実行依頼情報が発行された場合に、ソフト部品の配置を示す共通参照情報を参照し、ソフト部品を結合し実行を制御するソフト部品結合制御装置であって、スレッド毎に、受け取った実行依頼情報と上記共通参照情報により宛先のソフト部品の所在を判定し上記所在に基づいた手続きで上記実行依頼情報を伝達するスレッド間部品結合手段と、2つのプロセス間のソフト部品の結合と実行を制御するとき、プロセス毎に、受け取った実行依頼情報と上記共通参照情報により宛先のソフト部品の所在を判定し上記所在に基づいた手続きで上記実行依頼情報を伝達するプロセス間部品結合手段とを備える。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2007−249884号公報
【特許文献2】特開2001−51860号公報
【特許文献3】特開2001−229035号公報
【特許文献4】特開平10−133888号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
マルチスレッドプログラミングにおいては、開発者が、スレッドセーフである関数を確認しながらコーディングを行なうのが一般的である。ここで、スレッドセーフとは、たとえば、マルチスレッド環境において、一方のスレッドが、あるデータの処理または手続きを呼び出した場合に、他方のスレッドにおいてデータの破壊および異常動作が生じないように設計されていることを意味する。
【0008】
すなわち、マルチスレッドプログラムにおいて、スレッドセーフでない関数を使用した場合には、各関数の競合状況などによって動作が不定となる可能性がある。そして、明示的なエラーの出力等を行なわないと、このような不正なコーディングによって生成されたモジュールにおける不具合の原因究明が困難となる。
【0009】
また、このような警告処理を行なうためには、アプリケーションプログラムを修正してプログラム不正検知機能を実装する必要が生じてしまう。
【0010】
しかしながら、特許文献1〜4には、このような問題点を解決するための構成は開示されていない。
【0011】
この発明は、上述の課題を解決するためになされたもので、その目的は、アプリケーションプログラムを修正することなく、当該プログラムの不正検知および警告処理を適切に行なうことが可能な情報処理装置、プログラム不正検知方法、およびプログラム不正検知プログラムを提供することである。
【課題を解決するための手段】
【0012】
上記課題を解決するために、この発明のある局面に係わる情報処理装置は、アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうための警告処理部を備える。
【0013】
上記課題を解決するために、この発明のある局面に係わるプログラム不正検知方法は、アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうステップを含む。
【0014】
上記課題を解決するために、この発明のある局面に係わるプログラム不正検知プログラムは、コンピュータに、アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応する場に、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうステップを実行させるためのプログラムである。
【発明の効果】
【0015】
本発明によれば、アプリケーションプログラムを修正することなく、当該プログラムの不正検知および警告処理を適切に行なうことができる。
【図面の簡単な説明】
【0016】
図1】本発明の実施の形態に係る情報処理装置の概略構成図である。
図2】本発明の実施の形態に係る情報処理装置が提供する制御構造を示すブロック図である。
図3】本発明の実施の形態に係る情報処理装置がプログラム不正検知を行なう際の動作手順を示すフローチャートである。
図4】本発明の実施の形態に係る情報処理装置がプログラム不正検知を行なう際の動作手順の他の例を示すフローチャートである。
【発明を実施するための形態】
【0017】
以下、本発明の実施の形態について図面を用いて説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰り返さない。
【0018】
本発明の実施の形態に係る情報処理装置は、典型的には、汎用的なアーキテクチャを有するコンピュータを基本構造としており、予めインストールされたプログラムを実行することで、後述するような各種機能を提供する。一般的に、このようなプログラムは、フレキシブルディスク(Flexible Disk)およびCD−ROM(Compact Disk Read Only Memory)などの記録媒体に格納されて、あるいはネットワークなどを介して流通する。
【0019】
本発明の実施の形態に係るプログラムは、OS等の他のプログラムの一部に組み込まれて提供されるものであってもよい。この場合でも、本発明の実施の形態に係るプログラム自体は、上記のような組み込み先の他のプログラムが有するモジュールを含んでおらず、当該他のプログラムと協働して処理が実行される。すなわち、本発明の実施の形態に係るプログラムとしては、このような他のプログラムに組み込まれた形態であってもよい。
【0020】
なお、代替的に、プログラムの実行により提供される機能の一部もしくは全部を専用のハードウェア回路として実装してもよい。
【0021】
[装置構成]
図1は、本発明の実施の形態に係る情報処理装置の概略構成図である。
【0022】
図1を参照して、情報処理装置101は、ハードウエアコンポーネントとして、ディスプレイ2と、キーボード3と、I/Oインタフェース5と、CPU(Central Processing Unit)6と、メモリ7と、ストレージ8とを備える。ディスプレイ2、キーボード3、ネットワーク4およびメモリ7は、I/Oインタフェース5を介して接続される。
【0023】
また、ストレージ8は、ソフトウェアコンポーネントとして、ユーザプログラム9と、不正コーディング検知ライブラリ10と、OS標準ライブラリ11と、ログファイル12と、設定ファイル13とを格納している。
【0024】
CPU6は、メモリ7に格納されたプログラム(コード)を所定順序で実行することにより、各種の演算を実施する。メモリ7は、典型的には、DRAM(Dynamic Random Access Memory)などの揮発性の記憶装置であり、ストレージ8から読み出されたプログラムに加えて、各種の演算処理結果を示すデータなどを保持する。また、ストレージ8は不揮発性の磁気記憶装置であり、CPU6で実行されるプログラムに加えて、各種設定値などが格納される。このストレージ8にインストールされるプログラムは、記録媒体に格納された状態で流通する。この記録媒体は、たとえば、CF(Compact Flash)およびSD(Secure Digital)などの汎用的な半導体記憶デバイス、フレキシブルディスク(Flexible Disk)などの磁気記憶媒体、またはCD−ROM(Compact Disk Read Only Memory)などの光学記憶媒体である。
【0025】
なお、記録媒体に格納されたプログラムを情報処理装置101にインストールする形態に代えて、ネットワーク4を介して配信サーバなどからダウンロードしたプログラムを情報処理装置101にインストールしてもよい。
【0026】
また、情報処理装置101には、必要に応じてプリンタなどの他の出力装置が接続されてもよい。
【0027】
[制御構造]
次に、情報処理装置101におけるプログラム不正検知機能を提供するための制御構造について説明する。
【0028】
図2は、本発明の実施の形態に係る情報処理装置が提供する制御構造を示すブロック図である。図2に示す情報処理装置101における各ブロックは、ストレージ8に格納されたプログラム(コード)などをメモリ7に展開して、CPU6に実行させることで提供される。なお、図2に示す情報処理装置101の制御構造の一部もしくは全部を専用ハードウェアおよび/または配線回路によって実現してもよい。
【0029】
図2を参照して、情報処理装置101は、その制御構造として、関数判定部21と、警告処理部22と、代替関数実行部23とを備える。
【0030】
関数判定部21は、アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリ10における所定の関数に対応するか否かを判定する。
【0031】
警告処理部22は、呼び出し関数が上記所定の関数に対応すると判定した場合には、不正コーディング検知ライブラリ10における上記所定の関数を実行することにより、呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、当該呼び出し元が所定の条件を満たす場合に警告処理を行なう。たとえば、警告処理部22は、警告処理として警告情報のログファイルへの出力を行なう。
【0032】
代替関数実行部23は、呼び出し関数の呼び出し元が上記所定の条件を満たす場合であって呼び出し関数の代替関数が存在するときには、呼び出し関数の代わりに代替関数を実行する。一方、代替関数実行部23は、呼び出し関数の呼び出し元が上記所定の条件を満たす場合であって呼び出し関数の代替関数が存在しないときには、呼び出し関数を実行する。
【0033】
たとえば、不正コーディング検知ライブラリ10は、所定の関数としてスレッドセーフでない関数を含む。
【0034】
警告処理部22は、呼び出し関数が不正コーディング検知ライブラリ10における所定の関数に対応すると判定した場合には、呼び出し関数の呼び出し元がマルチスレッドプログラムであるか否かを判定し、マルチスレッドプログラムである場合に警告処理を行なう。
【0035】
具体的には、ユーザプログラム9は、利用者が開発したアプリケーションである。また、不正コーディング検知ライブラリ10は、OS標準ライブラリ11が提供するスレッドセーフでない関数をラッピングしたライブラリである。
【0036】
ユーザプログラム9を実行するCPU6は、優先的に不正コーディング検知ライブラリ10の関数を実行し、正しくないコーディングである場合にはログファイル12に警告を出力する。これにより、ユーザプログラム9の実行時に当該プログラムの問題を検知することが可能となる。
【0037】
すなわち、情報処理装置101では、オペレーティングシステムの標準ライブラリ11が提供するスレッドセーフでない関数をラッピングした不正コーディング検知ライブラリ10を新たに提供する。そして、ユーザプログラム9を実行するCPU6が優先的に不正コーディング検知ライブラリ10のラッパー関数を実行する。
【0038】
これにより、アプリケーションにおいてスレッドセーフでない関数が実行されたことを検知し、これをログファイル12に記録することができる。
【0039】
また、設定ファイル13に必要に応じて任意に設定を行なうことにより、OS標準ライブラリ11にスレッドセーフな代替関数が存在する場合において、当該代替関数を動的に実行する動作を選択可能となる。
【0040】
[動作]
次に、本発明の実施の形態に係る情報処理装置の動作について図面を用いて説明する。本発明の実施の形態では、情報処理装置101を動作させることによって、本発明の実施の形態に係るプログラム不正検知方法が実施される。よって、本発明の実施の形態に係るプログラム不正検知方法の説明は、以下の情報処理装置101の動作説明に代える。なお、以下の説明においては、適宜図1を参照する。
【0041】
図3は、本発明の実施の形態に係る情報処理装置がプログラム不正検知を行なう際の動作手順を示すフローチャートである。
【0042】
図3を参照して、CPU6がユーザプログラム9を実行し、スレッドセーフでない関数を呼び出した場合には(ステップS1でYES)、CPU6は、不正コーディング検知ライブラリ10において提供される対応のラッパー関数を、不正コーディング検知ライブラリ10のプリロードを行なうことによって優先的に実行する。なお、このような動作を行なうための設定は、設定ファイル13に対して行なうことが可能である。
【0043】
次に、CPU6は、当該ラッパー関数において、当該スレッドセーフでない関数の呼び出し元がマルチスレッドプログラムであるか否かを判定し、マルチスレッドプログラムから呼び出された場合には(ステップS3でYES)、ログファイル12に警告を出力する(ステップS4)。
【0044】
次に、CPU6は、当該ラッパー関数において、代替処理を実行するか否かの判定を行い、代替実行を行なう場合には(ステップS5でYES)、OS標準ライブラリ11に当該スレッドセーフでない関数と代替可能なスレッドセーフな代替関数が存在するか否かを確認する。
【0045】
そして、CPU6は、当該ラッパー関数において、スレッドセーフな代替関数が存在する場合には(ステップS6でYES)、当該代替関数を実行して(ステップS7)処理を終了する。
【0046】
一方、CPU6は、当該スレッドセーフでない関数の呼び出し元がマルチスレッドプログラムでない場合(ステップS3でNO)、代替関数を実行しない設定である場合(ステップS5でNO)または代替関数が存在しない場合(ステップS6でNO)には、当該スレッドセーフでない関数を実行する(ステップS8)。
【0047】
ところで、マルチスレッドプログラムにおいて、スレッドセーフでない関数を使用した場合には、各関数の競合状況などによって動作が不定となる可能性がある。そして、明示的なエラーの出力等を行なわないと、このような不正なコーディングによって生成されたモジュールにおける不具合の原因究明が困難となる。また、このような警告処理を行なうためには、アプリケーションプログラムを修正してプログラム不正検知機能を実装する必要が生じてしまう。
【0048】
これに対して、本発明の実施の形態に係る情報処理装置では、関数判定部21は、アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリ10における所定の関数に対応するか否かを判定する。そして、警告処理部22は、当該呼び出し関数が上記所定の関数に対応すると判定した場合には、不正コーディング検知ライブラリ10における上記所定の関数を実行することにより、呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、当該呼び出し元が所定の条件を満たす場合に警告処理を行なう。
【0049】
このような構成により、アプリケーションプログラムを修正することなく、マルチスレッドプログラムにおけるスレッドセーフでない関数の実行を検知することが可能となる。すなわち、情報処理装置101では、不正コーディング検知ライブラリ10が提供するラッパー関数により、プログラム実行時にマルチスレッドプログラムからの関数呼び出しであるか否かを判断することが可能である。これにより、ユーザプログラム9がマルチスレッドプログラムである場合において、当該プログラムがスレッドセーフでない関数を呼び出したときには、ユーザプログラム9の修正を行なうことなく明示的な警告を出力することができる。
【0050】
たとえば、オペレーティングシステムの標準ライブラリが提供するスレッドセーフでない関数がマルチスレッドプログラムにおいて使用された場合において、当該プログラムの実行時に不正を検知し、マルチスレッドプログラムからスレッドセーフでない関数の実行が行われたという警告をログファイル12に記録することができる。これにより、プログラムのデバッグを効率的に行なうことが可能となる。
【0051】
すなわち、本発明の実施の形態に係る情報処理装置における各構成要素のうち、関数判定部21および警告処理部22からなる最小構成により、アプリケーションプログラムを修正することなく、当該プログラムの不正検知および警告処理を適切に行なう、という本発明の目的を達成することが可能となる。
【0052】
また、本発明の実施の形態に係る情報処理装置では、代替関数実行部23は、呼び出し関数の呼び出し元が所定の条件を満たす場合であって呼び出し関数の代替関数が存在するときには、呼び出し関数の代わりに代替関数を実行する。
【0053】
具体的には、情報処理装置101では、不正コーディング検知ライブラリ10が提供するラッパー関数により、代替関数の情報を保持し、当該代替関数を呼び出すことが可能である。これにより、マルチスレッドプログラムからスレッドセーフでない関数を呼び出した場合において、スレッドセーフな代替関数が提供されていれば、プログラム実行時に、スレッドセーフな代替関数に置き換えてプログラムを実行することができる。
【0054】
すなわち、スレッドセーフな代替関数が存在する場合には、設定ファイル13に対する設定内容に基づき、自動的にこの代替関数を実行することができる。これにより、アプリケーションプログラムを修正することなく、マルチスレッドプログラムにおいて、スレッドセーフでない関数の実行を検知することに加えて、スレッドセーフな関数を正しく実行することが可能となる。
【0055】
また、本発明の実施の形態に係る情報処理装置では、代替関数実行部23は、呼び出し関数の呼び出し元が所定の条件を満たす場合であって呼び出し関数の代替関数が存在しないときには、呼び出し関数を実行する。
【0056】
このような構成により、スレッドセーフな代替関数が存在しない場合に、アプリケーションにおいて呼び出されたスレッドセーフでない関数を実行し、処理を継続することができる。
【0057】
また、本発明の実施の形態に係る情報処理装置では、警告処理部22は、警告処理として警告情報のログファイルへの出力を行なう。
【0058】
このような構成により、プログラムの不正を示す警告情報をユーザに適切に提示することができる。
【0059】
また、本発明の実施の形態に係る情報処理装置では、不正コーディング検知ライブラリ10は、所定の関数としてスレッドセーフでない関数を含む。そして、警告処理部22は、呼び出し関数が不正コーディング検知ライブラリ10における所定の関数に対応すると判定した場合には、呼び出し関数の呼び出し元がマルチスレッドプログラムであるか否かを判定し、マルチスレッドプログラムである場合に警告処理を行なう。
【0060】
このような構成により、特にマルチスレッドプログラムの不正検知および警告処理を適切に行なうことができる。
【0061】
なお、本発明の実施の形態に係る情報処理装置は、スレッドセーフでない関数の実行検知に限らず、非同期シグナルセーフでない関数の実行検知などを行ってもよい。
【0062】
ここで、シグナルとは、たとえば、OSにおける非同期イベントの通知、すなわちアプリケーションレベルでの割り込みを意味する。非同期シグナルセーフな関数とは、たとえば、関数内でシグナルに割り込まれても、次回の関数コールにおいて問題の生じない関数を意味する。
【0063】
すなわち、不正コーディング検知ライブラリ10は、所定の関数として非同期シグナルセーフでない関数を含む。
【0064】
警告処理部22は、呼び出し関数が不正コーディング検知ライブラリ10における所定の関数に対応すると判定した場合には、呼び出し関数の呼び出し元がシグナルハンドラであるか否かを判定し、シグナルハンドラである場合に警告処理を行なう。
【0065】
図4は、本発明の実施の形態に係る情報処理装置がプログラム不正検知を行なう際の動作手順の他の例を示すフローチャートである。
【0066】
図4を参照して、CPU6がユーザプログラム9を実行し、非同期シグナルセーフでない関数を呼び出した場合には(ステップS11でYES)、CPU6は、不正コーディング検知ライブラリ10において提供される対応のラッパー関数を、不正コーディング検知ライブラリ10のプリロードを行なうことによって優先的に実行する。なお、このような動作を行なうための設定は、設定ファイル13に対して行なうことが可能である。
【0067】
次に、CPU6は、当該ラッパー関数において、当該非同期シグナルセーフでない関数の呼び出し元がシグナルハンドラであるか否かを判定し、シグナルハンドラから呼び出された場合には(ステップS13でYES)、ログファイル12に警告を出力する(ステップS14)。ここで、シグナルハンドラとは、たとえば、プロセスがシグナルを受信したときに実行する関数を意味する。
【0068】
次に、CPU6は、当該ラッパー関数において、代替処理を実行するか否かの判定を行い、代替実行を行なう場合には(ステップS15でYES)、OS標準ライブラリ11に当該非同期シグナルセーフでない関数と代替可能な非同期シグナルセーフな代替関数が存在するか否かを確認する。
【0069】
そして、CPU6は、当該ラッパー関数において、非同期シグナルセーフな代替関数が存在する場合には(ステップS16でYES)、当該代替関数を実行して(ステップS17)処理を終了する。
【0070】
一方、CPU6は、当該非同期シグナルセーフでない関数の呼び出し元がシグナルハンドラでない場合(ステップS13でNO)、代替関数を実行しない設定にしている場合(ステップS15でNO)または代替関数が存在しない場合(ステップS16でNO)には、当該非同期シグナルセーフでない関数を実行する(ステップS18)。
【0071】
このように、本発明の実施の形態に係る情報処理装置では、不正コーディング検知ライブラリ10は、所定の関数として非同期シグナルセーフでない関数を含む。そして、警告処理部22は、呼び出し関数が不正コーディング検知ライブラリ10における所定の関数に対応すると判定した場合には、呼び出し関数の呼び出し元がシグナルハンドラであるか否かを判定し、シグナルハンドラである場合に警告処理を行なう。
【0072】
このような構成により、特に非同期シグナルを採用するプログラムの不正検知および警告処理を適切に行なうことができる。
【0073】
上記実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記説明ではなく特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【0074】
上記実施の形態の一部または全部は以下の付記のようにも記載されうるが、本発明の範囲は、以下の付記に限定されるものではない。
【0075】
[付記1]
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応するか否かを判定するための関数判定部と、
前記呼び出し関数が前記所定の関数に対応すると判定した場合には、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうための警告処理部とを備える、情報処理装置。
【0076】
[付記2]
前記情報処理装置は、さらに、
前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在するときには、前記呼び出し関数の代わりに前記代替関数を実行するための代替関数実行部を備える、付記1に記載の情報処理装置。
【0077】
[付記3]
前記代替関数実行部は、前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在しないときには、前記呼び出し関数を実行する、付記2に記載の情報処理装置。
【0078】
[付記4]
前記警告処理部は、前記警告処理として警告情報のログファイルへの出力を行なう、付記1から3のいずれかに記載の情報処理装置。
【0079】
[付記5]
前記不正コーディング検知ライブラリは、前記所定の関数としてスレッドセーフでない関数を含み、
前記所定の条件は、前記呼び出し元がマルチスレッドプログラムであることである、付記1から4のいずれかに記載の情報処理装置。
【0080】
[付記6]
前記不正コーディング検知ライブラリは、前記所定の関数として非同期シグナルセーフでない関数を含み、
前記所定の条件は、前記関数の呼び出し元がシグナルハンドラであることである、付記1から4のいずれかに記載の情報処理装置。
【0081】
[付記7]
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応するか否かを判定するステップと、
前記呼び出し関数が前記所定の関数に対応すると判定した場合には、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうステップとを含む、プログラム不正検知方法。
【0082】
[付記8]
前記プログラム不正検知方法は、さらに、
前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在するときには、前記呼び出し関数の代わりに前記代替関数を実行するステップを含む、付記7に記載のプログラム不正検知方法。
【0083】
[付記9]
前記代替関数を実行するステップにおいては、前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在しないときには、前記呼び出し関数を実行する、付記8に記載のプログラム不正検知方法。
【0084】
[付記10]
前記警告処理を行なうステップにおいては、前記警告処理として警告情報のログファイルへの出力を行なう、付記7から9のいずれかに記載のプログラム不正検知方法。
【0085】
[付記11]
前記不正コーディング検知ライブラリは、前記所定の関数としてスレッドセーフでない関数を含み、
前記所定の条件は、前記呼び出し元がマルチスレッドプログラムであることである、付記7から10のいずれかに記載のプログラム不正検知方法。
【0086】
[付記12]
前記不正コーディング検知ライブラリは、前記所定の関数として非同期シグナルセーフでない関数を含み、
前記所定の条件は、前記関数の呼び出し元がシグナルハンドラであることである、付記7から10のいずれかに記載のプログラム不正検知方法。
【0087】
[付記13]
コンピュータに、
アプリケーションにおいて呼び出された呼び出し関数が、不正コーディング検知ライブラリにおける所定の関数に対応するか否かを判定するステップと、
前記呼び出し関数が前記所定の関数に対応すると判定した場合には、前記不正コーディング検知ライブラリにおける前記所定の関数を実行することにより、前記呼び出し関数の呼び出し元が所定の条件を満たすか否かを判定し、前記呼び出し元が前記所定の条件を満たす場合に警告処理を行なうステップとを実行させるための、プログラム不正検知プログラム。
【0088】
[付記14]
前記プログラム不正検知プログラムは、さらに、コンピュータに、
前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在するときには、前記呼び出し関数の代わりに前記代替関数を実行するステップを実行させる、付記13に記載のプログラム不正検知プログラム。
【0089】
[付記15]
前記代替関数を実行するステップにおいては、前記所定の条件を満たす場合であって前記呼び出し関数の代替関数が存在しないときには、前記呼び出し関数を実行する、付記14に記載のプログラム不正検知プログラム。
【0090】
[付記16]
前記警告処理を行なうステップにおいては、前記警告処理として警告情報のログファイルへの出力を行なう、付記13から15のいずれかに記載のプログラム不正検知プログラム。
【0091】
[付記17]
前記不正コーディング検知ライブラリは、前記所定の関数としてスレッドセーフでない関数を含み、
前記所定の条件は、前記呼び出し元がマルチスレッドプログラムであることである、付記13から16のいずれかに記載のプログラム不正検知プログラム。
【0092】
[付記18]
前記不正コーディング検知ライブラリは、前記所定の関数として非同期シグナルセーフでない関数を含み、
前記所定の条件は、前記関数の呼び出し元がシグナルハンドラであることである、付記13から16のいずれかに記載のプログラム不正検知プログラム。
【産業上の利用可能性】
【0093】
本発明によれば、情報処理装置におけるソフトウェア評価および性能検証を行なうことができる。したがって、本発明は、産業上の利用可能性を有している。
【符号の説明】
【0094】
2 ディスプレイ
3 キーボード
5 I/Oインタフェース
6 CPU
7 メモリ
8 ストレージ
9 ユーザプログラム
10 不正コーディング検知ライブラリ
11 OS標準ライブラリ
12 ログファイル
13 設定ファイル
21 関数判定部
22 警告処理部
23 代替関数実行部
101 情報処理装置
図1
図2
図3
図4