(57)【特許請求の範囲】
【請求項１】
バッファを作成して初期化することと、
検出対象のメモリブロックのサイズとアドレスに基づいて、バッファ総位置インデックスを計算することと、
プログラムがメモリにアクセスする際、バッファ総位置インデックスに基づいて、階層バッファユニットのアドレッシングを行って、該階層バッファユニットからメモリブロックのアドレス情報を読み出すことができるか否かを判断することと、
ＹＥＳであると、今回のメモリアクセスの範囲を結合して、今回のアクセスを計装式メモリチェックツールを用いて検出するべきかを判断することと、
ＮＯであると、計装式メモリチェックツールを用いて今回のアクセスが正当か否かを判断し、アクセスが正当の場合に階層バッファユニットにメモリブロックのアドレス情報を書き込みすることと、を含む正当なメモリアクセスの検知方法。
【請求項２】
前記検出対象のメモリブロックのサイズとアドレスに基づいて、バッファ総位置インデックスを計算するステップは、
メモリブロックサイズに基づいて、バッファ階層を選択することと、
検出対象のメモリブロックのアドレス情報に基づいて、本階層に対応する階層位置インデックスを計算することと、
前記階層位置インデックスを位置する階層の開始位置に追加してバッファ総位置インデックスを得ることと、を含む請求項１に記載の正当なメモリアクセスの検知方法。
【請求項３】
前記今回のメモリアクセスの範囲を結合して、今回のアクセスを計装式メモリチェックツールを用いて検出するべきかを判断するステップが、
実際にアクセスした範囲がアドレス情報に限定された範囲内である場合、今回のアクセスが正当と判定し、検出されたプログラムを継続して運行することと、
実際にアクセスした範囲がアドレス情報に限定された範囲を超える場合、今回のアクセスが正当と判定できず、計装式メモリチェックツールによって今回のアクセスが正当か否かの判断を行うことと、を含む請求項１又は２に記載の正当なメモリアクセスの検知方法。
【請求項４】
メモリブロックがリリースされる時、階層バッファユニット中のメモリ情報を整理することを更に含む請求項３に記載の正当なメモリアクセスの検知方法。
【請求項５】
バッファを作成して初期化するように構成される階層バッファ作成手段と、
検出対象のメモリブロックのサイズとアドレスに基づいて、バッファ総位置インデックスを計算するように構成されるバッファインデックス計算手段と、
プログラムがメモリにアクセスする際、バッファ総位置インデックスに基づいて、階層バッファユニットのアドレッシングを行って、該階層バッファユニットからメモリブロックのアドレス情報を読み出すことができるか否かを判断するように構成されるアドレス情報読取手段と、
階層バッファユニットからメモリブロックのアドレス情報を読み出すことができる場合、今回のメモリアクセスの範囲を結合して、今回のアクセスを計装式メモリチェックツールを用いて検出するべきかを判断するように構成される第１の正当性判断手段と、
階層バッファユニットからメモリブロックのアドレス情報を読み出すことができなかった場合、計装式メモリチェックツールによって今回のアクセスが正当か否かを判断するように構成される第２の正当性判断手段と、
計装式メモリチェックツールによって今回のアクセスが正当と判断された場合、階層バッファユニットにメモリブロックのアドレス情報を書き込みするように構成されるアドレス情報書き込み手段と、を含む正当なメモリアクセスの検知装置。
【請求項６】
前記バッファインデックス計算手段は、
メモリブロックサイズに基づいて、バッファ階層を選択し、
検出対象のメモリブロックのアドレス情報に基づいて、本階層に対応する階層位置インデックスを計算し、
前記階層位置インデックスを位置する階層の開始位置に追加してバッファ総位置インデックスを得るように構成される請求項５に記載の正当なメモリアクセスの検知装置。
【請求項７】
前記第１の正当性判断手段は、
実際にアクセスした範囲がアドレス情報に限定された範囲内である場合、今回のアクセスが正当と判断し、検出されたプログラムを継続して運行し、
実際にアクセスした範囲がアドレス情報に限定された範囲を超える場合、今回のアクセスが正当と判断できず、第２の正当性判断手段に動作するように通知するように構成される請求項５又は６に記載の正当なメモリアクセスの検知装置。
【請求項８】
メモリブロックがリリースされる場合、階層バッファユニット中のメモリ情報を整理するように構成されるバッファ整理手段を更に含む請求項７に記載の正当なメモリアクセスの検知装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータプログラム分野に関し、特に、正当なメモリアクセスの検知方法及び装置に関する。
【背景技術】
【０００２】
配列のオーバーフロー・境界外、不正なポインタの操作、エラーメモリブロックのアドレス情報のリリース等のメモリの不正なアクセスは、ずっとソフトウェア開発において最も発生しやすく、害が最も大きく、最も解決しにくい問題の一つであった。
【０００３】
現在、よく利用されているＣ／Ｃ＋＋メモリアクセス正当性の検出ツールとして主に、計装式メモリチェックツールと動的二進法分析ツールとの２種類がある。
【０００４】
計装式メモリチェックツールの具体的な方法は、Ｃ／Ｃ＋＋ソースファイルをコンパイルする際、メモリ割り当てとアクセスポイントに插入監視関数ポイルを挿入し、アクセスされたメモリブロックのアドレス情報と今回のアクセス範囲に基づいてアクセスが正当か否かを識別する。
【０００５】
大型のソフトウェアのメモリアクセスを検出する際、計装式メモリチェックツールが大量のメモリ情報と、排他的に保護する全体ソースと、保守ツールの各種データを検索しなければならないので、一回の正当なメモリアクセスの検知の性能は比較的に低い。一方、通常のソフトウェアのメモリアクセスは非常に頻繁であって、アクセスするたびに正当性を検査しなければならないので、プログラムの性能に大きい影響を与えてしまい、計装式メモリチェックツールを商業レベルのソフトウェアに応用することができなくなった。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記のように、計装式メモリチェックツールの検出性能が低下し、通常のソフトウェアの殆どのメモリアクセスが正当なアクセスである事実に鑑み、本発明は、既存のメモリアクセス正当性の検出技術によるとメモリにアクセスするたびに計装式メモリチェックツールによる正当性検査が必要であることで性能が低下する技術課題を効果的に解決できる正当なメモリアクセスの検知方法を提供することを主な目的とする。
【課題を解決するための手段】
【０００７】
本発明の実施例において、
バッファを作成して初期化することと、
検出対象のメモリブロックのサイズとアドレスに基づいて、バッファ総位置インデックスを計算することと、
プログラムがメモリにアクセスする際、バッファ総位置インデックスに基づいて、階層バッファユニットのアドレッシングを行って、該階層バッファユニットからメモリブロックのアドレス情報を読み出すことができるか否かを判断することと、
ＹＥＳであると、今回のメモリアクセスの範囲を結合して、今回のアクセスを計装式メモリチェックツールを用いて検出するべきかを判断することと、
ＮＯであると、計装式メモリチェックツールを用いて今回のアクセスが正当か否かを判断し、アクセスが正当の場合に階層バッファユニットにメモリブロックのアドレス情報を書き込みすることと、を含む正当なメモリアクセスの検知方法を提供する。
【０００８】
前記検出対象のメモリブロックのサイズとアドレスに基づいて、バッファ総位置インデックスを計算するステップは、
メモリブロックサイズに基づいて、バッファ階層を選択することと、
検出対象のメモリブロックのアドレス情報に基づいて、本階層に対応する階層位置インデックスを計算することと、
前記階層位置インデックスを位置する階層の開始位置に追加してバッファ総位置インデックスを得ることと、を含む。
【０００９】
前記今回のメモリアクセスの範囲を結合して、今回のアクセスを計装式メモリチェックツールを用いて検出するべきかを判断するステップが、
実際にアクセスした範囲がアドレス情報に限定された範囲内である場合、今回のアクセスが正当と判定し、検出されたプログラムを継続して運行することと、
実際にアクセスした範囲がアドレス情報に限定された範囲を超える場合、今回のアクセスが正当と判定できず、計装式メモリチェックツールによって今回のアクセスが正当か否かの判断を行うことと、を含む。
【００１０】
上記方法は、
メモリブロックがリリースされる時、階層バッファユニット中のメモリ情報を整理することを更に含む。
【００１１】
本発明の実施例において、
バッファを作成して初期化するように構成される階層バッファ作成手段と、
検出対象のメモリブロックのサイズとアドレスに基づいて、バッファ総位置インデックスを計算するように構成されるバッファインデックス計算手段と、
プログラムがメモリにアクセスする際、バッファ総位置インデックスに基づいて、階層バッファユニットのアドレッシングを行って、該階層バッファユニットからメモリブロックのアドレス情報を読み出すことができるか否かを判断するように構成されるアドレス情報読取手段と、
階層バッファユニットからメモリブロックのアドレス情報を読み出すことができる場合、今回のメモリアクセスの範囲を結合して、今回のアクセスを計装式メモリチェックツールを用いて検出するべきかを判断するように構成される第１の正当性判断手段と、
階層バッファユニットからメモリブロックのアドレス情報を読み出すことができなかった場合、計装式メモリチェックツールによって今回のアクセスが正当か否かを判断するように構成される第２の正当性判断手段と、
計装式メモリチェックツールによって今回のアクセスが正当と判断された場合、階層バッファユニットにメモリブロックのアドレス情報を書き込みするように構成されるアドレス情報書き込み手段と、を含む正当なメモリアクセスの検知装置を提供する。
【００１２】
前記バッファインデックス計算手段は、
メモリブロックサイズに基づいて、バッファ階層を選択し、
検出対象のメモリブロックのアドレス情報に基づいて、本階層に対応する階層位置インデックスを計算し、
前記階層位置インデックスを位置する階層の開始位置に追加してバッファ総位置インデックスを得るように構成される。
【００１３】
前記第１の正当性判断手段は、
実際にアクセスした範囲がアドレス情報に限定された範囲内である場合、今回のアクセスが正当と判断し、検出されたプログラムを継続して運行し、
実際にアクセスした範囲がアドレス情報に限定された範囲を超える場合、今回のアクセスが正当と判断できず、第２の正当性判断手段に動作するように通知するように構成される。
【００１４】
上記装置は、
メモリブロックがリリースされる場合、階層バッファユニット中のメモリ情報を整理するように構成されるバッファ整理手段を更に含む。
【発明の効果】
【００１５】
本発明の実施例によると、プログラムの局部性原理を利用して、一定区間のメモリに一番目の正当なアクセス検査を行った後、メモリアドレス情報をバッファリングし、その後に当該区間のメモリを再びアクセスする際に直接、バッファからメモリアドレス情報を読み出すことで、正当なメモリアクセスに対する判断が高速に完成でき、既存のメモリアクセス正当性の検出技術によるとメモリにアクセスするたびに計装式メモリチェックツールによって正当性検査を行わなければならないことを回避し、メモリアクセス正当性の検出効率やソフトウェア性能を向上させる。
【図面の簡単な説明】
【００１６】
【図１】本発明の一好適な実施例における正当なメモリアクセスの検知方法のプロセスを示す図である。
【図２】本発明の一好適な実施例における検出対象のメモリブロックのサイズとアドレスに基づいてバッファ総位置インデックスを計算するステップを示す図である。
【図３】本発明の一好適な実施例における正当なメモリアクセスの検知装置の構造を示す図である。
【図４】本発明の他の一好適な実施例における正当なメモリアクセスの検知装置の構造を示す図である。
【００１７】
本発明の目的の実現、機能特徴、メリットを、実施例を結合しつつ図面を参照して詳しく説明する。
【発明を実施するための形態】
【００１８】
尚、以下で説明する具体的な実施例は本発明を解釈するものであって、本発明を限定するものではない。
【００１９】
本発明において正当なメモリアクセスの検知方法を提供し、図１を参照すると、本発明の一実施例において、該正当なメモリアクセスの検知方法は少なくとも以下のステップを含む。
【００２０】
バッファを作成して初期化し（Ｓ１０）、例えば、通常のソフトウェアメモリの使用状況についての統計データに基づいて、７層のバッファを作成し、各階層のバッファの６５５３６個のユニットはそれぞれ、サイズが１〜８、９〜１２８、１２９〜１Ｋ、１ｋ以上〜８Ｋ、８ｋ以上〜６４Ｋ、６４ｋ以上〜１Ｍ、１Ｍ以上のバイトのメモリブロックに対応する。
【００２１】
検出対象のメモリブロックのサイズとアドレスに基づいて、バッファ総位置インデックスを計算し（Ｓ２０）、メモリ情報に基づいて、階層バッファインデックスを計算し、例えば、まず、メモリブロックサイズに基づいてバッファ階層を選択し、８バイト以下のメモリブロックは第１層のバッファに属し、サイズが８バイトを超えて１２８バイト未満のメモリブロックは第２層のバッファに属し、……、他のメモリブロックの選択方式も類似である。その後、検出対象メモリアドレスを右側へ幾つかバイト移動して０ＸＦＦＦＦと合致すると、得られた値がその階層のインデックスである。右側へ移動するバイト数は、位置するバッファ階層に関連付けられ、第１層から第７層まで順に、３、７、１０、１３、１６、２０、２０バイト移動する。最後に、階層インデックスに位置する階層の開始位置を追加してバッファ総位置インデックスを得る。バッファ総位置インデックスはバッファ中の一つのバッファユニットを指す。
【００２２】
プログラムがメモリにアクセスする際、バッファ総位置インデックスに基づいて、階層バッファユニットのアドレッシングを行って、該階層バッファユニットからメモリブロックのアドレス情報を読み出しすることができるか否かを判断し（Ｓ３０）、ＹＥＳであると、ステップＳ４０を実行し、ＮＯであると、ステップＳ５０を実行する。
【００２３】
今回のメモリアクセスの範囲を結合して、今回のアクセスを計装式メモリチェックツールを用いて検出するべきか否かを判断する（Ｓ４０）。
【００２４】
計装式メモリチェックツールによって今回のアクセスが正当か否かを判断し、アクセスが正当の場合、階層バッファユニットにメモリブロックのアドレス情報を書き込みする（Ｓ５０）。
【００２５】
本発明の実施例において、メモリブロックのアドレス情報は今回アクセスしたメモリブロックの開始アドレスと終了アドレスを指す。プログラムがメモリを初めてアクセスする場合、バッファユニットにメモリブロックのアドレス情報を予め記憶していないので、読み取り結果は空きである。この時、アクセスが正当か否か（例えば、配列が境界を超えているか否か等）は通常の手段（例えば、計装式メモリチェックツール等）によって完成する。計装式メモリチェックツールによってアクセスが正当と判断された場合、階層バッファユニットにメモリブロックのアドレス情報を書き込みする。プログラムが二回目及びその以降のアクセスを行う場合、階層バッファユニットから読み出したメモリブロックのアドレス情報に基づいて、今回のメモリアクセスの範囲を結合して、今回のアクセスが正当か否かを高速に判断できる。
【００２６】
本発明は、プログラムの局部性原理を利用して、一定区間のメモリに一番目の正当なアクセス検査を行った後、メモリアドレス情報をバッファリングし、その後に当該区間のメモリを再びアクセスする際に直接、バッファからメモリアドレス情報を読み出すことで、正当なメモリアクセスに対する判断が高速に完成でき、既存のメモリアクセス正当性の検出技術によるとメモリにアクセスするたびに計装式メモリチェックツールによって正当性検査を行わなければならないことを回避し、メモリアクセス正当性の検出効率やソフトウェア性能を向上させる。
【００２７】
図２に示すように、本発明の一実施例において、上述したステップＳ２０は以下のステップを含む。
【００２８】
メモリブロックサイズに基づいて、バッファ階層を選択し（Ｓ２１）、例えば、まず、メモリブロックサイズに基づいてバッファ階層を選択し、８バイト以下のメモリブロックは第１層のバッファに属し、サイズが８バイトを超えて１２８バイト未満のメモリブロックは第２層のバッファに属し、……、他のメモリブロックの選択方式も類似である。
【００２９】
検出対象のメモリブロックのアドレス情報に基づいて、本階層に対応する階層位置インデックスを計算し（Ｓ２２）、例えば、検出対象メモリアドレスを右側へ幾つかバイト移動して０ＸＦＦＦＦと合致すると、得られた値がその階層のインデックスである。右側へ移動するバイト数は、位置するバッファ階層に関連付けられ、第１層から第７層まで順に、３、７、１０、１３、１６、２０、２０バイト移動する。
【００３０】
前記階層位置インデックスを位置する階層の開始位置に追加してバッファ総位置インデックスを得る（Ｓ２３）。例えば、階層インデックスに位置する階層の開始位置を追加してバッファ総位置インデックスを得る。バッファ総位置インデックスはバッファ中の一つのバッファユニットを指す。
【００３１】
本発明の一実施例において、上述したステップＳ４０は以下のステップを含む。
【００３２】
実際にアクセスした範囲がアドレス情報に限定された範囲内である場合、今回のアクセスが正当と判断し、検出されたプログラムを継続して運行し、
実際にアクセスした範囲がアドレス情報に限定された範囲を超える場合、今回のアクセスが正当と判定できず、ステップＳ５０を実行する。
【００３３】
上述のように、メモリブロックのアドレス情報は今回アクセスしたメモリブロックの開始アドレスと終了アドレスを指し、開始アドレスと終了アドレスによってアクセスの範囲が限定される。実際にアクセスした範囲がアドレス情報に限定された範囲内である場合、アクセスは境界を超えておらず、今回のアクセスが正当と判断し、計装式検出ツールをスケジューリングして検出する必要がなく、検出されたプログラムを継続して運行する。実際にアクセスした範囲がアドレス情報に限定された範囲を超える場合、アクセスは境界を超えていて、今回のアクセスが正当か否かを判断できず、計装式メモリチェックツールをスケジューリングして検出しなければならない。
【００３４】
メモリブロックがリリースされる時に前回の正当性判断プロセスでバッファユニットに記憶したアドレス情報によるアドレッシングエラーを回避するため、本発明の一実施例において、上述した方法は更に以下のステップを含む。
【００３５】
メモリブロックがリリースされる時、階層バッファユニット中のメモリ情報を整理する。メモリブロックがリリースされる時、対応するバッファユニット中のメモリ情報開始アドレスを極大アドレス値に、終了アドレスを０にセットする。
【００３６】
本発明において更に上記方法を実現するための正当なメモリアクセスの検知装置を提供し、図３に示すように、本発明の一実施例において、正当なメモリアクセスの検知装置は、
バッファを作成して初期化する階層バッファ作成手段１０と、例えば、階層バッファ作成手段１０は、通常のソフトウェアメモリの使用状況についての統計データに基づいて、７層のバッファを作成し、各階層のバッファの６５５３６個のユニットはそれぞれ、サイズが１〜８、９〜１２８、１２９〜１Ｋ、１ｋ以上〜８Ｋ、８ｋ以上〜６４Ｋ、６４ｋ以上〜１Ｍ、１Ｍ以上のバイトのメモリブロックに対応する；
検出対象のメモリブロックのサイズとアドレスに基づいて、バッファ総位置インデックスを計算するように構成されるバッファインデックス計算手段２０と、例えば、バッファインデックス計算手段２０は、まず、メモリブロックサイズに基づいてバッファ階層を選択し、８バイト以下のメモリブロックは第１層のバッファに属し、サイズが８バイトを超えて１２８バイト未満のメモリブロックは第２層のバッファに属し、……、他のメモリブロックの選択方式も類似である。その後、検出対象メモリアドレスを右側へ幾つかバイト移動して０ＸＦＦＦＦと合致すると、得られた値がその階層のインデックスである。右側へ移動するバイト数は、位置するバッファ階層に関連付けられ、第１層から第７層まで順に、３、７、１０、１３、１６、２０、２０バイト移動する。最後に、階層インデックスに位置する階層の開始位置を追加してバッファ総位置インデックスを得る。バッファ総位置インデックスはバッファ中の一つのバッファユニットを指す；
プログラムがメモリにアクセスする際、バッファ総位置インデックスに基づいて、階層バッファユニットのアドレッシングを行って、該階層バッファユニットからメモリブロックのアドレス情報を読み出しすることができるか否かを判断するように構成されるアドレス情報読取手段３０と、
階層バッファユニットからメモリブロックのアドレス情報を読み出した場合、今回のメモリアクセスの範囲を結合して、今回のアクセスを計装式メモリチェックツールを用いて検出するべきか否かを判断するように構成される第１の正当性判断手段４０と、
階層バッファユニットからメモリブロックのアドレス情報を読み出すことができない場合、計装式メモリチェックツールによって今回のアクセスが正当か否かを判断するように構成される第２の正当性判断手段５０と、
計装式メモリチェックツールにより今回のアクセスが正当と判断された場合、階層バッファユニットにメモリブロックのアドレス情報を書き込みするように構成されるアドレス情報書き込み手段６０と、を含む。
【００３７】
本発明の実施例において、メモリブロックのアドレス情報は今回アクセスしたメモリブロックの開始アドレスと終了アドレスを指す。プログラムがメモリを初めてアクセスする場合、バッファユニットにメモリブロックのアドレス情報を予め記憶していないので、アドレス情報読取手段３０による読み取り結果は空きである。この時、アクセスが正当か否か（例えば、配列が境界を超えているか否か等）は第２の正当性判断手段５０（例えば、計装式メモリチェックツール等）によって完成する。第２の正当性判断手段５０によってアクセスが正当と判断された場合、アドレス情報書き込み手段６０が階層バッファユニットにメモリブロックのアドレス情報を書き込みし、今回のアクセスが正当の場合、今回のアクセスが不正との判断情報を出力する。プログラムが二回目及びその以降のアクセスを行う場合、階層バッファユニットから読み出したメモリブロックのアドレス情報に基づいて、今回のメモリアクセスの範囲を結合して、今回のアクセスが正当か否かを高速に判断できる。
【００３８】
本発明の一実施例において、バッファインデックス計算手段２０は、
メモリブロックサイズに基づいて、バッファ階層を選択し、
検出対象のメモリブロックのアドレス情報に基づいて、本階層に対応する階層位置インデックスを計算し、
前記階層位置インデックスを位置する階層の開始位置に追加してバッファ総位置インデックスを得るように構成される。
【００３９】
本発明の実施例において、第１の正当性判断手段４０は、
実際にアクセスした範囲がアドレス情報に限定された範囲内である場合、今回のアクセスが正当と判断し、検出されたプログラムを継続して運行し、
実際にアクセスした範囲がアドレス情報に限定された範囲を超える場合、今回のアクセスが正当と判断できず、第２の正当性判断手段５０に動作するように通知するように構成される。
【００４０】
上述のように、メモリブロックのアドレス情報は今回アクセスしたメモリブロックの開始アドレスと終了アドレスを指し、開始アドレスと終了アドレスによってアクセスの範囲が限定される。実際にアクセスした範囲がアドレス情報に限定された範囲内である場合、アクセスは境界を超えておらず、第１の正当性判断手段４０が今回のアクセスが正当と判断し、計装式検出ツールをスケジューリングして検出する必要がなく、検出されたプログラムを継続して運行する。実際にアクセスした範囲がアドレス情報に限定された範囲を超える場合、アクセスは境界を超えていて、今回のアクセスが正当か否を判断できず、計装式メモリチェックツールをスケジューリングして検出しなければならず、第１の正当性判断手段４０は第２の正当性判断手段５０に動作するように通知する。
【００４１】
図４に示すように、一実施例において、上記装置は、
メモリブロックがリリースされる場合、階層バッファユニット中のメモリ情報を整理するように構成されるバッファ整理手段７０を更に含む。例えば、メモリブロックがリリースされる場合、バッファ整理手段９０は対応するバッファユニット中のメモリ情報の開始アドレスを極大アドレス値に、終了アドレスを０にセットする。
【００４２】
以上は本発明の好適な実施例であって、本発明の保護範囲がこれらに限定されることはなく、本発明の明細書及び図面に開示された内容に基づく等価構造又は等価プロセスの変換、あるいは他の関連する技術分野への直接又は間接的な応用は全て本発明の保護範囲に含まれる。
【産業上の利用可能性】
【００４３】
上述のように、本発明の実施例で提供する正当なメモリアクセスの検知方法及び装置によると、正当なメモリアクセスに対する判断が高速に完成でき、既存のメモリアクセス正当性の検出技術によるとメモリにアクセスするたびに計装式メモリチェックツールによって正当性検査を行わなければならないことを回避し、メモリアクセス正当性の検出効率やソフトウェア性能を向上させる効果を実現できる。
【図１】
0006419337.tif 000002
【図２】
0006419337.tif 000003
【図３】
0006419337.tif 000004
【図４】
0006419337.tif 000005