JP2021117653A - 検査システム、検査方法及び検査プログラム - Google Patents

検査システム、検査方法及び検査プログラム Download PDF

Info

Publication number
JP2021117653A
JP2021117653A JP2020009887A JP2020009887A JP2021117653A JP 2021117653 A JP2021117653 A JP 2021117653A JP 2020009887 A JP2020009887 A JP 2020009887A JP 2020009887 A JP2020009887 A JP 2020009887A JP 2021117653 A JP2021117653 A JP 2021117653A
Authority
JP
Japan
Prior art keywords
data
area
inspected
inspection
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
JP2020009887A
Other languages
English (en)
Inventor
誠司 照沼
Seiji Terunuma
誠司 照沼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2020009887A priority Critical patent/JP2021117653A/ja
Priority to US17/133,944 priority patent/US20210232335A1/en
Publication of JP2021117653A publication Critical patent/JP2021117653A/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0653Monitoring storage devices or systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/145Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being virtual, e.g. for virtual blocks or segments before a translation mechanism
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/062Securing storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Debugging And Monitoring (AREA)
  • Storage Device Security (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】メモリ領域オーバーランの検出機構の有効と無効を実行時に制御すること。【解決手段】領域割り付け部が検査対象プログラムのコンパイル時に検査対象のデータについて領域割り付け情報を生成する。そして、データ領域獲得部が検査対象プログラムの実行時にデータ領域を獲得し、領域割り付け情報に基づいて、獲得したデータ領域にデータを割り付ける。データ領域獲得部は、検査対象のデータを割り付ける際に、メモリ領域オーバーランが発生するとアクセス違反が検出されるように割り付ける。【選択図】図5

Description

本発明は、検査システム、検査方法及び検査プログラムに関する。
プログラムの実行時に、データAの領域範囲を超えて書き込みが行われることによって、データAに隣接して割り当てられたデータBの領域が破壊されることがある。このような領域破壊は、メモリ領域オーバーランと呼ばれる。
メモリ領域オーバーランが発生した場合、オーバーランの発生時点では異常が発生せず、破壊されたデータBの値を使って処理が行われ、異常終了などが発生して初めてデータBが破壊されたことが検出される。このため、異常終了などが発生しない場合、データBの領域破壊が検出されないことがある。このような領域破壊の未検出による障害の発生を防ぐため、領域破壊を検出する技術がある。
例えば、配列の領域を超えた書き込みを検出する技術として、配列を書き込み不能領域の前の隣接した領域に配置することで、配列の領域を超えた書き込みを、書き込み不能領域への書き込みとして検出する従来技術がある。
なお、スタック領域に記憶するデータの複製を同時に保存し、プログラムの実施時、記憶したデータと、複製データとを比較し、両者が異なっていたとき、プログラムの実行を中止し、スタック領域に記憶したデータに異常があることをユーザに通知する技術がある。
特開2006−185233号公報 特開2010−198147号公報
配列を書き込み不能領域の前の隣接した領域に配置することで、配列の領域を超えた書き込みを、書き込み不能領域への書き込みとして検出する従来技術では、翻訳時に固定の検出機構が埋め込まれる。このため、この従来技術には、実行時に検出機構の有効と無効を制御することで検出機構を柔軟に運用することができないという問題がある。
なお、NetCOBOLには、翻訳オプションを指定することで、メモリ領域オーバーランを検出する機能があるが、NetCOBOL以外の言語で作成されたプログラムを呼び出す場合には、メモリ領域オーバーランを検出することはできない。また、デバッグ用のツールとして、メモリ領域オーバーランを検出するツールがあるが、ツールを適用していないモジュールで発生したメモリ領域オーバーランを検出することはできない。
本発明は、1つの側面では、メモリ領域オーバーランの検出機構の有効と無効を実行時に制御可能にすることを目的とする。
1つの態様では、検査システムは、生成部と割り付け部を有する。前記生成部は、検査対象プログラムの実行時におけるアクセス対象のデータへのアクセスが該データのメモリ領域以外の領域への違反アクセスとなる可能性がある検査対象のデータへのアクセスであるか否かに基づいて、アクセス対象のデータの領域の割り付けに関する第1の情報をコンパイル時に生成して前記検査対象プログラムに関連付ける。前記割り付け部は、前記検査対象プログラムの実行開始時にアクセス対象のデータの領域を割り付ける際に、前記生成部により生成された第1の情報に基づいて、検査対象のデータについて、違反アクセスを禁止する割り付けを行う。
1つの側面では、本発明は、メモリ領域オーバーランの検出機構の有効と無効を実行時に制御可能にすることができる。
図1は、実施例に係る検査装置により検査されるプログラムの例を示す図である。 図2は、図1に示したプログラムのデータ領域割り付けを示す図である。 図3は、実施例に係る検査装置の機能構成を示す図である。 図4は、コンパイル部の機能構成を示す図である。 図5は、領域割り付け情報の一例を示す図である。 図6は、ポインタを用いてデータヘアクセスする命令群の例を示す図である。 図7は、実行部の機能構成を示す図である。 図8は、領域割り付け処理のフローを示すフローチャートである。 図9は、領域割り付け情報を出力する処理のフローを示すフローチャートである。 図10は、検査対象プログラムが無効から有効になるときに実行されるコード部分に領域獲得処理を展開する処理のフローを示すフローチャートである。 図11は、検査対象プログラムが有効から無効になるときに実行されるコード部分に領域解放処理を展開する処理のフローを示すフローチャートである。 図12は、オプション解析部がメモリ領域オーバーラン検査オプションを解析する処理のフローを示すフローチャートである。 図13は、データ領域獲得部による処理のフローを示すフローチャートである。 図14Aは、検査有効時の領域割り付け処理のフローを示す第1のフローチャートである。 図14Bは、検査有効時の領域割り付け処理のフローを示す第2のフローチャートである。 図15は、検査無効時の領域割り付け処理のフローを示すフローチャートである。 図16は、データ領域解放部による処理のフローを示すフローチャートである。 図17は、検査有効時の領域解放処理のフローを示すフローチャートである。 図18は、検査無効時の領域解放処理のフローを示すフローチャートである。 図19は、検査装置の効果を説明するための図である。 図20は、実施例に係る検査プログラムを実行するコンピュータのハードウェア構成を示す図である。
以下に、本願の開示する検査システム、検査方法及び検査プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
まず、実施例に係る検査装置によるデータ領域割り付けについて図1及び図2を用いて説明する。図1は、実施例に係る検査装置により検査される検査対象プログラムの例を示す図である。図1(a)はCOBOLプログラムの例を示し、図1(b)はCプログラムの例を示す。
これらのプログラムでは、「DATA1」、「IDX1」、「LEN1」、「GRP1」がデータとして使われる。「DATA1」はサイズが100の配列であり、要素のサイズは1バイトである。「IDX1」及び「LEN1」は、4バイトのデータである。「GRP1」は「DATA2」をメンバとする構造体であり、「DATA2」はサイズが20の配列であり、要素のサイズは4バイトである。
図1では、「DATA1」が、アドレス渡しの引数として「PROG2」の呼び出し時に指定され、「DATA1[200]」に書き込みが行われることで、メモリ領域オーバーランが発生する。
図2は、図1に示したプログラムのデータ領域割り付けを示す図である。図2(a)は、検査無効時の割り付けを示し、図2(b)は、検査有効時の割り付けを示す。ここで、検査無効は、メモリ領域オーバーラン検査が無効であることを示し、検査有効は、メモリ領域オーバーラン検査が有効であることを示す。また、「WORKING−STORAGE−SECTION」は、データの領域割り付けであることを示す。配列は、ポインタを用いてアクセスされる。データが割り付けられる領域は、実行時にランタイムライブラリによって確保される。
図2(a)に示すように、検査無効時は、実施例に係る検査装置は、「DATA1ポインタ」及び「DATA2ポインタ」としてそれぞれ8バイトを割り付ける。そして、実施例に係る検査装置は、「IDX1」として4バイトを割り付け、8バイトバウンダリ調整用空きとして4バイトを割り付け、「LEN1」として4バイトを割り付け、8バイトバウンダリ調整用空きとして4バイトを割り付ける。そして、実施例に係る検査装置は、「DATA1」として100バイトを割り付け、8バイトバウンダリ調整用空きとして4バイトの空きを設け、「DATA2」として80バイトを割り付ける。
一方、検査有効時は、実施例に係る検査装置は、図2(b)に示すように、「DATA1ポインタ」及び「DATA2ポインタ」としてそれぞれ8バイトを割り付ける。そして、実施例に係る検査装置は、「IDX1」として4バイトを割り付け、8バイトバウンダリ調整用空きとして4バイトを割り付け、「LEN1」として4バイトを割り付け、8バイトバウンダリ調整用空きとして4バイトを割り付ける。そして、実施例に係る検査装置は、ページ調整用の空きとしてページサイズ−32バイトの空きを設け、次のページをアクセス禁止とする。
そして、実施例に係る検査装置は、ページ調整用の空きとしてページサイズ−100バイトの空きを設け、「DATA1」として100バイトを割り付け、次のページをアクセス禁止とする。ページ調整用の空きとしてページサイズ−100バイトの空きを設けることで、実施例に係る検査装置は、「DATA1」をアクセス禁止ページの前に隣接させることができる。
そして、実施例に係る検査装置は、ページ調整用の空きとしてページサイズ−80バイトの空きを設け、「DATA2」として80バイトを割り付け、次のページをアクセス禁止とする。ページ調整用の空きとしてページサイズ−80バイトの空きを設けることで、実施例に係る検査装置は、「DATA2」をアクセス禁止ページの前に隣接させることができる。
このように、実施例に係る検査装置は、メモリ領域オーバーランが発生する可能性がある「DATA1」及び「DATA2」をアクセス禁止ページの前に隣接させる。したがって、実施例に係る検査装置は、メモリ領域オーバーランが発生したときにOS(Operating System)にアクセス違反を検出させることができる。なお、図2(b)において、「LEN1」と「DATA1」の間のアクセス禁止ページはなくてもよい。
次に、実施例に係る検査装置の機能構成について説明する。図3は、実施例に係る検査装置の機能構成を示す図である。図3に示すように、実施例に係る検査装置1は、コンパイル部10と、リンク部20と、実行部30とを機能として有する。図3のコンパイル部は生成部の一例であり、図3の実行部30は割り付け部の一例である。
コンパイル部10は、ソースプログラム2を読み込んでオブジェクトプログラム3を生成する。コンパイル部10は、例えばファイルからソースプログラム2を読み込み、オブジェクトプログラム3をファイルに書き込む。コンパイル部10は、メモリ領域オーバーラン検査有効をコンパイルオプションで指定されると、図2(b)に示した割り付けを行うために必要な情報である領域割り付け情報を生成してオブジェクトプログラム3に埋め込む。なお、領域割り付け情報の詳細については後述する。
ユーザは、例えば、キーボードやマウスを用いてコンパイルの実行、ソースファイル、オブジェクトファイル、コンパイルオプションを指定する。なお、コンパイル部10は、コンパイラプログラムがコンピュータで実行されることにより実現される。
リンク部20は、オブジェクトプログラム3を読み込んで実行可能モジュール4を生成する。リンク部20は、例えば、実行可能モジュール4をファイルに書き込む。なお、リンク部20は、リンカプログラムがコンピュータで実行されることにより実現される。
実行部30は、リンク部20により生成された実行可能モジュール4をランタイムライブラリ5とともに実行する。メモリ領域オーバーラン検査有効が実行時オプションで指定されると、ランタイムライブラリ5は、領域割り付け情報に基づいて検査有効時の領域割り付けを行う。
図4は、コンパイル部10の機能構成を示す図である。図4に示すように、コンパイル部10は、オプション解析部11と、ソース読み込み部12と、構文解析部13と、意味解析部14と、領域割り付け部15と、コード生成部16と、オブジェクト出力部17とを有する。
オプション解析部11は、コンパイルオプションを解析する。オプション解析部11は、例えば、メモリ領域オーバーラン検査が有効か否かを特定する。ソース読み込み部12は、ソースプログラム2を読み込む。
構文解析部13は、ソースプログラム2の構文解析を行う。意味解析部14は、構文解析結果に基づいてソースプログラム2の意味解析を行う。コンパイル部10は、メモリ領域オーバーラン検査が有効な場合、構文解析と意味解析において、後続するデータを破壊する可能性のあるデータを検査対象のデータとして特定し、特定した検査対象のデータにマークを付加する。
検査対象のデータには、例えば、以下がある。
・配列
・配列を含む構造体
・呼び出し(CALL文)でアドレス渡し(BY REFERENCE)されるデータ
・外部属性(EXTERNAL)を持つデータ
・ポインタを用いてアクセスされるデータ
・部分参照される文字列
・部分参照される文字列を含む構造体
領域割り付け部15は、メモリ領域オーバーラン検査が有効な場合、マークが付加された検査対象のデータについては、実行時に領域の割り付けが変えられるような割り付けを行い、領域割り付け情報を生成する。ここで、領域割り付け情報は、実行時にランタイムライブラリ5がデータへのポインタを設定するための情報と検査対象のデータのサイズの情報を含む。
図5は、領域割り付け情報の一例を示す図である。図5に示すように、領域割り付け情報には、プログラム名情報、作業域のベースサイズ情報、検査するデータの個数、DATA1ポインタオフセット、DATA1サイズ情報、DATA2ポインタオフセット、DATA2サイズ情報が含まれる。
プログラム名情報は、プログラムの名前であり、ここでは「PROG1」である。作業域のベースサイズ情報は、「DATA1ポインタ」から「LEN1」の後の8バイトバウンダリ調整用の空きまでのバイトサイズであり、ここでは「32」である。検査するデータの個数は、検査対象のデータの個数であり、ここでは「2」である。
DATA1ポインタオフセットはデータ領域の先頭からの「DATA1ポインタ」のオフセットであり、ここでは「0」である。DATA1サイズ情報は、「DATA1」のサイズであり、ここでは「100」である。DATA2ポインタオフセットはデータ領域の先頭からの「DATA2ポインタ」のオフセットであり、ここでは「8」である。DATA2サイズ情報は、「DATA2」のサイズであり、ここでは「80」である。
図4に戻って、コード生成部16は、構文解析結果及び意味解析結果に基づいてオブジェクトコードを生成する。コード生成部16は、オブジェクトコードの生成において、検査対象のデータにアクセスする命令は、検査対象のデータへのポインタをロードして、ロードしたポインタを用いて検査対象のデータにアクセスするようにする。
図6は、ポインタを用いてデータヘアクセスする命令群の例を示す図である。図6において、Base−Regは、領域のベースアドレスを保持する。図6に示すように、「Data」を「Reg2」にロードする場合には、「Data」の領域ポインタオフセットに領域のベースアドレスを加えて「Reg1」にロードし、「Reg1」で指定されるアドレスのデータを「Reg2」にロードする。
同様に、「Reg2」の値を「Data」にストアする場合には、「Data」の領域ポインタオフセットに領域のベースアドレスを加えて「Reg1」にロードし、「Reg2」の値を「Reg1」で指定されるアドレスにストアする。
また、コード生成部16は、領域割り付け情報をオブジェクトコード中に埋め込む。コード生成部16は、オブジェクトコードが複数のセクションから構成される場合に、領域割り付け情報を例えば.textや.rodataなどの読み込み専用のセクションに埋め込む。なお、コード生成部16は、領域割り付け情報をオブジェクトコード中に埋め込む代わりに、例えば、所定のファイルに出力してもよい。すなわち、領域割り付け情報が検査対象プログラムのオブジェクトコードと関連付けられれば、領域割り付け情報はオブジェクトコード以外に出力されてもよい。
また、コード生成部16は、検査対象プログラムの実行開始時に実行されるコード部分に、領域割り付け情報に基づいて領域を獲得するランタイムライブラリ5を呼び出すコードを埋め込む。また、コード生成部16は、検査対象プログラムの実行終了時に実行されるコード部分に、領域割り付け情報に基づいて領域を解放するランタイムライブラリ5を呼び出すコードを埋め込む。
オブジェクト出力部17は、コード生成部16により生成されたオブジェクトコードを、例えばファイルに出力する。
図7は、実行部30の機能構成を示す図である。図7に示すように、実行部30は、オプション解析部31と、データ領域獲得部32と、コード実行部33と、データ領域解放部34とを有する。
オプション解析部31は、実行時オプションを解析する。オプション解析部31は、例えば、メモリ領域オーバーラン検査が有効か否かを特定する。
データ領域獲得部32は、領域割り付け情報に基づいて、必要なデータ領域を獲得し、領域割り付けを行う。そして、データ領域獲得部32は、割り付けたデータのアドレスを、データをアクセスするためのポインタに設定する。検査対象のデータをアクセスする命令は、図6に示したように、ポインタを経由したアクセスを行うように構成されているため、実行可能モジュール4は、実行時にデータ領域獲得部32により設定されたポインタ経由でデータにアクセスする。なお、データ領域獲得部32の処理は、ランタイムライブラリ5により行われる。
コード実行部33は、実行可能モジュール4に制御を移すことにより、実行可能モジュール4を実行する。
データ領域解放部34は、実行可能モジュール4の実行が終了すると、データ領域獲得部32によって獲得されたデータ領域を解放する。
次に、図8〜図11を用いて、コンパイル部10による処理のフローについて説明する。図8は、領域割り付け処理のフローを示すフローチャートである。図8に示すように、領域割り付け部15は、プログラム名情報のサイズと作業域のベースサイズ情報のサイズと検査するデータ個数域のサイズを加えて、領域割り付け情報のサイズを初期化する(ステップS1)。また、領域割り付け部15は、検査対象データ情報の起点をNULLで初期化し(ステップS2)、ポインタオフセットを0で初期化し(ステップS3)、通常データオフセットを0で初期化する(ステップS4)。また、領域割り付け部15は、検査するデータの個数を0で初期化し(ステップS5)、ベースサイズを0で初期化する(ステップS6)。
そして、領域割り付け部15は、ユーザーデータがあるか否かを判定し(ステップS7)、ない場合には、ステップS20へ進む。一方、ユーザーデータがある場合には、領域割り付け部15は、後続するデータを破壊する可能性があるデータのマークが付加されているか否かを判定する(ステップS8)。
そして、マークが付加されていない場合には、領域割り付け部15は、領域の割り付け位置に通常データオフセットを設定し(ステップS9)、割り付けるデータのサイズに7を加え8で割った商に8を掛けた値を割り付けサイズとする(ステップS10)。なお、ここでは、バウンダリサイズを8としている。そして、領域割り付け部15は、通常データオフセットに割り付けサイズを加え(ステップS11)、ベースサイズに割り付けサイズを加える(ステップS12)。
そして、領域割り付け部15は、次に割り付けるデータがあるか否かを判定し(ステップS19)、ある場合には、ステップS8に戻る。一方、次に割り付けるデータがない場合には、領域割り付け部15は、ポインタオフセットをポインタ領域サイズに設定し(ステップS20)、通常データオフセットを通常データ領域サイズに設定する(ステップS21)。
ステップS8において、後続するデータを破壊する可能性があるデータのマークが付加されている場合には、領域割り付け部15は、領域の割り付け位置にポインタオフセットを設定する(ステップS13)。そして、領域割り付け部15は、領域割り付け情報のサイズにポインタオフセット域のサイズとサイズ情報域のサイズを加え(ステップS14)、検査対象データ情報を生成する(ステップS15)。ここで、検査対象データ情報は、ポインタオフセットと割り付けるデータのサイズである。そして、領域割り付け部15は、検査するデータの個数に1を加え(ステップS16)、ポインタオフセットにポインタサイズを加え(ステップS17)、ベースサイズにポインタサイズを加える(ステップS18)。そして、領域割り付け部15は、ステップS19へ移動する。
このように、領域割り付け部15が割り付けを行いながら領域割り付け情報の生成に必要な情報を生成するので、コード生成部16は領域割り付け情報を生成することができる。なお、領域割り付け情報のサイズ、ポインタ領域サイズ、通常データ領域サイズなどは、オブジェクト生成時に使われる。
図9は、領域割り付け情報を出力する処理のフローを示すフローチャートである。図9に示すように、コード生成部16は、領域割り付け情報のセクション内の出力位置(オフセット)を保存する(ステップS31)。コード生成部16は、保存した出力位置を、図10及び図11に示す処理で使用する。
そして、コード生成部16は、プログラム名情報を出力し(ステップS32)、作業域のベースサイズ情報を出力する(ステップS33)。コード生成部16は、ベースサイズを、作業域のベースサイズ情報として出力する。そして、コード生成部16は、検査するデータの個数を出力する(ステップS34)。そして、コード生成部16は、検査するデータの個数が0であるか否かを判定し(ステップS35)、0である場合には、処理を終了する。
一方、検査するデータの個数が0でない場合には、コード生成部16は、検査対象データ情報の起点から検査対象データの情報を1つ取得する(ステップS36)。そして、コード生成部16は、検査対象データ情報からポインタオフセットを出力し(ステップS37)、検査対象データ情報からサイズ情報を出力する(ステップS38)。そして、コード生成部16は、検査対象データが残っているか否かを判定し(ステップS39)、残っている場合には、ステップS36へ戻り、残っていない場合には、処理を終了する。
このように、コード生成部16が領域割り付け情報を出力するので、実行部30は、領域割り付け情報に基づいて領域の獲得とデータの割り付けを行うことができる。
図10は、検査対象プログラムが無効から有効になるときに実行されるコード部分に領域獲得処理を展開する処理のフローを示すフローチャートである。図10に示すように、コード生成部16は、プログラムが検査対象プログラムか否かを判定し(ステップS41)、検査対象プログラムでない場合には、通常の領域獲得処理を展開する(ステップS45)。
一方、プログラムが検査対象プログラムの場合には、コード生成部16は、領域割り付け情報を出力したセクションのベースアドレスと、領域割り付け情報のセクション内の出力位置から領域割り付け情報のアドレスを求める命令を出力する(ステップS42)。そして、コード生成部16は、領域割り付け情報のアドレスと、ランタイムライブラリ5へのインタフェースをランタイムライブラリ5の呼び出しのパラメータとして展開する命令を出力する(ステップS43)。そして、コード生成部16は、検査有効と検査無効の切り替え可能な領域を獲得するランタイムライブラリ5を呼び出す命令を出力する(ステップS44)。
このように、コード生成部16が、領域割り付け情報のアドレスを求める命令、ランタイムライブラリ5の呼び出しのパラメータを展開する命令、及び、検査有効と検査無効の切り替え可能な領域を獲得するランタイムライブラリ5を呼び出す命令を出力する。したがって、検査対象プログラムの実行開始時に、実行部30は、検査有効と検査無効の切り替え可能な領域を獲得することができる。
図11は、検査対象プログラムが有効から無効になるときに実行されるコード部分に領域解放処理を展開する処理のフローを示すフローチャートである。図11に示すように、コード生成部16は、プログラムが検査対象プログラムか否かを判定し(ステップS51)、検査対象プログラムでない場合には、通常の領域解放処理を展開する(ステップS55)。
一方、プログラムが検査対象プログラムの場合には、コード生成部16は、領域割り付け情報を出力したセクションのベースアドレスと、領域割り付け情報のセクション内の出力位置から領域割り付け情報のアドレスを求める命令を出力する(ステップS52)。そして、コード生成部16は、領域割り付け情報のアドレスと、ランタイムライブラリ5へのインタフェースをランタイムライブラリ5の呼び出しのパラメータとして展開する命令を出力する(ステップS53)。そして、コード生成部16は、検査有効と検査無効の切り替え可能な領域を解放するランタイムライブラリ5を呼び出す命令を出力する(ステップS54)。
このように、コード生成部16が、領域割り付け情報のアドレスを求める命令、ランタイムライブラリ5の呼び出しのパラメータを展開する命令、及び、検査有効と検査無効の切り替え可能な領域を解放するランタイムライブラリ5を呼び出す命令を出力する。したがって、検査対象プログラムの実行終了時に、実行部30は、検査有効と検査無効の切り替え可能な領域を解放することができる。
次に、図12〜図18を用いて、実行部30による処理のフローについて説明する。図12は、オプション解析部31がメモリ領域オーバーラン検査オプションを解析する処理のフローを示すフローチャートである。図12に示すように、オプション解析部31は、メモリ領域オーバーラン検査の無効の指定があるか否かを判定し(ステップS61)、ある場合には、検査無効フラグを設定する(ステップS62)。
一方、メモリ領域オーバーラン検査の無効の指定がない場合には、オプション解析部31は、プログラム単位の検査の指定があるか否かを判定し(ステップS63)、ある場合には、プログラムの情報を設定する(ステップS64)。
このように、オプション解析部31がメモリ領域オーバーラン検査オプションを解析するので、データ領域獲得部32がメモリ領域オーバーラン検査オプションに基づいてデータ領域を獲得して割り付けることができる。
図13は、データ領域獲得部32による処理のフローを示すフローチャートである。図13に示すように、データ領域獲得部32は、検査無効フラグの設定があるか否かを判定し(ステップS71)、ある場合には、検査無効時の領域割り付けを行う(ステップS72)。
一方、検査無効フラグの設定がない場合には、データ領域獲得部32は、プログラム情報の設定があるか否かを判定し(ステップS73)、ない場合には、検査有効時の領域割り付けを行う(ステップS74)。一方、プログラム情報の設定がある場合には、データ領域獲得部32は、検査対象のプログラムか否かを判定し(ステップS75)、検査対象のプログラムの場合には、検査有効時の領域割り付けを行う(ステップS74)。一方、検査対象のプログラムでない場合には、データ領域獲得部32は、検査無効時の領域割り付けを行う(ステップS72)。
図14A及び図14Bは、検査有効時の領域割り付け処理のフローを示すフローチャートである。図14Aに示すように、データ領域獲得部32は、ベースサイズをページサイズで割った商(ベースサイズ/ページサイズ)に1を加えてページサイズを掛けた値を領域サイズとする(ステップS81)。この処理により、領域サイズは、ページサイズの倍数であってベースサイズにページ調整用の空きを加えた値に設定される。なお、ベースサイズは、領域割り付け情報の作業域のベースサイズ情報の値である。そして、データ領域獲得部32は、領域サイズにページサイズを加える(ステップS82)。この処理により、領域サイズは、アクセス禁止ページの大きさを加えた値になる。
そして、データ領域獲得部32は、検査するデータの個数が0であるか否かを判定し(ステップS83)、0である場合には、ステップS89へ進む。一方、検査するデータの個数が0でない場合には、データ領域獲得部32は、IDXを0に初期化し(ステップS84)、サイズ情報[IDX]をページサイズで割った商に1を加えてページサイズを掛けた値を領域サイズに加える(ステップS85)。そして、データ領域獲得部32は、領域サイズにページサイズを加え(ステップS86)、IDXに1を加える(ステップS87)。そして、データ領域獲得部32は、IDXが検査するデータの個数より小さいか否かを判定し(ステップS88)、小さい場合には、ステップS85に戻る。
一方、IDXが検査するデータの個数より小さくない場合には、データ領域獲得部32は、領域サイズの領域を獲得し、獲得した領域の先頭アドレスを領域アドレスに設定する(ステップS89)。そして、データ領域獲得部32は、ベースサイズをページサイズで割った商に1を加えてページサイズを掛けた値を領域アドレスに加える(ステップS90)。そして、データ領域獲得部32は、領域アドレスからページサイズ分の領域をアクセス禁止に設定し(ステップS91)、領域アドレスにページサイズを加える(ステップS92)。
そして、図14Bに示すように、データ領域獲得部32は、検査するデータの個数が0であるか否かを判定し(ステップS93)、0である場合には、検査有効時の領域割り付け処理を終了する。一方、検査するデータの個数が0でない場合には、データ領域獲得部32は、IDXを0に初期化する(ステップS94)。そして、データ領域獲得部32は、サイズ情報[IDX]をページサイズで割った余り(サイズ情報[IDX]%ページサイズ)をページサイズから引いた値を空サイズとする(ステップS95)。そして、データ領域獲得部32は、領域アドレスに空きサイズを加えてデータ先頭アドレスとする(ステップS96)。
そして、データ領域獲得部32は、領域先頭アドレスにポインタオフセット[IDX]を加えたアドレスの領域にデータ先頭アドレスを設定する(ステップS97)。この処理により、データへのポインタが設定される。そして、データ領域獲得部32は、サイズ情報[IDX]をページサイズで割った商に1を加えてページサイズを掛けた値を領域アドレスに加える(ステップS98)。そして、データ領域獲得部32は、領域アドレスからページサイズ分の領域をアクセス禁止に設定し(ステップS99)、領域アドレスにページサイズを加える(ステップS100)。
そして、データ領域獲得部32は、IDXに1を加え(ステップS101)、IDXが検査するデータの個数より小さいか否かを判定する(ステップS102)。そして、データ領域獲得部32は、IDXが検査するデータの個数より小さい場合には、ステップS95に戻り、IDXが検査するデータの個数より小さくない場合には、検査有効時の領域割り付け処理を終了する。
このように、データ領域獲得部32は、データ領域を獲得し、獲得したデータ領域へのデータ及びアクセス禁止ページの割り付けと、データへのポインタの設定を、検査有効時の領域割り付け処理として行う。したがって、実行可能モジュール4は、ポインタを介してデータにアクセスすることができる。また、メモリ領域オーバーランが発生すると、OSがアクセス違反を検出することができる。
図15は、検査無効時の領域割り付け処理のフローを示すフローチャートである。図15に示すように、データ領域獲得部32は、ベースサイズをバウンダリサイズで割った商に1を加えてバウンダリサイズを掛けた値を領域サイズとする(ステップS111)。
そして、データ領域獲得部32は、検査するデータの個数が0であるか否かを判定し(ステップS112)、0である場合には、ステップS117へ進む。一方、検査するデータの個数が0でない場合には、データ領域獲得部32は、IDXを0に初期化し(ステップS113)、サイズ情報[IDX]をバウンダリサイズで割った商に1を加えてバウンダリサイズを掛けた値を領域サイズに加える(ステップS114)。そして、データ領域獲得部32は、IDXに1を加え(ステップS115)、IDXが検査するデータの個数より小さいか否かを判定し(ステップS116)、小さい場合には、ステップS114に戻る。
一方、IDXが検査するデータの個数より小さくない場合には、データ領域獲得部32は、領域サイズの領域を獲得し、獲得した領域の先頭アドレスを領域アドレスに設定する(ステップS117)。そして、データ領域獲得部32は、ベースサイズをバウンダリサイズで割った商に1を加えてバウンダリサイズを掛けた値を領域アドレスに加える(ステップS118)。
そして、データ領域獲得部32は、検査するデータの個数が0であるか否かを判定し(ステップS119)、0である場合には、検査無効時の領域割り付け処理を終了する。一方、検査するデータの個数が0でない場合には、データ領域獲得部32は、IDXを0に初期化し(ステップS120)、領域先頭アドレスにポインタオフセット[IDX]を加えたアドレスの領域にデータ先頭アドレスを設定する(ステップS121)。そして、データ領域獲得部32は、サイズ情報[IDX]をバウンダリサイズで割った商に1を加えてバウンダリサイズを掛けた値を領域アドレスに加える(ステップS122)。
そして、データ領域獲得部32は、IDXに1を加え(ステップS123)、IDXが検査するデータの個数より小さいか否かを判定する(ステップS124)。そして、データ領域獲得部32は、IDXが検査するデータの個数より小さい場合には、ステップS121に戻り、IDXが検査するデータの個数より小さくない場合には、検査無効時の領域割り付け処理を終了する。
このように、データ領域獲得部32は、データ領域を獲得し、獲得したデータ領域へのデータの割り付けと、データへのポインタの設定を、検査無効時の領域割り付け処理として行う。したがって、実行可能モジュール4は、ポインタを介してデータにアクセスすることができる。
図16は、データ領域解放部34による処理のフローを示すフローチャートである。図16に示すように、データ領域解放部34は、検査無効フラグの設定があるか否かを判定し(ステップS131)、ある場合には、検査無効時の領域解放を行う(ステップS132)。
一方、検査無効フラグの設定がない場合には、データ領域解放部34は、プログラム情報の設定があるか否かを判定し(ステップS133)、ない場合には、検査有効時の領域解放を行う(ステップS134)。一方、プログラム情報の設定がある場合には、データ領域解放部34は、検査対象のプログラムか否かを判定し(ステップS135)、検査対象のプログラムの場合には、検査有効時の領域解放を行う(ステップS134)。一方、検査対象のプログラムでない場合には、データ領域解放部34は、検査無効時の領域解放を行う(ステップS132)。
図17は、検査有効時の領域解放処理のフローを示すフローチャートである。図17に示すように、データ領域解放部34は、ベースサイズをページサイズで割った商に1を加えてページサイズを掛けた値を領域先頭アドレスに加えた値をアクセス禁止領域アドレスに設定する(ステップS141)。そして、データ領域解放部34は、アクセス禁止領域アドレスからページサイズ分の領域のアクセス禁止を解除する(ステップS142)。
そして、データ領域解放部34は、検査するデータの個数が0であるか否かを判定し(ステップS143)、0である場合には、ステップS149に進む。一方、検査するデータの個数が0でない場合には、データ領域解放部34は、IDXを0に初期化する(ステップS144)。そして、データ領域解放部34は、ポインタオフセット[IDX]のポインタの値にサイズ情報[IDX]を加えた値をアクセス禁止領域アドレスに設定する(ステップS145)。そして、データ領域解放部34は、アクセス禁止領域アドレスからページサイズ分の領域のアクセス禁止を解除し(ステップS146)、IDXに1を加える(ステップS147)。
そして、データ領域解放部34は、IDXが検査するデータの個数より小さいか否かを判定し(ステップS148)、小さい場合には、ステップS145に戻る。一方、IDXが検査するデータの個数より小さくない場合には、データ領域解放部34は、領域を解放する(ステップS149)。
このように、データ領域解放部34は、データ領域獲得部32により設定されたアクセス禁止を解除して領域を解放するので、解放された領域の再利用を可能とすることができる。
図18は、検査無効時の領域解放処理のフローを示すフローチャートである。図18に示すように、データ領域解放部34は、領域を解放する(ステップS151)。このように、データ領域解放部34は、検査無効の場合には、領域を解放するだけで、解放された領域の再利用を可能とすることができる。
次に、検査装置1の効果について説明する。図19は、検査装置1の効果を説明するための図である。図19に示すように、検査装置1は、メモリ領域オーバーランが発生する可能性がある「DATA1」及び「DATA2」それぞれの後がアクセス禁止ページになるように「DATA1」及び「DATA2」を割り付ける。したがって、「DATA1」又は「DATA2」においてメモリ領域オーバーランが発生すると、OSがアクセス違反のエラーを検出することができる。
上述してきたように、実施例では、領域割り付け部15が検査対象プログラムのコンパイル時に検査対象のデータについて領域割り付け情報を生成する。そして、データ領域獲得部32が検査対象プログラムの実行開始時にデータ領域を獲得し、領域割り付け情報に基づいて、獲得したデータ領域にデータを割り付ける。データ領域獲得部32は、検査対象のデータを割り付ける際に、各データの後ろが禁止ページになるように割り付ける。したがって、メモリ領域オーバーランが発生すると、OSがアクセス違反を検出するので、検査装置1は、メモリ領域オーバーランを検出することができる。また、検査装置1は、メモリ領域オーバーランの検出を有効にするか無効にするかを実行時に制御可能とすることができる。
また、実施例では、オプション解析部31が、実行時のオプションを解析し、検査有効であるか否かを特定する。そして、データ領域獲得部32は、オプション解析部31により検査有効が特定された場合に、検査対象のデータの後ろが禁止ページになるようにデータを割り付ける。したがって、ユーザは、メモリ領域オーバーランの検出を有効にするか無効にするかを実行時にオプションで指定することができる。
また、実施例では、検査対象プログラムの実行終了時に、データ領域解放部34は、禁止ページの設定を解除して領域を解放するので、解放された領域の再利用を可能とすることができる。
また、実施例では、コード生成部16が、検査有効と検査無効の切り替え可能な領域を獲得するランタイムライブラリ5を呼び出す命令を出力する。したがって、データ領域獲得部32は、データ領域を獲得し、領域割り付け情報に基づいて、獲得したデータ領域にデータを割り付けることができる。
なお、実施例では、検査装置1について説明したが、検査装置1が有する構成をソフトウェアによって実現することで、同様の機能を有する検査プログラムを得ることができる。そこで、検査プログラムを実行するコンピュータについて説明する。
図20は、実施例に係る検査プログラムを実行するコンピュータのハードウェア構成を示す図である。図20に示すように、コンピュータ50は、メインメモリ51と、CPU(Central Processing Unit)52と、LAN(Local Area Network)インタフェース53と、HDD(Hard Disk Drive)54とを有する。また、コンピュータ50は、スーパーIO(Input Output)55と、DVI(Digital Visual Interface)56と、ODD(Optical Disk Drive)57とを有する。
メインメモリ51は、プログラムやプログラムの実行途中結果等を記憶するメモリである。CPU52は、メインメモリ51からプログラムを読み出して実行する中央処理装置である。CPU52は、メモリコントローラを有するチップセットを含む。
LANインタフェース53は、コンピュータ50をLAN経由で他のコンピュータに接続するためのインタフェースである。HDD54は、プログラムやデータを格納するディスク装置であり、スーパーIO55は、マウスやキーボード等の入力装置を接続するためのインタフェースである。DVI56は、液晶表示装置を接続するインタフェースであり、ODD57は、DVDの読み書きを行う装置である。
LANインタフェース53は、PCIエクスプレス(PCIe)によりCPU52に接続され、HDD54及びODD57は、SATA(Serial Advanced Technology Attachment)によりCPU52に接続される。スーパーIO55は、LPC(Low Pin Count)によりCPU52に接続される。
そして、コンピュータ50において実行される検査プログラムは、コンピュータ50により読み出し可能な記録媒体の一例であるDVDに記憶され、ODD57によってDVDから読み出されてコンピュータ50にインストールされる。あるいは、検査プログラムは、LANインタフェース53を介して接続された他のコンピュータシステムのデータベース等に記憶され、これらのデータベースから読み出されてコンピュータ50にインストールされる。そして、インストールされた検査プログラムは、HDD54に記憶され、メインメモリ51に読み出されてCPU52によって実行される。
また、実施例では、配列のインデックスの値が配列のサイズより大きい場合にアクセス違反を検出したが、検査装置1は、配列のインデックスの値が負の値の場合にアクセス違反を検出してもよい。検査装置1は、配列をページの先頭に割り付け、配列を割り付けたページの前のページをアクセス禁止にすることで、配列のインデックスの値が負の値の場合にアクセス違反を検出することができる。
1 検査装置
2 ソースプログラム
3 オブジェクトプログラム
4 実行可能モジュール
5 ランタイムライブラリ
10 コンパイル部
11 オプション解析部
12 ソース読み込み部
13 構文解析部
14 意味解析部
15 領域割り付け部
16 コード生成部
17 オブジェクト出力部
20 リンク部
30 実行部
31 オプション解析部
32 データ領域獲得部
33 コード実行部
34 データ領域解放部
50 コンピュータ
51 メインメモリ
52 CPU
53 LANインタフェース
54 HDD
55 スーパーIO
56 DVI
57 ODD

Claims (9)

  1. 検査対象プログラムの実行時におけるアクセス対象のデータへのアクセスが該データのメモリ領域以外の領域への違反アクセスとなる可能性がある検査対象のデータへのアクセスであるか否かに基づいて、アクセス対象のデータの領域の割り付けに関する第1の情報をコンパイル時に生成して前記検査対象プログラムに関連付ける生成部と、
    前記検査対象プログラムの実行開始時にアクセス対象のデータの領域を割り付ける際に、前記生成部により生成された第1の情報に基づいて、検査対象のデータについて、違反アクセスを禁止する割り付けを行う割り付け部と
    を有することを特徴とする検査システム。
  2. コンピュータが、
    検査対象プログラムの実行時におけるアクセス対象のデータへのアクセスが該データのメモリ領域以外の領域への違反アクセスとなる可能性がある検査対象のデータへのアクセスであるか否かに基づいて、アクセス対象のデータの領域の割り付けに関する第1の情報をコンパイル時に生成して前記検査対象プログラムに関連付け、
    前記検査対象プログラムの実行開始時にアクセス対象のデータの領域を割り付ける際に、前記第1の情報に基づいて、検査対象のデータについて、違反アクセスを禁止する割り付けを行う
    処理を実行することを特徴とする検査方法。
  3. コンピュータに、
    検査対象プログラムの実行時におけるアクセス対象のデータへのアクセスが該データのメモリ領域以外の領域への違反アクセスとなる可能性がある検査対象のデータへのアクセスであるか否かに基づいて、アクセス対象のデータの領域への違反アクセスを禁止する割り付けに関する第1の情報をコンパイル時に生成して前記検査対象プログラムに関連付ける、
    処理を実行させることを特徴とする検査プログラム。
  4. 前記第1の情報は、検査対象のデータへのアクセスに用いられるポインタの領域と検査対象以外のデータの領域とを合わせた領域のサイズ、検査対象のデータの個数、各検査対象のデータサイズを含むことを特徴とする請求項3に記載の検査プログラム。
  5. 前記検査対象プログラムの実行開始時に違反アクセスを禁止する割り付けを行う処理をランタイムライブラリによって前記第1の情報に基づいて実行するコードを前記検査対象プログラムのコンパイル時に生成してオブジェクトコードに埋め込む処理を前記コンピュータにさらに実行させることを特徴とする請求項3又は4に記載の検査プログラム。
  6. コンピュータに、
    検査対象プログラムの実行開始時にアクセス対象のデータの領域を割り付ける際に、検査対象プログラムの実行時におけるアクセス対象のデータへのアクセスが該データのメモリ領域以外の領域への違反アクセスとなる可能性がある検査対象のデータへのアクセスであるか否かに基づいて生成された、アクセス対象のデータの領域への違反アクセスを禁止する割り付けに関する第1の情報に基づいて、検査対象のデータについて、違反アクセスを禁止する割り付けを行う、
    処理を実行させることを特徴とする検査プログラム。
  7. 前記違反アクセスを禁止する割り付けを行う処理は、アクセス対象のデータの領域を獲得し、検査対象のデータをページの境界に隣接して割り付け、該境界の該検査対象のデータの直前又は直後のページをアクセス禁止に設定することを特徴とする請求項6に記載の検査プログラム。
  8. 前記検査対象プログラムの実行時のオプションで検査有効が指定されたか否かを判定する処理を前記コンピュータにさらに実行させ、
    検査有効が指定された場合に、前記違反アクセスを禁止する割り付けを行う処理を前記コンピュータに実行させることを特徴とする請求項6又は7に記載の検査プログラム。
  9. 前記検査対象プログラムの実行終了時に、前記アクセス禁止を解除し、獲得した領域を解放する処理を前記コンピュータにさらに実行させることを特徴とする請求項7に記載の検査プログラム。
JP2020009887A 2020-01-24 2020-01-24 検査システム、検査方法及び検査プログラム Withdrawn JP2021117653A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2020009887A JP2021117653A (ja) 2020-01-24 2020-01-24 検査システム、検査方法及び検査プログラム
US17/133,944 US20210232335A1 (en) 2020-01-24 2020-12-24 Inspection system, inspection method, and computer-readable recording medium recording inspection program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020009887A JP2021117653A (ja) 2020-01-24 2020-01-24 検査システム、検査方法及び検査プログラム

Publications (1)

Publication Number Publication Date
JP2021117653A true JP2021117653A (ja) 2021-08-10

Family

ID=76970030

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020009887A Withdrawn JP2021117653A (ja) 2020-01-24 2020-01-24 検査システム、検査方法及び検査プログラム

Country Status (2)

Country Link
US (1) US20210232335A1 (ja)
JP (1) JP2021117653A (ja)

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11983094B2 (en) * 2019-12-05 2024-05-14 Microsoft Technology Licensing, Llc Software diagnostic context selection and use

Also Published As

Publication number Publication date
US20210232335A1 (en) 2021-07-29

Similar Documents

Publication Publication Date Title
US20080120604A1 (en) Methods, Systems, And Computer Program Products For Providing Program Runtime Data Validation
US5583988A (en) Method and apparatus for providing runtime checking features in a compiled programming development environment
US6920631B2 (en) Software installation and validation using custom actions
US8954939B2 (en) Extending a development environment
US8607208B1 (en) System and methods for object code hot updates
US8813049B2 (en) Type inference of partially-specified parameterized types
JP5893038B2 (ja) ユーザ定義型のコンパイル時境界検査
US20080320282A1 (en) Method And Systems For Providing Transaction Support For Executable Program Components
US8302073B2 (en) Moving and copying dependencies along with source code
US8141035B2 (en) Method for accessing internal states of objects in object oriented programming
US8843920B2 (en) Systems and methods for deferring software implementation decisions until load time
US7536678B2 (en) System and method for determining the possibility of adverse effect arising from a code change in a computer program
US8302087B2 (en) Quality assurance in software systems through autonomic reliability, availability and serviceability code generation
JPH07319735A (ja) メモリの不正アクセス検出方法及びシステム
CN109032687B (zh) 屏蔽sdk危险调用的方法及装置
US9436452B2 (en) Method for enforcing language subsets
US20090249021A1 (en) Method And Systems For Invoking An Advice Operation Associated With A Joinpoint
Wressnegger et al. Twice the bits, twice the trouble: Vulnerabilities induced by migrating to 64-bit platforms
US20010054177A1 (en) Information processing apparatus
US5946493A (en) Method and system in a data processing system for association of source code instructions with an optimized listing of object code instructions
CN114064042A (zh) 一种工程源码编译系统、方法及装置
JP2021117653A (ja) 検査システム、検査方法及び検査プログラム
US8713550B2 (en) Methods, devices and software applications for facilitating a development of a computer program
KR101842263B1 (ko) 어플리케이션에 대한 역공학 차단 방법 및 장치
JPH11110256A (ja) プログラムデバッグ装置、プログラムデバッグ方法及びその方法を記録したコンピュータ読取り可能な記録媒体

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220908

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20230306