JP2005338892A - メモリ異常使用検知装置 - Google Patents

メモリ異常使用検知装置 Download PDF

Info

Publication number
JP2005338892A
JP2005338892A JP2004152726A JP2004152726A JP2005338892A JP 2005338892 A JP2005338892 A JP 2005338892A JP 2004152726 A JP2004152726 A JP 2004152726A JP 2004152726 A JP2004152726 A JP 2004152726A JP 2005338892 A JP2005338892 A JP 2005338892A
Authority
JP
Japan
Prior art keywords
memory
area
address
written
register
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.)
Pending
Application number
JP2004152726A
Other languages
English (en)
Inventor
Tsukasa Aso
主 麻生
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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2004152726A priority Critical patent/JP2005338892A/ja
Publication of JP2005338892A publication Critical patent/JP2005338892A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】 メモリの異常使用が発生したことを即座に検知できるメモリ異常使用検知装置を提供する。
【解決手段】 メモリ異常使用検知装置1は、メモリ領域確保状態記録テーブル2に対し、テーブル設定回路3が、メモリ300の領域を動的に確保/解放する関数動作の実行に伴ってターゲットCPU200から要求レジスタ31、先頭アドレスレジスタ32、設定サイズレジスタ33にそれぞれ書き込まれる機能停止要求、動的に確保/解放される領域の先頭アドレス、およびそのメモリサイズのデータに基づいて、メモリ300のアドレスに1:1に対応したメモリ領域確保状態記録テーブル2のアドレスに、その領域のメモリ300が動的に確保された状態であるか解放された状態であるかを示す識別情報を記録する。この識別情報は、要求レジスタ31へ機能再開要求が書き込まれた後は、メモリ300へのアクセスの度に出力制御部4を介して出力される。
【選択図】 図1

Description

本発明は、メモリ異常使用検知装置に係り、特にプログラムの実行時に動的に領域が確保/解放されるメモリの異常使用を検知するメモリ異常使用検知装置に関する。
動的なメモリ取得を行うプログラムにあっては、メモリの未取得や意図しないメモリの解放などのメモリの異常使用によってプログラムの実行に障害が発生する。ところが、このような障害の発生は、取得したはずのメモリのデータ値の異常によるデータ処理の異常や意図しないメモリへのアクセスなど、間接的な現象として表面化するだけである。また、このような表面化した現象は、メモリの異常使用が発生した箇所とは異なる箇所で現れることが多い。
そのため、メモリの異常使用がどこで発生したかを特定するためには多くの時間を必要とし、アプリケーションプログラムの開発に大きな影響を及ぼす。
そこでアプリケーションプログラムの開発にあたっては、エミュレータなどのデバッグ装置を用いて、動的に使用されるメモリ領域の確保/解放の状態を知ることが、メモリ異常使用と思われる障害が発生したときの原因解析に有効である。
そのため、従来、デバッグ対象のプログラムが呼び出すメモリ確保関数、メモリ解放関数の使用履歴をテーブルに記録して、メモリ異常使用問題発生時の調査に利用するメモリ割当トレース装置が提案されていた(例えば、特許文献1参照。)。
しかし、従来のメモリ割当トレース装置を利用する解析では、プログラム実行の終了後に上述のテーブルを調査して初めて問題の発生箇所が判明するものであり、プログラム実行時にはメモリの異常使用があったことがわからないという、デバッグのリアルタイム性に欠ける問題があった。
特開平6−242989号公報 (第4ページ、図1)
そこで、本発明の目的は、プログラムのデバッグ時にメモリの異常使用が発生したことを即座に検知できるメモリ異常使用検知装置を提供することにある。
本発明の一態様によれば、使用領域が動的に確保あるいは解放されるメモリの領域確保状態を記録するメモリ領域確保状態記録テーブルと、プログラムの実行に伴い動的にメモリ領域を確保あるいは解放する処理が実行されたときに、前記メモリ領域が確保状態であるか解放状態であるかを識別する識別情報を前記メモリのアドレスごとに前記メモリ領域確保状態記録テーブルに書き込むテーブル設定回路とを具備し、動的に領域を確保あるいは解放する前記メモリ領域への読み出しアクセスがあったときに、前記メモリ領域確保状態記録テーブルから前記アクセスされたアドレスの前記識別情報を読み出すことを特徴とするメモリ異常使用検知装置が提供される。
本発明によれば、プログラムのデバッグ時にメモリの異常使用が発生したことを即座に検知することができるので、プログラムの開発効率を向上させることができる。
以下、本発明の実施例を図面を参照して説明する。
図1は、本発明の実施例に係るメモリ異常使用検知装置の構成の例を示すブロック図である。なお、図1では、本実施例のメモリ異常使用検知装置1が、ターゲットCPU200のエミュレーションを実行するエミュレータ装置100に組み込まれている例を示す。また、エミュレータ装置100を用いてデバッグを行うときに、ターゲットCPU200で実行されるプログラムは、ソースプログラムのコンパイル時にコンパイラ/リンカでデバッグ用ライブラリがリンクされ、メモリ300の領域を動的に確保あるいは解放する関数は、本実施例のメモリ異常使用検知装置1へのコマンドやデータの送出なども併せて行うデバッグ専用動作を行うものとする。
メモリ異常使用検知装置1は、ターゲットCPU200のプログラム実行により使用領域が動的に確保あるいは解放されるメモリ300の領域確保状態を記録するメモリ領域確保状態記録テーブル2と、メモリ300の領域を動的に確保/解放する関数動作の実行時にメモリ領域確保状態記録テーブル2に記録する情報がターゲットCPU200からデータバスとアドレスバスを介して入力されるテーブル設定回路3と、テーブル設定回路3の指示に基づいてメモリ領域確保状態記録テーブル2の出力を外部へ出力するかしないかを制御する出力制御部4とを備える。
テーブル設定回路3は、要求レジスタ31と、先頭アドレスレジスタ32と、設定サイズレジスタ33とを有している。
要求レジスタ31へは、メモリ300の領域を動的に確保/解放する関数動作の実行に伴って、メモリ領域確保状態記録テーブル2からのデータの読み出し禁止を要求する機能停止要求、メモリ領域確保状態記録テーブル2へ領域確保状態を反映させるための領域確保状態の記録要求、メモリ領域確保状態記録テーブル2へ領域解放状態を反映させるための領域解放状態の記録要求、および禁止したメモリ領域確保状態記録テーブル2からのデータの読み出しの再開を要求する機能再開要求が、ターゲットCPU200から書き込まれる。
先頭アドレスレジスタ32へは、メモリ300の領域を動的に確保/解放する関数動作の実行に伴って、メモリ300上に動的に確保される領域の先頭アドレスの値が、ターゲットCPU200から書き込まれる。
設定サイズレジスタ33へは、メモリ300の領域を動的に確保/解放する関数動作の実行に伴って、メモリ300上に動的に領域を確保するのに必要なメモリサイズ、あるいは動的に解放する領域のメモリサイズの値が、ターゲットCPU200から書き込まれる。
これらの要求レジスタ31、先頭アドレスレジスタ32、設定サイズレジスタ33には、それぞれ固有のアドレスが割り当てられており、書き込み対象のレジスタの指定は、アドレスバスを介して書き込み対象のレジスタのアドレスを指定することによって行われる。また、これらのレジスタへ書き込むデータは、データバスを介して送られる。
テーブル設定回路3は、メモリ300の領域を動的に確保/解放する関数動作の実行に伴って要求レジスタ31へ機能停止要求が書き込まれると、出力制御部4を制御して、メモリ領域確保状態記録テーブル2からのデータの読み出しを禁止する。
次いで、先頭アドレスレジスタ32と設定サイズレジスタ33へのデータの書き込み後、要求レジスタ31へ領域確保状態の記録要求もしくは領域解放状態の記録要求が書き込まれると、テーブル設定回路3は、メモリ領域確保状態記録テーブル2へ、先頭アドレスレジスタ32と設定サイズレジスタ33に書き込まれたデータに基づいてメモリ300の領域確保/解放状態の記録を行う。このメモリ領域確保状態記録テーブル2への領域確保/解放状態の記録についての詳細は後述する。
メモリ領域確保状態記録テーブル2への領域確保/解放状態の記録が終了し、要求レジスタ31へ機能再開要求が書き込まれると、テーブル設定回路3は出力制御部4を制御して、メモリ領域確保状態記録テーブル2からのデータの読み出しを許可する。
ここで、メモリ領域確保状態記録テーブル2の構成と、その記録されるデータについて説明する。
図2(a)に、メモリ領域確保状態記録テーブル2の構成の例を示す。
メモリ領域確保状態記録テーブル2は、アドレス部と識別情報部から構成される。アドレス部には、メモリ300の動的に確保/解放された領域のアドレスに1:1に対応するアドレスが設定されている。識別情報部には、メモリ300の領域が動的に確保された状態であるか解放された状態であるかを識別する識別情報が記録される。例えば、識別情報を1ビットのデータとし、メモリ300の領域が動的に確保された状態を‘1’、解放された状態を‘0’で表すとすると、識別情報部には、この1ビットの識別情報が記録される。
図2(a)は、メモリ300の2箇所の領域が動的に確保されたときに、メモリ領域確保状態記録テーブル2へ識別情報が記録される様子を示している。
この識別情報の記録にあたっては、要求レジスタ31に書き込まれた領域確保状態の記録要求が、テーブル設定回路3の先頭アドレスレジスタ32と設定サイズレジスタ33に書き込まれたデータに反映される。
例えば、メモリ300の領域を動的に確保する動作のときに、先頭アドレスレジスタ32へ書き込まれたアドレス値を先頭アドレス1、設定サイズレジスタ33に書き込まれた値が4とすると、メモリ領域確保状態記録テーブル2の先頭アドレス1に相当するアドレスから4アドレス分の識別情報部に、要求レジスタ31に書き込まれた領域確保状態の記録要求が反映されて、識別情報‘1’が記録される。また、メモリ300の別の領域を動的に確保する動作で、先頭アドレスレジスタ32へアドレス値として先頭アドレス2、設定サイズレジスタ33へ値3が書き込まれると、メモリ領域確保状態記録テーブル2の先頭アドレス2に相当するアドレスから3アドレス分の識別情報部に、やはり要求レジスタ31に書き込まれた領域確保状態の記録要求が反映されて、識別情報‘1’が記録される。
一方、図2(b)は、メモリ300の領域が動的に解放されたときに、メモリ領域確保状態記録テーブル2へ識別情報が記録される様子を示している。
ここでは、先頭アドレス1に相当するアドレスから4アドレス分確保されていた領域を解放する動作が行われて、要求レジスタ31へ領域解放状態の記録要求が書き込まれ、先頭アドレスレジスタ32へアドレス値として先頭アドレス1、設定サイズレジスタ33へ値4が書き込まれたときの記録の様子を示す。
この場合、メモリ領域確保状態記録テーブル2の先頭アドレス1に相当するアドレスから4アドレス分の識別情報部に識別情報‘0’が記録される。
このメモリ領域確保状態記録テーブル2のアドレス部はアドレスバスに接続されており、メモリ300の動的に確保/解放された領域のアドレスにアクセスが行われると、メモリ領域確保状態記録テーブル2の同じアドレスへのアクセスも行われ、そのアドレスの識別情報の読み出しが行われる。
このとき、メモリ領域が確保されているアドレスへのアクセスのときは、メモリ領域確保状態記録テーブル2から‘1’が出力される。ところが、メモリの使用が異常で、既にメモリ領域が解放されているアドレスへアクセスが行われると、メモリ領域確保状態記録テーブル2からは‘0’が出力される。すなわち、メモリ領域確保状態記録テーブル2から‘0’が出力されたときは、メモリの使用の異常を検知したものと判断することできる。
メモリ領域確保状態記録テーブル2から読み出された識別情報は、出力制御部4を介してエミュレータ装置100の機能制御部101へ出力される。この機能制御部101は、ターゲットCPU200の停止やトレースメモリ(図示せず)へのトレースデータの書き込みなどを制御する機能を有する。
そこで、出力制御部4を介してメモリ領域確保状態記録テーブル2から‘0’が入力されたときに、機能制御部101がターゲットCPU200を停止させるようにしておけば、メモリの異常使用が発生したときに即座にターゲットCPU200を停止させることができる。
なお、初期状態では、テーブル設定回路3へエミュレータ装置100のエミュレータ制御部102からアドレスと初期データが送られ、メモリ領域確保状態記録テーブル2の識別情報は総て‘0’に初期設定される。
また、要求レジスタ31へ機能停止要求が書き込まれてメモリ領域確保状態記録テーブル2からのデータの読み出しが禁止されている間は、出力制御部4から‘1’を出力するようにしておく。
次に、デバッグ中のプログラム実行に従って、メモリ領域確保状態記録テーブル2へ識別情報が書き込まれる様子を図3および図4を用いて説明する。
図3は、デバッグ対象のC言語で書かれたソースプログラムの例を示す図であり、図4は、図3に示すプログラムのデバッグの実行に伴ってメモリ領域確保状態記録テーブル2へ書き込まれる識別情報の変化を示す図である。
図3のプログラムの実行において、メモリ300に対しては次のような動作が順次発生する。
(1)メモリ領域の動的な確保
point1=malloc(sizeof(int[3]));メモリ領域を動的に確保する関数mallocの使用によりメモリ領域の動的な確保が行われる。
(2)メモリ領域の動的な確保
point2=malloc(sizeof(int[3]));(1)と同じく、関数mallocの使用によりメモリ領域の動的な確保が行われる。
(3)確保したメモリ領域へのアクセス
point1[0] = 1;
(4)確保したメモリ領域へのアクセス
point2[0] = point1[0];
(5)メモリ領域の動的な解放
free(point1); メモリ領域を動的に解放する関数freeの使用によりメモリ領域の動的な解放が行われる。
(6)解放したメモリ領域へのアクセス
point1[0] = point2[0]; point1[0]は既に解放された領域にあるため、このアクセスは異常である。
このようなメモリ300に対する動作に対して、メモリ領域確保状態記録テーブル2への識別情報の書き込みおよび読み出しは、次のように行われる。
図4(a)は、メモリ領域確保状態記録テーブル2の初期状態を示す。このとき総ての識別情報は‘0’とされている。
図4(b)は、上述の(1)の動作が行われたときのメモリ領域確保状態記録テーブル2への識別情報の書き込みの様子を示す。このとき、メモリ300のアドレス0から2の領域が確保されたとすると、メモリ領域確保状態記録テーブル2のアドレス0から2の識別情報に‘1’が書き込まれる。
図4(c)は、上述の(2)の動作が行われたときのメモリ領域確保状態記録テーブル2への識別情報の書き込みの様子を示す。このとき、メモリ300のアドレス4から6の領域が確保されたとすると、メモリ領域確保状態記録テーブル2のアドレス4から6の識別情報に‘1’が書き込まれる。
図4(d)は、上述の(3)の動作が行われたときのメモリ領域確保状態記録テーブル2からの識別情報の読み出しの様子を示す。このとき、メモリ300のアドレス0にpoint1[0]が記憶されているので、メモリ領域確保状態記録テーブル2のアドレス0から識別情報‘1’が読み出される。
図4(e)は、上述の(4)の動作が行われたときのメモリ領域確保状態記録テーブル2からの識別情報の読み出しの様子を示す。このとき、メモリ300のアドレス0にpoint1[0]、アドレス4にpoint2[0]が記憶されているので、メモリ領域確保状態記録テーブル2のアドレス0から識別情報‘1’、アドレス4から識別情報‘1’が読み出される。
図4(f)は、上述の(5)の動作が行われたときのメモリ領域確保状態記録テーブル2への識別情報の書き込みの様子を示す。このとき、メモリ300のアドレス0から2の領域が解放されるので、メモリ領域確保状態記録テーブル2のアドレス0から2の識別情報に‘0’が書き込まれる。
図4(g)は、上述の(6)の動作が行われたときのメモリ領域確保状態記録テーブル2からの識別情報の読み出しの様子を示す。このとき、メモリ領域確保状態記録テーブル2のアドレス0から識別情報‘0’、アドレス4から識別情報‘1’が読み出される。ここでは、既に解放したメモリ領域であるアドレス0へのアクセスに対して、識別情報‘0’が読み出される。この識別情報‘0’がメモリ領域確保状態記録テーブル2から出力されることにより、この部分のプログラム動作におけるメモリの使用に異常があることを即座に知ることができる。
このような本実施例のメモリ異常使用検知装置によれば、プログラムのデバッグ時にメモリの異常使用が発生したことを即座に検知することができる。そのため、本実施例のメモリ異常使用検知装置をエミュレータ装置に組み込んで用いて、メモリの異常使用を検知したときに直ちにターゲットCPUを停止させるなどのことを行えば、問題解析のためのデバッグ作業を行うことができる。これにより、プログラムの開発効率の向上を図ることができる。
本発明の実施例に係るメモリ異常使用検知装置の構成の例を示すブロック図。 本発明の実施例に係るメモリ異常使用検知装置のメモリ領域確保状態記録テーブルの構成の例を示す図。 デバッグ対象のソースプログラムの例を示す図。 デバッグ中のメモリ領域確保状態記録テーブルの書き込み状態の例を示す図。
符号の説明
1 メモリ異常使用検知装置
2 メモリ領域確保状態記録テーブル
3 テーブル設定回路
4 出力制御部
31 要求レジスタ
32 先頭アドレスレジスタ
33 設定サイズレジスタ

Claims (5)

  1. 使用領域が動的に確保あるいは解放されるメモリの領域確保状態を記録するメモリ領域確保状態記録テーブルと、
    プログラムの実行に伴い動的にメモリ領域を確保あるいは解放する処理が実行されたときに、前記メモリ領域が確保状態であるか解放状態であるかを識別する識別情報を前記メモリのアドレスごとに前記メモリ領域確保状態記録テーブルに書き込むテーブル設定回路と
    を具備し、
    動的に領域を確保あるいは解放する前記メモリ領域への読み出しアクセスがあったときに、前記メモリ領域確保状態記録テーブルから前記アクセスされたアドレスの前記識別情報を読み出すことを特徴とするメモリ異常使用検知装置。
  2. 前記テーブル設定回路が、
    前記メモリ領域確保状態記録テーブルの機能停止要求および機能再開要求、ならびに領域確保状態の記録要求および領域解放状態の記録要求が書き込まれる要求レジスタと、
    前記メモリの動的に確保あるいは解放される領域の先頭アドレスが書き込まれる先頭アドレスレジスタと、
    前記メモリを動的に確保するのに必要なメモリのサイズあるいは前記メモリの動的に解放されたメモリのサイズが書き込まれる設定サイズレジスタと
    を有することを特徴とする請求項1に記載のメモリ異常使用検知装置。
  3. 前記テーブル設定回路は、前記要求レジスタに領域確保状態の記録要求あるいは領域解放状態の記録要求が書き込まれたときに、前記先頭アドレスレジスタに書き込まれたアドレスから前記設定サイズレジスタに書き込まれた範囲のアドレスに亘って、前記識別情報を前記メモリ領域確保状態記録テーブルに書き込むことを特徴とする請求項2に記載のメモリ異常使用検知装置。
  4. 前記テーブル設定回路は、前記要求レジスタに機能停止要求が書き込まれたときに前記メモリ領域確保状態記録テーブルの読み出しを禁止し、前記要求レジスタに機能再開要求が書き込まれたときに前記メモリ領域確保状態記録テーブルの読み出しを許可することを特徴とする請求項2に記載のメモリ異常使用検知装置。
  5. 前記メモリ領域確保状態記録テーブルのアドレスが、前記メモリの動的に確保あるいは解放される領域のアドレスと1対1に対応していることを特徴とする請求項1乃至3のいずれか1項に記載のメモリ異常使用検知装置。
JP2004152726A 2004-05-24 2004-05-24 メモリ異常使用検知装置 Pending JP2005338892A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004152726A JP2005338892A (ja) 2004-05-24 2004-05-24 メモリ異常使用検知装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004152726A JP2005338892A (ja) 2004-05-24 2004-05-24 メモリ異常使用検知装置

Publications (1)

Publication Number Publication Date
JP2005338892A true JP2005338892A (ja) 2005-12-08

Family

ID=35492440

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004152726A Pending JP2005338892A (ja) 2004-05-24 2004-05-24 メモリ異常使用検知装置

Country Status (1)

Country Link
JP (1) JP2005338892A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009524140A (ja) * 2006-01-17 2009-06-25 エヌエックスピー ビー ヴィ 領域保護装置、命令セット、及びメモリ領域を保護する方法
WO2010032330A1 (ja) * 2008-09-22 2010-03-25 富士通株式会社 情報処理装置及びそのメモリ保護方法
JP2015060499A (ja) * 2013-09-20 2015-03-30 富士通株式会社 演算処理装置、情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラム
JP2015162191A (ja) * 2014-02-28 2015-09-07 三菱電機株式会社 ソフトウェア試験装置及びソフトウェア試験プログラム

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009524140A (ja) * 2006-01-17 2009-06-25 エヌエックスピー ビー ヴィ 領域保護装置、命令セット、及びメモリ領域を保護する方法
WO2010032330A1 (ja) * 2008-09-22 2010-03-25 富士通株式会社 情報処理装置及びそのメモリ保護方法
JP2015060499A (ja) * 2013-09-20 2015-03-30 富士通株式会社 演算処理装置、情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラム
JP2015162191A (ja) * 2014-02-28 2015-09-07 三菱電機株式会社 ソフトウェア試験装置及びソフトウェア試験プログラム

Similar Documents

Publication Publication Date Title
KR101019209B1 (ko) 임베디드 소프트웨어의 인터페이스 자동 추출 장치 및 그방법
KR970012145A (ko) 데이타 프로세서와 그 작동 방법, 그 디버깅 작동 실행 방법 및 그 중단점 값 수정 방법
KR20110114432A (ko) 멀티스레드 프로그램에서 교착을 감지하기 위한 방법 및 시스템
JP2007257441A (ja) プロセッサおよびプロセッサ制御方法
WO2010032330A1 (ja) 情報処理装置及びそのメモリ保護方法
JP5133649B2 (ja) 電子機器およびメモリ管理プログラム
JP2005338892A (ja) メモリ異常使用検知装置
JP2009175960A (ja) 仮想マルチプロセッサシステム
US7350109B2 (en) System and method for testing a memory using DMA
US8176250B2 (en) System and method for testing a memory
JP2006293824A (ja) 半導体装置
JP2006018705A (ja) メモリアクセストレースシステムおよびメモリアクセストレース方法
JP2008140124A (ja) データ処理装置
US8090991B2 (en) Information processing apparatus, method, and computer program product for self-diagnosis for utilizing multiple diagnostic devices, each having exclusive access to a resource
JP2007140620A (ja) マイクロコンピュータ及びそのマイクロコンピュータに接続されるデバッグ装置
JP2005353020A (ja) コンピュータプログラムのシミュレーション方式
JP2002055851A (ja) コンピュータシステムにおける不正なメモリアクセスを検出する監視方法及びそのプログラム並びにその記録媒体
JPS6346466B2 (ja)
JP2009223841A (ja) 命令ログ取得プログラム及び仮想計算機システム
JP2006011692A (ja) 不正メモリアクセス検出方法、および、不正メモリアクセス検出プログラム
JP5121134B2 (ja) シミュレーション装置及びシミュレーション方法
JPH0652507B2 (ja) マイクロコンピユ−タの開発装置
JP2001051854A (ja) 情報管理システム
JPH0635747A (ja) デバッグ支援装置
JP2001134464A (ja) 情報処理方法および装置