(57)【要約】【課題】プログラム実行環境において、メモリ保護機構だけでは検出できない不正メモリアクセスを検出し情報を提示する。【解決手段】プログラムの実行に伴ってメモリアクセスが発生した際、アクセスがおこなわれたメモリアドレスをメモリ領域の配置情報と照らし合わせることでアクセス対象のメモリ領域を特定し、アクセスの種類（読み込みまたは書き込み）と、メモリアクセスに関係するスレッドおよびモジュールは何か、といった条件の組み合わせにより、当該メモリアクセスが正当なものであるかを判定し、その結果を表示装置などに提示する。【選択図】        図１
2006011692.tif 000002
【特許請求の範囲】
【請求項１】
モジュールを実行することにより、メモリアクセスをおこなってプログラム実行をおこなう情報処理装置において、
前記モジュールを実行することにより発生するメモリアクセスを監視し捕捉するステップと、
メモリ領域におけるデータとモジュールの配置情報を参照し、捕捉したアドレスにより、前記メモリ領域の使用種別とメモリアクセスに関係するスレッドおよびモジュールの情報を得るステップと、
前記メモリアクセスの読み書きの種別と、前記メモリ領域の使用種別と、前記メモリアクセスに関係するスレッドおよびモジュールの情報とによりメモリアクセスの正当性を判定するステップと、
前記メモリアクセスの正当性を判定するステップにより得られた判定結果とメモリアクセス情報とを提示するステップとを有することを特徴とする不正メモリアクセス判定方法。
【請求項２】
さらに、所定のモジュールを指定するステップを有し、指定されたモジュールの実行期間に対してメモリアクセスの監視をおこなうことを特徴とする請求項１記載の不正メモリアクセス検出方法。
【請求項３】
前記所定のモジュールを指定するステップにおいて、実行対象となるモジュールを安全なモジュールと危険なモジュールに分類して、
安全なモジュールに分類されたモジュールに対しては、メモリアクセスの監視をおこなわず、危険なモジュールに分類されたモジュールに対しては、メモリアクセスの監視をおこなうことを特徴とする請求項２記載の不正メモリアクセス検出方法。
【請求項４】
さらに、前記提示する判定結果とメモリアクセス情報の種別を指定するステップを有し、指定された種別に従って判定結果とメモリアクセス情報とを提示することを特徴とする請求項１記載の不正メモリアクセス検出方法。
【請求項５】
モジュールを実行することにより、メモリアクセスをおこなってプログラム実行をおこなう情報処理装置において、
所定のタイミングで複数回メモリイメージを取得し、取得したメモリイメージを比較することで所定の期間内に書き換えがおこなわれたメモリアドレスを特定するステップと、
メモリ領域におけるデータとモジュールの配置情報を参照し、前記特定されたアドレスにより、前記メモリ領域の使用種別とメモリアクセスに関係するスレッドおよびモジュールの情報を得るステップと、
前記メモリアクセスの読み書きの種別と、前記メモリ領域の使用種別と、前記メモリアクセスに関係するスレッドおよびモジュールの情報とによりメモリアクセスの正当性を判定するステップと、
前記メモリアクセスの正当性を判定するステップにより得られた判定結果とメモリアクセス情報を提示するステップとを有することを特徴とする不正メモリアクセス判定方法。
【請求項６】
中央処理装置とメモリと表示装置とを有する情報処理システムにおいて、モジュールを実行することにより、前記中央処理装置によって実行される命令の前記メモリへのメモリアクセスに関する不正メモリアクセス検出プログラムにおいて、
前記モジュールを実行することにより発生するメモリアクセスを監視し捕捉する処理と、
メモリ領域におけるデータとモジュールの配置表を参照し、捕捉したアドレスにより、前記メモリ領域の使用種別とメモリアクセスに関係するスレッドおよびモジュールの情報を得る処理と、
前記メモリアクセスの読み書きの種別と、前記メモリ領域の使用種別と、前記メモリアクセスに関係するスレッドおよびモジュールの情報とによりメモリアクセスの正当性を判定する処理と、
前記メモリアクセスの正当性を判定するステップにより得られた判定結果とメモリアクセス情報とを、前記表示装置に提示する処理とを計算機上で実行する不正メモリアクセス検出プログラム。
【請求項７】
中央処理装置とメモリと表示装置とを有する情報処理システムにおいて、モジュールを実行することにより、前記中央処理装置によって実行される命令のメモリアクセスに関する不正メモリアクセス検出プログラムにおいて、
所定のタイミングで複数回メモリイメージを取得し、取得したメモリイメージを比較することで所定の期間内に書き換えがおこなわれたメモリアドレスを特定する処理と、
メモリ領域のデータとモジュールの配置表を参照し、捕捉したアドレスにより、前記メモリ領域の使用種別とメモリアクセスに関係するスレッドおよびモジュールの情報を得る処理と、
メモリアクセスの読み書きの種別と、前記メモリ領域の使用種別と、前記メモリアクセスに関係するスレッドおよびモジュールの情報とによりメモリアクセスの正当性を判定する処理と、
前記メモリアクセスの正当性を判定するステップにより得られた判定結果とメモリアクセス情報とを、前記表示装置に提示する処理とを計算機上で実行する不正メモリアクセス検出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不正メモリアクセス検出方法に係り、特に、プログラム実行環境のデバッグを支援し、信頼性の低いモジュールの高信頼化に寄与する不正メモリアクセス検出方法に関する。
【背景技術】
【０００２】
一般に、中央処理装置は、プログラムを実行する際に、指定したメモリアドレス範囲へのプログラムのアクセスを検出し、プログラムの実行を中断して例外処理をおこなうことができるメモリ保護手段を備えている。ＯＳやデバッガはこの手段を利用することで、メモリ領域中の任意の範囲に対しアクセス制限（読み込みおよび書き込みの各操作に対する許可・不許可）をおこなうことが可能である。これにより、一般的なプログラム実行環境において、データ領域およびスタック領域以外への書き込みといった不正なメモリアクセスを検出することができる。
【０００３】
また、以下の特許文献１には、プログラムを構成する各コンポーネントが、プログラム実行中のある期間において、あるメモリ領域を排他的に利用する設定をおこなう手段を設け、この設定に違反するメモリアクセスを不正なものとして検出することを可能とする技術が開示されている。さらに、当該メモリアクセスをおこなったプロセスの識別情報を記録することで、不正なメモリアクセスをおこなったプロセスを特定することを可能とし、障害解析が容易になるとしている。
【０００４】
【特許文献１】特開２００１−３３１３７６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記従来技術は、単一のメモリ領域を複数の処理コンポーネントが共有しているシステムにおいて、不正なメモリアクセスを発見するために有用な技術である。
【０００６】
しかしながら、上記従来技術には、次のような問題がある。すなわち、検出できる不正メモリアクセスは、以下の条件に適合するものに限られ、これらの条件に当てはまらない不正メモリアクセスは検出できなかった。
（１）読み込み禁止領域からの読み込みまたは書き込み禁止領域への書き込みとった、基本的なメモリ保護機構によって簡単に検出できるメモリアクセス
（２）あるモジュールがある期間において排他的に利用することを明示的に指定しているメモリ領域への他のモジュールによるメモリアクセス
本発明は、上記問題点を解決するためになされたもので、その目的は、プログラムのデバックの際に、不正メモリアクセスを検出することのできるパターンを豊富にし、しかも、詳細なメモリアクセスに関する情報をユーザに提示し、デバッグ作業や障害対策にかかる時間を短縮することにある。
【課題を解決するための手段】
【０００７】
本発明では、プログラムの実行に伴ってメモリアクセスが発生した際、アクセスがおこなわれたメモリアドレスをメモリ領域の配置情報と照らし合わせることでアクセス対象のメモリ領域を特定し、アクセスの種類（読み込みまたは書き込み）と、メモリアクセスに関連するスレッドおよびモジュールは何か、といった条件の組み合わせにより、当該メモリアクセスが正当なものであるかを判定する。そして、その結果を表示装置などに提示する。
【０００８】
また、メモリアクセスが不正であると確定しない場合でも、表示の規則を指定して、その規則にしたがって、そのメモリアクセスが不正である可能性があることを提示するようにしてもよい。
【発明の効果】
【０００９】
本発明によれば、プログラムのデバックの際に、不正メモリアクセスを検出することのできるパターンを豊富にし、しかも、詳細なメモリアクセスに関する情報をユーザに提示し、デバッグ作業や障害対策にかかる時間を短縮することができる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明に係る各実施形態を、図１ないし図７を用いて説明する。
【００１１】
〔実施形態１〕
以下、本発明に係る第一の実施形態を、図１ないし図５を用いて説明する。
【００１２】
先ず、図１を用いて本発明の第一の実施形態に係るプログラム実行環境の構成について説明する。
図１は、本発明の第一の実施形態に係るプログラム実行環境の構成を示すブロック図である。
【００１３】
中央処理装置１０は、図１に示されるようにプログラム実行部２０、メモリアクセス監視部３０、不正メモリアクセス検出部４０から構成される。そして、メモリ５０には、内部にプロセス使用領域５１およびプロセス使用領域管理情報５２が格納される。
【００１４】
プログラム実行部２０は、プログラム実行の際に、プロセスに割り当てる記憶領域として、プロセス使用領域５１を使い、プログラムを実行する。
【００１５】
メモリアクセス監視部３０は、プログラム実行部２０によるプロセス使用領域５１へのメモリアクセスを監視し、アクセス発生時に不正メモリアクセス検出部４０へ通知する。これは、プロセスからメモリアクセスがあった段階で、例外処理をおこして、例外処理モジュールでこの処理を実行することにより実現できる。
【００１６】
不正メモリアクセス検出部４０は、プロセス使用領域管理情報５２に格納された情報を基に、通知されたメモリアクセスの正当性を判定する。情報出力部６０は、不正メモリアクセス検出部４０から送られたデータをログ格納部７０に記録し、また画面表示部８０へ表示する。
【００１７】
次に、図２および図３を用いて本発明の第一の実施形態に係るプログラム実行環境のメモリアクセスに関する情報について説明する。
図２は、メモリ５０内に格納される情報の詳細を示す図である。
図３は、メモリアクセス判定表１５０の一例を示す図である。
【００１８】
プロセス使用領域５１には、テキスト領域５１１、データ領域５１２、スタック領域５１３が格納される。テキスト領域５１１にはプログラムを構成する各モジュールのコード（命令列）が格納される。
【００１９】
プログラムを実行する際には、プロセスを構成する実行単位である各スレッドとして、このモジュールを実行することにより処理がおこなわれる。
【００２０】
データ領域５１２には、プログラムの実行に伴って生成・解放される各オブジェクトが格納される。
【００２１】
スタック領域５１３には、プロセスを構成する実行単位である各スレッドがそれぞれ占有して利用する作業用メモリ領域が割り当てられる。
【００２２】
プロセス使用領域管理情報５２には、監視対象モジュールリスト５２１、メモリ領域配置表５２２、アクセス制御表５２３が格納される。
【００２３】
メモリ領域配置表５２２は、メモリ領域５２２１および配置アドレス５２２２を記録する表である。また、アクセス制御表５２３は、オブジェクト型５２３１およびアクセス可能モジュール５２３２を記録する表である。
【００２４】
メモリアクセス判定表１５０は、メモリアクセスの正当性を判定するための基準となる情報を保持する表である。この表は、図１には示さなかったが、不正メモリアクセス検出部４０が参照できる記憶領域に置かれる。また、メモリアクセスの正当性を判定するための基準は、スタティックに保持してもよいし、メモリアクセス判定表１５０をユーザが自由に設定できるようにしてもよい。
【００２５】
次に、図４および図５を用いて本発明の不正メモリアクセス検出方法の手順について説明する。
図４は、本発明の不正メモリアクセス検出方法の手順を示すフローチャートである。
図５は、本発明の不正メモリアクセス検出方法において、不正メモリアクセスを検出した場合に表示する画面例を示す図である。
【００２６】
先ず、当該プログラム実行環境においてプログラムの実行が開始されると、プログラム実行部２０は、プロセス使用領域５１にプログラムをロードする（ステップ１００）。
【００２７】
次に、プログラム実行部２０は、プロセス使用領域５１内の各メモリ領域の配置情報（アドレス範囲）をメモリ領域配置表５２２へ記録する（ステップ１０１）。また、あらかじめ指定された不正メモリアクセス検出の対象とするモジュールを、監視対象モジュールリスト５２１に登録する。アクセス制御リスト５２３には、プログラムで定義されているオブジェクト型ごとに、アクセス可能なモジュール、すなわちメモリアクセスを行うコードがどのモジュールに含まれている場合にアクセスを許可するか、という設定をおこなう。この規則はプログラム内に各オブジェクト型の属性として記述しておく。なお、このオブジェクト型は、オブジェクト指向型言語、例えば、Ｊａｖａ（登録商標）などでクラスと呼ばれている概念と同義である。
【００２８】
以上によりプログラムの実行が開始される。
【００２９】
プログラムの実行に伴い、監視対象モジュールリスト５２１に登録されているモジュールの実行が開始されると、メモリアクセス監視部３０は、プログラム実行部２０によるプロセス使用領域５１へのアクセスの監視を始める（ステップ１０２）。
【００３０】
メモリアクセス監視部３０はメモリアクセスを捕捉すると（ステップ１０３）、アクセスの種類（読み込みまたは書き込み）およびアクセス対象アドレスを不正メモリアクセス検出部４０に通知する。また、不正メモリアクセス検出部４０は、プログラム実行部２０から当該メモリアクセスをおこなったスレッドと、当該スレッドにより実行されメモリアクセスを発生させたコードを含むモジュールを特定する情報を取得する。
【００３１】
不正メモリアクセス検出部４０は、以上の情報を基に、当該メモリアクセスの正当性を判定する（ステップ１０４）。
【００３２】
先ず、アクセス対象アドレスをメモリ領域配置表５２２に照らし合わせ、アクセス対象メモリ領域を特定する。次に、図３に示すメモリアクセス正当性判定表１５０に従って、当該メモリアクセスの正当性を判定する。
【００３３】
（１）このメモリアクセス正当性判定表１５０に従い、アクセス対象メモリ領域がテキスト領域５１１である場合は、アクセスの種類が読み込みならば正当なメモリアクセス、書き込みならば不当なメモリアクセスであると判定することになる。この基準は、メモリ上にロードされたプログラムのコードを書き換えることが禁止されていることを想定している。
【００３４】
（２）アクセス対象メモリ領域がデータ領域５１２である場合には、アクセス制御表５２３を参照し、アクセス対象のオブジェクト型に対して実行中のモジュールがアクセス権を持つか否かを判定する。アクセス権があれば正当、アクセス権がなければ不当であると判定する。
【００３５】
例えば、図２で示される状況において、モジュール１からオブジェクト２にアクセスしようとした場合、オブジェクト２の型はＢであり、これはモジュール１からのアクセスを許可していないため、このメモリアクセスは不正であると判定される。
【００３６】
（３）アクセス対象メモリ領域がスタック領域５１３である場合は、アクセス対象のスタック領域が実行中のスレッドのものであれば正当なメモリアクセス、そうでなければ不当なメモリアクセスであると判定する。この基準では、各スタック領域は対応する各スレッドが排他的に利用するもので、あるスレッドが他のスレッドのスタック領域へアクセスすることは禁止されていることを想定している。以上により、捕捉されたメモリアクセスの正当性が判定される。不当なメモリアクセスだと判定された場合、不正メモリアクセス検出部４０は、当該メモリアクセスに関する情報を情報出力部６０へ渡す。
【００３７】
情報出力部６０は、不正メモリアクセスがおこなわれたことをユーザへ伝えるデータをログ出力部７０に記録し、また、画面表示部８０へ送って画面表示をおこなう（ステップ１０５）。表示される画面は、例えば、図５に示されるような画面表示例１６０と画面表示例１７０の如くである。
【００３８】
ここでは、これらの画面の表示中はプログラムの実行を中断させ、「停止」ボタンが押された場合はプログラムの実行を中止し、「続行」ボタンが押された場合はプログラムの実行を再開させることを想定している。
【００３９】
そして、監視対象モジュールの実行が続く場合には、ステップ１０３へ戻り、不正メモリアクセスの検出を継続し、監視対象モジュールの実行がここで終了する場合には、メモリアクセス監視部３０によるメモリアクセス捕捉を無効化し、ステップ１０２へ戻って通常のプログラム実行をおこなう（ステップ１０６）。
【００４０】
以上の処理内容により、本発明による不正メモリアクセス検出が実現される。
【００４１】
なお、ステップ１０１においては、監視対象とするモジュールをあらかじめ定めていたが、プログラムを構成するモジュールのうち、危険なモジュール（不正なメモリアクセスをおこなう可能性があるもの）を指定し、危険なモジュールだけを監視対象とすることも考えられる。例えば、あるモジュールを実行しても不正なメモリアクセスは発生しないことがプログラム実行環境によって保証された場合、当該モジュールは監視対象とせず、その他のモジュールだけを監視対象とするということが考えられる。このような例としては、ＪａｖａのＶＭ環境において、 Ｊａｖａプログラムを安全なモジュールに分類し、Ｊａｖａプログラムから呼び出されるネイティブメソッドを、危険なモジュールに分類することが考えられる。
【００４２】
以上に述べたプログラム実行環境では、中央処理装置１０に備わるメモリアクセス監視部３０をメモリアクセス捕捉の手段として用いていたが、これを他の手段によって実現することも考えられる。例えば、監視対象モジュールの実行開始時および実行終了時にメモリイメージを保存し、両メモリイメージを比較して差分を求めることで、当該モジュールの実行期間中に内容が書き換えられたメモリ領域を特定する、という方法が考えられる。この方法ではすべてのメモリアクセスを補足することはできないが、メモリアクセス監視部３０を必要とせずに本発明の不正メモリアクセス検出方法を実現できるという良さがある。
【００４３】
〔実施形態２〕
以下、本発明に係る第二の実施形態を、図６を用いて説明する。
図６は、本発明の第二の実施形態に係るプログラム実行環境の構成を示すブロック図である。
【００４４】
第一の実施形態は、中央処理装置１０が、プログラム実行部２０、メモリアクセス監視部３０、不正メモリアクセス検出部４０を実行する例であった。本実施形態は、同じ機能をソフトウェアで実行する例である。
【００４５】
オペレーティングシステム１００（ＯＳ）は、ハードウェア００を制御し、プログラムを実行する際に、スレッド１を生成し制御する。スレッド１は、プロセス使用領域５１を使用し、処理をおこなうことは、第一の実施形態と同様である。
【００４６】
本実施形態では、不正メモリアクセスを検出するために、不正メモリアクセス検出プログラム２００が実行される。不正メモリアクセス検出プログラム２００は、プログラム実行モジュール２０ａ、メモリアクセス監視モジュール３０ａ、不正メモリアクセス検出モジュール４０ａを備えている。各モジュールの機能と処理は、第一の実施形態の対応する部位と同様である。
【００４７】
〔実施形態３〕
以下、本発明に係る第三の実施形態を、図７を用いて説明する。
図７は、メモリアクセス結果出力表３００を示す図である。
【００４８】
第一の実施形態では、すべての不正メモリアクセスを検出し出力していたが、予め情報を取捨選択する規則を与えることで、出力される情報を絞ることも考えられる。さらに、メモリアクセスが正当であると判定した場合でも情報を出力し、プログラムの実行状況を記録するためのログデータとして利用することも考えられる。
【００４９】
そのために、図７に示されるメモリアクセス結果出力表３００を用意し、不正メモリアクセス検出部４０が参照できるようにして置くとよい。
【００５０】
メモリアクセス結果出力表３００の上半分のアクセス種類３１０は、領域の種別ごとにメモリアクセスの結果を出力するか否かを指定できる。下半分の出力対象３２０は、図５に示したような画面などに表示する対象を指定できる。
【図面の簡単な説明】
【００５１】
【図１】本発明の第一の実施形態に係るプログラム実行環境の構成を示すブロック図である。
【図２】メモリ５０内に格納される情報の詳細を示す図である。
【図３】メモリアクセス判定表１５０の一例を示す図である。
【図４】本発明の不正メモリアクセス検出方法の手順を示すフローチャートである。
【図５】本発明の不正メモリアクセス検出方法において、不正メモリアクセスを検出した場合に表示する画面例を示す図である。
【図６】本発明の第二の実施形態に係るプログラム実行環境の構成を示すブロック図である。
【図７】メモリアクセス結果出力表３００を示す図である。
【符号の説明】
【００５２】
１０…中央処理装置
２０…プログラム実行部
３０…メモリアクセス監視部
４０…不正メモリアクセス検出部
５０…メモリ
６０…情報出力部
７０…ログ格納部
８０…画面表示部
【図１】
2006011692.tif 000003
【図２】
2006011692.tif 000004
【図３】
2006011692.tif 000005
【図４】
2006011692.tif 000006
【図５】
2006011692.tif 000007
【図６】
2006011692.tif 000008
【図７】
2006011692.tif 000009