(57)【要約】【課題】アプリケーション例外が発生する前に異常終了処理を行い、システム誤動作を事前に防止すること。【解決手段】本発明にかかる情報処理装置（１０）は、アドレス情報テーブル（１１）と、プログラム開始時に、プログラムに含まれるポインタデータ項目の値を、アドレス情報テーブル（１１）における第１の値として設定するアドレス情報設定部（１２）と、プログラム終了時に、プログラムに含まれるポインタデータ項目の値を、アドレス情報テーブル（１１）における第２の値として設定し、第２の値が第１の値と不一致であり、且つ、第２の値が検査文字列と一致した場合に、異常終了処理を行うアドレス情報検証部（１３）と、を備えるものである。【選択図】図１
2018128900.tif 000002
【特許請求の範囲】
【請求項１】
アドレス情報テーブルと、
プログラム開始時に、プログラムに含まれるポインタデータ項目の値を、前記アドレス情報テーブルにおける第１の値として設定するアドレス情報設定手段と、
プログラム終了時に、プログラムに含まれるポインタデータ項目の値を、前記アドレス情報テーブルにおける第２の値として設定し、前記第２の値が前記第１の値と不一致であり、且つ、前記第２の値が検査文字列と一致した場合に、異常終了処理を行うアドレス情報検証手段と、
を備える情報処理装置。
【請求項２】
前記アドレス情報設定手段は、前記プログラム開始時及びプログラムに含まれるポインタデータ項目の値を設定した直後に、プログラムに含まれるポインタデータ項目の値を、前記アドレス情報テーブルにおける前記第１の値として設定し、
前記アドレス情報検証手段は、前記プログラム終了時及びポインタデータ項目の参照時に、プログラムに含まれるポインタデータ項目の値を、前記アドレス情報テーブルにおける前記第２の値として設定し、前記第２の値が前記第１の値と不一致であり、且つ、前記第２の値が前記検査文字列と一致した場合に、前記異常終了処理を行う、
請求項１に記載の情報処理装置。
【請求項３】
プログラム開始時に、プログラムに含まれるポインタデータ項目の値を、アドレス情報テーブルにおける第１の値として設定し、
プログラム終了時に、プログラムに含まれるポインタデータ項目の値を、前記アドレス情報テーブルにおける第２の値として設定し、
前記第２の値が前記第１の値と一致するか否かを判定し、
前記第２の値が前記第１の値と不一致である場合に、前記第２の値が検査文字列と一致するか否かを判定し、
前記第２の値が前記検査文字列と一致した場合に、異常終了処理を行う、
情報処理方法。
【請求項４】
プログラムに含まれるポインタデータ項目の値を設定した直後に、プログラムに含まれるポインタデータ項目の値を、前記第１の値として設定し、
ポインタデータ項目の参照時に、プログラムに含まれるポインタデータ項目の値を、前記第２の値として設定する、ことをさらに含む、
請求項３に記載の情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び情報処理方法に関し、例えば、ＣＯＢＯＬ（COmmon Business Oriented Language）等のポインタを使用するプログラム言語を用いる情報処理装置及び情報処理方法に関する。
【背景技術】
【０００２】
ＣＯＢＯＬ言語では、ポインタデータ項目を使用して、メモリ上のアドレスをプログラムで管理することが知られている。このため、プログラムの記述ミス（バグ）によって、ポインタデータ項目が破壊される場合がある。
【０００３】
例えば、プログラム間のインタフェース不整合によりポインタデータ項目が破壊されることがある。具体例として、呼び出す側のプログラムＡと、呼び出される側のプログラムＢと、がある場合について説明する。プログラムＡにおいて、引数Ｐ−Ｂについて「Ｐ−Ｂ  ＰＩＣ  ×（２０）」と定義され、プログラムＢにおいて、引数Ｐ−Ｂについて「Ｐ−Ｂ  ＰＩＣ  ×（１００）」と定義されているものとする。すなわち、プログラムＡとプログラムＢとでは、引数Ｐ−Ｂについての不整合が生じている。また、プログラムＢにおいて、「ＭＯＶＥ  ＳＰＡＣＥ  ＴＯ  Ｐ−Ｂ」と記述されているものとする。この場合、プログラムＢにて引数のＰ−ＢにＳＰＡＣＥを転記すると、プログラムＡのＰ−Ｂに後続するポインタデータ項目がある場合に、そのポインタデータ項目は破壊される。
【０００４】
また、ポインタデータ項目の値を設定又は更新するプログラムとポインタデータ項目を参照するプログラムとが同一とは限らない。ポインタデータ項目の値の設定又は更新から参照までの間に複数のプログラムが呼び出されることもある。このため、ポインタデータ項目が破壊された箇所を特定することは困難である。
【０００５】
ポインタデータ項目が破壊された状態で処理が継続すると、ポインタデータ項目の参照時にアプリケーション例外が発生し、実行プログラムが終了する。このとき、異常終了処理が実行されないため、ファイルやデータベースの更新が失敗する等のシステム誤動作が発生し、リカバリが必要になる。
【０００６】
特許文献１には、オペレーティングシステムにおいてオブジェクトがアクセスできるアドレス領域をアクセス可能領域とするメモリ保護情報を設定する技術が開示されている。特許文献１に開示の技術では、メモリ保護情報に違反するアドレスへのメモリアクセスが発生した時点で、メッセージを通知する等の例外処理を実行することができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特許第４５１６６９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、特許文献１に開示の技術では、メモリ保護情報に違反するメモリアクセスが発生するまでは、アプリケーションでデータ領域が不正に破壊されていることを検知することができないという問題があった。
【０００９】
本発明は、このような問題点を解決するためになされたものであり、アプリケーション例外が発生する前に異常終了処理を行い、システム誤動作を事前に防止することができる情報処理装置及び情報処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の第１の態様では、情報処理装置は、アドレス情報テーブルと、プログラム開始時に、プログラムに含まれるポインタデータ項目の値を、前記アドレス情報テーブルにおける第１の値として設定するアドレス情報設定手段と、プログラム終了時に、プログラムに含まれるポインタデータ項目の値を、前記アドレス情報テーブルにおける第２の値として設定し、前記第２の値が前記第１の値と不一致であり、且つ、前記第２の値が検査文字列と一致した場合に、異常終了処理を行うアドレス情報検証手段と、を備えるものである。
【００１１】
本発明の第２の態様では、情報処理方法は、プログラム開始時に、プログラムに含まれるポインタデータ項目の値を、アドレス情報テーブルにおける第１の値として設定し、プログラム終了時に、プログラムに含まれるポインタデータ項目の値を、前記アドレス情報テーブルにおける第２の値として設定し、前記第２の値が前記第１の値と一致するか否かを判定し、前記第２の値が前記第１の値と不一致である場合に、前記第２の値が検査文字列と一致するか否かを判定し、前記第２の値が前記検査文字列と一致した場合に、異常終了処理を行うものである。
【発明の効果】
【００１２】
本発明により、アプリケーション例外が発生する前に異常終了処理を行い、システム誤動作を事前に防止することができる情報処理装置及び情報処理方法を提供することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施の形態１にかかる情報処理装置の構成例を示すブロック図である。
【図２】本発明の実施の形態１にかかるアドレス情報テーブルの例を示す図である。
【図３】本発明の実施の形態１にかかるアドレス情報設定部及びアドレス情報検証部と実行されるプログラムとの関係を示す図である。
【図４】本発明の実施の形態１にかかるアドレス情報設定部による処理が実行された直後のアドレス情報テーブルの例を示す図である。
【図５】本発明の実施の形態１にかかるアドレス情報検証部による処理が実行された直後のアドレス情報テーブルの例を示す図である。
【図６】本発明の実施の形態１にかかる情報処理装置により行われる処理例を示すフローチャートである。
【図７】本発明の実施の形態１にかかる検査文字列の例を示す図である。
【図８】本発明の実施の形態２にかかる情報処理装置の構成例を示すブロック図である。
【図９】本発明の実施の形態２にかかるアドレス情報設定部による処理が実行された直後のアドレス情報テーブルの例を示す図である。
【図１０】本発明の実施の形態２にかかるアドレス情報検証部による処理が実行された直後のアドレス情報テーブルの例を示す図である。
【図１１】本発明の実施の形態２にかかる情報処理装置により行われる処理例を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下では、本発明の実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一又は対応する要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。なお、以下では、ＣＯＢＯＬ言語を用いる例について説明する。
【００１５】
実施の形態１
まず、図１を用いて、本発明の実施の形態１にかかる情報処理装置１０について説明する。情報処理装置１０は、ＣＰＵ（Central Processing Unit）等のプロセッサを含むコンピュータ・システムを用いて実現することができる装置である。情報処理装置１０は、図示しないプロセッサによりプログラムを実行する。
【００１６】
情報処理装置１０により実行されるプログラムは、複数のプログラムにより構成される。また、複数のプログラムの各々は、プログラム開始処理と、プログラム主処理と、プログラム終了処理と、を含んで構成される。プログラム開始処理は、プログラム主処理にて必要となるデータの初期化や引数情報のアドレス解決等の前処理を生成する。プログラム主処理は、プログラム言語にて利用者が記述したロジック処理を生成する。プログラム終了処理は、動的確保したメモリ解放等の後処理を生成する。
【００１７】
情報処理装置１０は、アドレス情報テーブル１１と、アドレス情報設定部１２と、アドレス情報検証部１３と、を備えている。
【００１８】
アドレス情報テーブル１１の例を図２に示す。アドレス情報テーブル１１は、ポインタデータ項目アドレス、ポインタデータ項目の第１の値、ポインタデータ項目の第２の値、及び判定を管理するためのテーブルである。アドレス情報テーブル１１は、例えば、プログラム開始処理において、アドレス情報設定部１２により生成される。
【００１９】
アドレス情報設定部１２及びアドレス情報検証部１３は、プログラムにポインタデータ項目が記述されている場合に必要となる。アドレス情報設定部１２及びアドレス情報検証部１３は、プログラム中にポインタデータ項目が含まれる場合に、コンパイラにより生成される。具体的には、プログラム中にポインタデータ項目が含まれる場合に、そのプログラムのプログラム開始処理に、アドレス情報設定部１２が生成される。また、プログラム中にポインタデータ項目が含まれる場合に、そのプログラムのプログラム終了処理にアドレス情報検証部１３が生成される。
【００２０】
ここで、図３を用いて、アドレス情報設定部１２及びアドレス情報検証部１３と実行されるプログラムとの関係について説明する。図３の例では、実行されるプログラムは、プログラム１〜プログラム３により構成されている。なお、実行されるプログラムに含まれるプログラムの数は、３つに限らない。図３の例では、プログラム１にポインタデータ項目が記述されているものとする。このため、アドレス情報設定部１２は、プログラム１のプログラム開始処理に含まれている。また、アドレス情報検証部１３は、プログラム１のプログラム終了処理に含まれている。
【００２１】
図１に戻り説明を続ける。アドレス情報設定部１２は、プログラム開始時に、プログラムに含まれるポインタデータ項目アドレスをアドレス情報テーブル１１へ設定する。また、アドレス情報設定部１２は、プログラム開始時に、プログラムに含まれるポインタデータ項目の値を、アドレス情報テーブル１１における対応するポインタデータ項目アドレスのポインタデータ項目の第１の値として設定する。
【００２２】
プログラム開始時に、アドレス情報設定部１２による処理が実行された直後のアドレス情報テーブル１１の例を図４に示す。図４の例では、アドレス情報設定部１２により、Ａｄｄｒｅｓｓ １のポインタデータ項目の第１の値として○○○○が設定され、Ａｄｄｒｅｓｓ ２のポインタデータ項目の第１の値として△△△△が設定され、Ａｄｄｒｅｓｓ ３のポインタデータ項目の第１の値として□□□□が設定されている。
【００２３】
アドレス情報検証部１３は、プログラム終了時に、プログラムに含まれるポインタデータ項目の値を、アドレス情報テーブル１１における対応するポインタデータ項目アドレスのポインタデータ項目の第２の値として設定する。また、アドレス情報検証部１３は、ポインタデータ項目の第２の値がポインタデータ項目の第１の値と不一致であり、且つ、ポインタデータ項目の第２の値が検査文字列と一致した場合に、異常終了処理を行う。ここで、異常終了処理とは、例えば、プログラムが異常終了したことをメッセージにて通知すること、オープン済みのファイルをクローズすること、及び確保したメモリの解放を行うこと等の少なくとも一つを示す。
【００２４】
プログラム終了時に、アドレス情報検証部１３による処理が実行された直後のアドレス情報テーブル１１の例を図５に示す。図５の例では、アドレス情報検証部１３により、Ａｄｄｒｅｓｓ １のポインタデータ項目の第２の値として○○○○が設定され、Ａｄｄｒｅｓｓ ２のポインタデータ項目の第２の値として◎◎◎◎が設定され、Ａｄｄｒｅｓｓ ３のポインタデータ項目の第２の値として××××が設定されている。ここで、◎◎◎◎は、検査文字列と不一致であり、××××は、検査文字列と一致するものとする。
【００２５】
Ａｄｄｒｅｓｓ １のポインタデータ項目の第２の値○○○○は、ポインタデータ項目の第１の値○○○○と一致している。このため、アドレス情報検証部１３は、Ａｄｄｒｅｓｓ １についての判定をＯＫとする。
【００２６】
Ａｄｄｒｅｓｓ ２のポインタデータ項目の第２の値◎◎◎◎は、ポインタデータ項目の第１の値△△△△と不一致である。しかし、第２の値◎◎◎◎は、検査文字列と不一致である。このため、アドレス情報検証部１３は、Ａｄｄｒｅｓｓ ２についての判定をＯＫとする。
【００２７】
Ａｄｄｒｅｓｓ ３のポインタデータ項目の第２の値××××は、ポインタデータ項目の第１の値□□□□と不一致である。また、第２の値××××は、検査文字列と一致している。このため、アドレス情報検証部１３は、Ａｄｄｒｅｓｓ ３についての判定をＮＧとする。そして、Ａｄｄｒｅｓｓ ３についての判定がＮＧであるため、アドレス情報検証部１３は、異常終了処理を行う。
【００２８】
続いて、図６のフローチャートを用いて、情報処理装置１０により行われる処理例について説明する。なお、図６の例は、対象となるポインタデータ項目が１つであり、検査文字列が１つである場合のフローを示している。
【００２９】
まず、アドレス情報設定部１２は、プログラム開始時に、プログラムに含まれるポインタデータ項目の値を、アドレス情報テーブル１１におけるポインタデータ項目の第１の値として設定する（ステップＳ１０１）。
【００３０】
アドレス情報検証部１３は、プログラム終了時に、プログラムに含まれるポインタデータ項目の値を、アドレス情報テーブル１１におけるポインタデータ項目の第２の値として設定する（ステップＳ１０２）。
【００３１】
次に、アドレス情報検証部１３は、ポインタデータ項目の第２の値が、ポインタデータ項目の第１の値と一致するか否かを判定する（ステップＳ１０３）。
【００３２】
ポインタデータ項目の第２の値が、ポインタデータ項目の第１の値と一致する場合（ステップＳ１０３にてＹＥＳ）、アドレス情報検証部１３は、判定をＯＫとし（ステップＳ１０４）、終了する。
【００３３】
他方、ポインタデータ項目の第２の値が、ポインタデータ項目の第１の値と不一致である場合（ステップＳ１０３にてＮＯ）、アドレス情報検証部１３は、ポインタデータ項目の第２の値が、検査文字列と一致するか否かを判定する（ステップＳ１０５）。
【００３４】
ポインタデータ項目の第２の値が、検査文字列と不一致である場合（ステップＳ１０５にてＮＯ）、アドレス情報検証部１３は、判定をＯＫとし（ステップＳ１０４）、終了する。
【００３５】
他方、ポインタデータ項目の第２の値が、検査文字列と一致した場合（ステップＳ１０５にてＹＥＳ）、アドレス情報検証部１３は、判定をＮＧとする（ステップＳ１０６）。
【００３６】
次に、アドレス情報検証部１３は、異常終了処理を行い（ステップＳ１０７）、終了する。
【００３７】
なお、図６の例では、検査文字列が１つである場合を示しているが、検査文字列が複数存在する場合には、ステップＳ１０５の判定を検査文字列の数と同じ回数繰り返す。また、ポインタデータ項目が複数存在する場合には、図６の処理をポインタデータ項目の数と同じ回数繰り返す。
【００３８】
続いて、図７を用いて、検査文字列の例について説明する。検査文字列は、図７に示す定数に対応する数値をポインタデータ項目の長さ分有するものである。図７の例では、３２ビットシステムのポインタデータ項目の場合、ＺＥＲＯの検査文字列は、値０ｘ３０が４つ連続しているものである。また、６４ビットシステムのポインタデータ項目の場合、ＺＥＲＯの検査文字列は、値０ｘ３０が８つ連続しているものである。
【００３９】
また、３２ビットシステムのポインタデータ項目の場合、ＳＰＡＣＥの検査文字列は、値０ｘ２０が４つ連続しているものである。また、６４ビットシステムのポインタデータ項目の場合、ＳＰＡＣＥの検査文字列は、値０ｘ２０が８つ連続しているものである。
【００４０】
また、３２ビットシステムのポインタデータ項目の場合、ＳＰＡＣＥ（ＳＪＩＳ）の検査文字列は、値０ｘ８１４０が２つ連続しているものである。また、６４ビットシステムのポインタデータ項目の場合、ＳＰＡＣＥ（ＳＪＩＳ）の検査文字列は、値０ｘ８１４０が４つ連続しているものである。
【００４１】
また、３２ビットシステムのポインタデータ項目の場合、ＳＰＡＣＥ（ＪＩＳ）の検査文字列は、値０ｘ２１が４つ連続しているものである。また、６４ビットシステムのポインタデータ項目の場合、ＳＰＡＣＥ（ＪＩＳ）の検査文字列は、値０ｘ２１が８つ連続しているものである。
【００４２】
また、３２ビットシステムのポインタデータ項目の場合、ＳＰＡＣＥ（ＥＵＣ）の検査文字列は、値０ｘＡ１が４つ連続しているものである。また、６４ビットシステムのポインタデータ項目の場合、ＳＰＡＣＥ（ＥＵＣ）の検査文字列は、値０ｘＡ１が８つ連続しているものである。
【００４３】
なお、図７では、ＣＯＢＯＬ言語で定数として使用される数値を示している。オペレーティングシステムの環境によって使用する日本語ＳＰＡＣＥの数値が異なるため、オペレーティングシステムに応じて検査文字列を変更することが可能である。
【００４４】
以上のように、実施の形態１にかかる情報処理装置１０では、アドレス情報設定部１２により、プログラム開始時に、プログラムに含まれるポインタデータ項目の値を、アドレス情報テーブル１１における第１の値として設定する構成としている。また、情報処理装置１０では、アドレス情報検証部１３により、プログラム終了時に、プログラムに含まれるポインタデータ項目の値を、アドレス情報テーブル１１の第２の値として設定する構成としている。また、情報処理装置１０では、アドレス情報検証部１３により、アドレス情報テーブル１１における第２の値が第１の値と不一致であり、且つ、アドレス情報テーブル１１における第２の値が検査文字列と一致した場合に、異常終了処理を行う構成としている。これにより、本実施の形態１にかかる情報処理装置１０では、アプリケーション例外が発生する前に異常終了処理を行い、システム誤動作を事前に防止することができる。また、情報処理装置１０では、特定のデータパターンによるアプリケーション例外が発生した場合の不正アドレスの調査時間を短縮することができる。
【００４５】
実施の形態２
続いて、図８を用いて、本発明の実施の形態２にかかる情報処理装置１０Ａについて説明する。本実施の形態２にかかる情報処理装置１０Ａは、実施の形態１にかかる情報処理装置１０の変形例である。情報処理装置１０Ａは、アドレス情報テーブル１１と、アドレス情報設定部１２Ａと、アドレス情報検証部１３Ａと、を備えている。
【００４６】
アドレス情報設定部１２Ａは、プログラム開始時に、実施の形態１のアドレス情報設定部１２と同一の処理を行う。また、アドレス情報設定部１２Ａは、プログラムに含まれるポインタデータ項目の値を設定した直後に、当該ポインタデータ項目の値を、アドレス情報テーブル１１における対応するポインタデータ項目アドレスのポインタデータ項目の第１の値として設定する。すなわち、アドレス情報設定部１２Ａは、実施の形態１のアドレス情報設定部１２がプログラム開始時に行う処理を、プログラム開始時に加えて、プログラムに含まれるポインタデータ項目の値を設定した直後にも行う。
【００４７】
アドレス情報設定部１２Ａによる処理が実行された直後のアドレス情報テーブル１１の例を図９に示す。図９の例では、プログラムに含まれるＡｄｄｒｅｓｓ ４のポインタデータ項目の値が☆☆☆☆に設定され、アドレス情報設定部１２Ａにより、アドレス情報テーブル１１におけるＡｄｄｒｅｓｓ ４のポインタデータ項目の第１の値として☆☆☆☆が設定された状態を示している。
【００４８】
アドレス情報検証部１３Ａは、プログラム終了時に、実施の形態１のアドレス情報検証部１３と同一の処理を行う。また、アドレス情報検証部１３Ａは、ポインタデータ項目の参照時に、プログラムに含まれるポインタデータ項目の値を、アドレス情報テーブル１１における対応するポインタデータ項目アドレスのポインタデータ項目の第２の値として設定する。また、アドレス情報検証部１３Ａは、ポインタデータ項目の第２の値がポインタデータ項目の第１の値と不一致であり、且つ、ポインタデータ項目の第２の値が検査文字列と一致した場合に、異常終了処理を行う。すなわち、アドレス情報検証部１３Ａは、実施の形態１のアドレス情報検証部１３がプログラム終了時に行う処理を、プログラム終了時に加えて、ポインタデータ項目の参照時にも行う。
【００４９】
ポインタデータ項目の参照時に、アドレス情報検証部１３Ａによる処理が実行された直後のアドレス情報テーブル１１の例を図１０に示す。図１０の例では、アドレス情報検証部１３Ａにより、Ａｄｄｒｅｓｓ ４のポインタデータ項目の第２の値として☆☆☆☆が設定されている。Ａｄｄｒｅｓｓ ４のポインタデータ項目の第２の値☆☆☆☆は、ポインタデータ項目の第１の値☆☆☆☆と一致している。このため、アドレス情報検証部１３Ａは、Ａｄｄｒｅｓｓ ４についての判定をＯＫとする。なお、判定がＯＫである場合には、ポインタデータ項目の参照処理が実行され、判定がＮＧである場合には、異常終了処理が行われる。
【００５０】
続いて、図１１のフローチャートを用いて、情報処理装置１０Ａにより行われる処理例について説明する。なお、図１１のフローチャートは、情報処理装置１０Ａにより行われるプログラム開始時の処理及びプログラム終了時の処理については省略している。また、図１１の例は、対象となるポインタデータ項目が１つであり、検査文字列が１つである場合のフローを示している。
【００５１】
まず、情報処理装置１０Ａは、プログラムに含まれるポインタデータ項目の値を設定する（ステップＳ２０１）。ステップＳ２０１の直後に、アドレス情報設定部１２Ａは、ステップＳ２０１にて設定されたポインタデータ項目の値を、アドレス情報テーブル１１における対応するポインタデータ項目アドレスのポインタデータ項目の第１の値として設定する（ステップＳ２０２）。
【００５２】
アドレス情報検証部１３Ａは、ポインタデータ項目の参照時に、プログラムに含まれるポインタデータ項目の値を、アドレス情報テーブル１１におけるポインタデータ項目の第２の値として設定する（ステップＳ２０３）。
【００５３】
次に、アドレス情報検証部１３Ａは、ポインタデータ項目の第２の値が、ポインタデータ項目の第１の値と一致するか否かを判定する（ステップＳ２０４）。
【００５４】
ポインタデータ項目の第２の値が、ポインタデータ項目の第１の値と一致する場合（ステップＳ２０４にてＹＥＳ）、アドレス情報検証部１３Ａは、判定をＯＫとする（ステップＳ２０５）。次に、情報処理装置１０Ａは、ポインタデータ項目の参照処理を実行する（ステップＳ２０６）。
【００５５】
他方、ポインタデータ項目の第２の値が、ポインタデータ項目の第１の値と不一致である場合（ステップＳ２０４にてＮＯ）、アドレス情報検証部１３Ａは、ポインタデータ項目の第２の値が、検査文字列と一致するか否かを判定する（ステップＳ２０７）。
【００５６】
ポインタデータ項目の第２の値が、検査文字列と不一致である場合（ステップＳ２０７にてＮＯ）、アドレス情報検証部１３Ａは、判定をＯＫとする（ステップＳ２０５）。次に、情報処理装置１０Ａは、ポインタデータ項目の参照処理を実行する（ステップＳ２０６）。
【００５７】
他方、ポインタデータ項目の第２の値が、検査文字列と一致した場合（ステップＳ２０７にてＹＥＳ）、アドレス情報検証部１３Ａは、判定をＮＧとする（ステップＳ２０８）。
【００５８】
次に、アドレス情報検証部１３Ａは、異常終了処理を行い（ステップＳ２０９）、終了する。
【００５９】
以上のように、実施の形態２にかかる情報処理装置１０Ａでは、アドレス情報設定部１２Ａにより、プログラム開始時及びプログラムに含まれるポインタデータ項目の値を設定した直後に、プログラムに含まれるポインタデータ項目の値を、アドレス情報テーブル１１における第１の値として設定する構成としている。また、情報処理装置１０Ａでは、アドレス情報検証部１３Ａにより、プログラム終了時及びポインタデータ項目の参照時に、プログラムに含まれるポインタデータ項目の値を、アドレス情報テーブル１１の第２の値として設定する構成としている。また、情報処理装置１０Ａでは、アドレス情報検証部１３Ａにより、アドレス情報テーブル１１における第２の値が第１の値と不一致であり、且つ、アドレス情報テーブル１１における第２の値が検査文字列と一致した場合に、異常終了処理を行う構成としている。これにより、本実施の形態２にかかる情報処理装置１０Ａでは、プログラムの終了時点に加えてポインタデータ項目の参照時点においても不正アドレスの検出を可能にすることができる。
【００６０】
なお、上述した実施の形態１及び２では、同じ値が連続する文字列を扱うことを特長とするＣＯＢＯＬ言語を用いる例について説明したが、用いる言語はＣＯＢＯＬ言語に限らない。実施の形態１及び２は、ポインタのアドレスをデータとしてメモリ配置することが可能な他のプログラミング言語に適用することも可能である。
【００６１】
また、上述のプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００６２】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態によって限定されるものではない。本願発明の構成や詳細には、発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【００６３】
１〜３    プログラム
１０、１０Ａ    情報処理装置
１１    アドレス情報テーブル
１２、１２Ａ    アドレス情報設定部
１３、１３Ａ    アドレス情報検証部
【図１】
2018128900.tif 000003
【図２】
2018128900.tif 000004
【図３】
2018128900.tif 000005
【図４】
2018128900.tif 000006
【図５】
2018128900.tif 000007
【図６】
2018128900.tif 000008
【図７】
2018128900.tif 000009
【図８】
2018128900.tif 000010
【図９】
2018128900.tif 000011
【図１０】
2018128900.tif 000012
【図１１】
2018128900.tif 000013