JP2007199845A - メモリ破壊検出方法および装置 - Google Patents

メモリ破壊検出方法および装置 Download PDF

Info

Publication number
JP2007199845A
JP2007199845A JP2006015242A JP2006015242A JP2007199845A JP 2007199845 A JP2007199845 A JP 2007199845A JP 2006015242 A JP2006015242 A JP 2006015242A JP 2006015242 A JP2006015242 A JP 2006015242A JP 2007199845 A JP2007199845 A JP 2007199845A
Authority
JP
Japan
Prior art keywords
memory
program
access
execution
log information
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
JP2006015242A
Other languages
English (en)
Inventor
Hiroshi Furuyama
浩志 古山
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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co 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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2006015242A priority Critical patent/JP2007199845A/ja
Priority to PCT/JP2006/304783 priority patent/WO2007086150A1/ja
Publication of JP2007199845A publication Critical patent/JP2007199845A/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Storage Device Security (AREA)

Abstract

【課題】実行プログラムの実行速度の低下や実行プログラムのメモリ容量の増大を抑制して、メモリ破壊を検出することができる方法およびその方法を使用するメモリ破壊検出装置を提供する。
【解決手段】本発明のメモリ破壊検出方法は、メモリへのアクセスを伴って、プログラムを実行するプログラム実行工程と、プログラム実行工程においてメモリ中のいずれの領域がアクセスされたかを示すメモリアクセスログ情報を取得する、メモリアクセスログ情報取得工程と、メモリの中でアクセスが許容される、アクセス許容メモリ領域を算出する、アクセス許容メモリ領域算出工程と、プログラム実行工程の後に、メモリアクセスログ情報に基づいて、プログラム実行工程においてアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定する、判定工程と、を備える。
【選択図】図1

Description

本発明は、メモリ破壊検出方法およびその方法を使用する装置に関し、特に、許容領域外のメモリ領域がアクセスされてメモリ上に格納されたデータが破壊するのを検出する方法およびその方法を使用する装置に関する。
ソフトウェア開発において、プログラム中の配列や文字列に不正な添え字を代入してしまい、コーディングミスや論理設計ミスを起こすと、アクセス許容領域外のメモリ領域がアクセスされてしまう場合がある。メモリの許容領域外アクセスは、メモリ破壊を引き起こし、プログラム実行時に重大なエラーを発生させてしまう。また、動的に確保したメモリ領域(例えば、プログラミング言語Cにおいてmalloc関数等で確保した領域)が不正なポインタ変数で参照された場合にも、アクセス許容領域外のメモリ領域がアクセスされてしまう場合がある。この場合も上記と同様にプログラム実行時に重大なエラーを発生させてしまう。
FORTRAN等のプログラム言語では、メモリのアクセス許容領域外のアクセスを検出するための特別なプログラムがオプションとして用意されており、上記検出プログラムはコンパイル時に指定されると実行プログラムに組み込まれる。上記検出プログラムは、実行プログラムにおける配列の上限値および下限値を参照しながら、メモリのアクセス許容領域外のアクセスを検出する。具体的には、コンパイラは、プログラムユニットに含まれる配列について、配列の上限値および下限値を記載したテーブルを別途用意する。さらに、このテーブルを参照して、プログラム中でアクセスされる配列の要素がテーブルに記載された配列の上限値および下限値を超えていないかを、逐次チェックする。アクセスされた配列の要素がテーブルに記載された配列の上限値または下限値を超えていると検出された場合、すなわち、アクセス許容領域外のメモリ領域へのアクセスが検出された場合には、ユーザーに警告を出すようになっている(例えば、特許文献1参照)。
図6は、従来のメモリ破壊を検出する方法の基本的な処理の手順を示すフローを示す図である。まず、ステップS0では、プログラムコンパイル時における処理を行う。具体的には、後述のステップS4’およびステップS5’のステップを実行するためのコードを、プログラムに付加し、実行プログラムを生成する。
次に、ステップS1では、デバッグ対象である、S1で生成されたプログラムの実行を開始する。プログラム実行中、ステップS4’では、アクセスが許容されるメモリ領域の範囲を算出する。具体的には、例えば、メモリにおけるアクセス可能な配列の範囲、メモリにおけるアクセス可能な文字列の範囲、または、動的に確保されたメモリ領域の範囲を算出する。
次に、ステップS5’で、実行プログラムにおいてアクセスされた配列、文字列または、ポインタによるメモリアクセスが範囲外であるか否かを判定し、領域外アクセスが発生した場合には、エラーを警告する。ステップS3でプログラムの実行を終了する。
プログラミング言語CあるいはC++では、上記FORTRAN等のような領域外アクセスを検出するためのコードは、通常、用意されていないが、領域外アクセスを検出するためのコードを組み込むオプションを付加するよう拡張されたコンパイラが公開されている(例えば、非特許文献1参照)。
特許1708355号公報 Andrew Suffield、"Bounds checking for C and C++"、[online]、[平成18年1月23日]、インターネット〈URL:http://www.doc.ic.ac.uk/teaching/projects/Distinguished03/AndrewSuffield.pdf〉
しかしながら、特許文献1や非特許文献1に記載される従来技術では、実行プログラムに領域外アクセスを検出するためのコードを付加する必要があるので、コードサイズが増大してしまうという問題がある。例えば、あるプログラムに対してBounds checking for C and C++を適用した例では、コードサイズが非適用時と比較して7〜14倍にも増大してしまう。プログラムの実行コードを格納するメモリ容量には上限があるので、領域外アクセスを検出するコードを付加したプログラムをメモリに格納できない場合がある。
また、プログラム実行時に領域外アクセスがあるかを逐次チェックするため、プログラムの実行速度が低下してしまうという問題がある。例えば、あるプログラムに対してBounds checking for C and C++を適用した例では、プログラムの実行速度が1.2〜3.3分の1にも低下してしまう。プログラムの実行速度が低下すると、例えば、入出力を処理するプログラムを実行するケースにおいて、プログラムが実行する入出力命令と入出力装置からのデータの入出力とのタイミングが通常のプログラム実行時と相違することとなり、正常にプログラムを実行できない場合がある。また、同様な理由により、リアルタイム処理を行うプログラムでも、正常にプログラムを実行できない場合がある。
本発明は上記課題に鑑みてなされたものであり、実行プログラムの実行速度の低下や実行プログラムのメモリ容量の増大を抑制して、メモリ破壊を検出することができる方法およびその方法を使用するメモリ破壊検出装置を提供することを目的とする。
本発明の一実施形態のメモリ破壊検出方法は、メモリへのアクセスを伴って、プログラムを実行するプログラム実行工程と、前記プログラム実行工程において前記メモリ中のいずれの領域がアクセスされたかを示すメモリアクセスログ情報を取得する、メモリアクセスログ情報取得工程と、前記メモリの中でアクセスが許容される、アクセス許容メモリ領域を算出する、アクセス許容メモリ領域算出工程と、前記プログラム実行工程の後に、前記メモリアクセスログ情報に基づいて、前記プログラム実行工程においてアクセスされた前記メモリの領域が前記アクセス許容メモリ領域内であるか否かを判定する、判定工程と、を備える。このメモリ破壊検出方法では、プログラムを実行した後に、プログラム実行中にアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定するので、上記判定を行うためのプログラムを上記実行プログラムに組み込む必要がない。従って、上記判定を行うためのプログラムを上記実行プログラムに組み込む場合に比べて、実行プログラムの実行速度の低下を抑制してメモリ破壊を検出できる。また、上記判定を行うためのプログラムを上記実行プログラムに組み込む場合に比べて、実行プログラムのメモリ容量が大きくなるのを抑制してメモリ破壊を検出できる。
前記プログラムの実行経過を示すトレース情報情報を取得するトレース情報取得工程を更に備え、前記アクセス許容メモリ領域算出工程は、前記トレース情報を用いて前記アクセス許容メモリ領域を算出する工程を含むことが好ましい。メモリアクセスログ情報に加えてトレース情報を用いれば、より確実にアクセス許容メモリ領域を算出できる。
前記メモリアクセスログ情報および前記トレース情報は、それぞれ、時刻情報を含み、前記アクセス許容メモリ領域算出工程は、前記メモリアクセスログ情報に含まれる前記時刻情報と、前記トレース情報に含まれる前記時刻情報とを関連付けて、前記メモリアクセスログ情報と前記トレース情報とを同期させる工程を含むことが好ましい。メモリアクセスログ情報とトレース情報とを同期させることができれば、より確実にアクセス許容メモリ領域を算出できる。
第1の装置を用いて前記プログラム実行工程および前記メモリアクセスログ情報取得工程が行われ、かつ、第2の装置を用いて前記判定工程が行われ、前記判定工程で用いる前記メモリアクセスログ情報は、前記第1の装置から前記第2の装置に転送されたものであってもよい。プログラム実行工程およびメモリアクセスログ情報取得工程を行う装置から、判定工程を行う装置に、メモリアクセスログ情報を転送すれば、プログラム実行工程およびメモリアクセスログ情報取得工程を行う装置と、判定工程を行う装置とを異なる装置で行うことができるので、プログラム実行工程およびメモリアクセスログ情報取得工程を行う装置から遠隔した場所で、上記装置のメモリ破壊を検出できる。
前記プログラム実行工程は、前記プログラムの実行中に発生したエラーの検出を行うエラー検出工程を含んでもよい。これにより、例えば、エラーが検出された場合にのみ、選択的に、本発明のメモリ破壊検出方法を実行することができる。
本発明の一実施形態のメモリ破壊検出装置は、上記に記載のメモリ破壊検出方法を使用する。
本発明のメモリ破壊検出方法およびこの方法を使用するメモリ破壊検出装置では、プログラムを実行した後に、プログラム実行中にアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定するので、上記判定を行うためのプログラムを上記実行プログラムに組み込む必要がない。従って、上記判定を行うためのプログラムを上記実行プログラムに組み込む場合に比べて、実行プログラムの実行速度の低下を抑制してメモリ破壊を検出できる。また、上記判定を行うためのプログラムを上記実行プログラムに組み込む場合に比べて、実行プログラムのメモリ容量が大きくなるのを抑制してメモリ破壊を検出できる。
本発明の実施形態のメモリ破壊検出方法は、メモリへのアクセスを伴って、プログラムを実行するプログラム実行工程と、プログラム実行工程においてメモリ中のいずれの領域がアクセスされたかを示すメモリアクセスログ情報を取得するメモリアクセスログ情報取得工程と、メモリの中でアクセスが許容される、アクセス許容メモリ領域を算出する、アクセス許容メモリ領域算出工程とを有し、さらに、上記プログラム実行工程の後に、メモリアクセスログ情報に基づいて、プログラム実行工程においてアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定する判定工程を有している。
図6を参照して説明した従来技術では、プログラム実行中にアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定する判定を行うためのプログラムを実行プログラムに組み込み、プログラムを実行しながら、逐次、プログラム実行中にアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定していた。上記判定を行うためのプログラムを実行プログラムに組み込んでいたために、実行プログラムのメモリサイズが増大してしまうという問題があった。また、プログラムを実行しながら、逐次、上記判定を行っていたために、プログラムの実行速度が低下してしまうという問題があった。
これに対して本発明の実施形態のメモリ破壊検出方法では、プログラムを実行した後に、プログラム実行中にアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定するので、上記判定を行うためのプログラムを上記実行プログラムに組み込む必要がない。従って、従来よりも、実行プログラムの実行速度の低下を抑制してメモリ破壊を検出できる。また、実行プログラムのメモリ容量が大きくなるのを抑制してメモリ破壊を検出できる。なお、メモリ破壊とは、メモリ上に格納されたデータが破壊することを意味する。
本発明の実施形態のメモリ破壊検出方法は、プログラムの実行経過を示すトレース情報を取得するトレース情報取得工程を更に備え、アクセス許容メモリ領域算出工程が、トレース情報を用いてアクセス許容メモリ領域を算出する工程を含むことが好ましい。ここで、トレース情報とは、プログラムのコードなどがプログラムの実行順に示されるものであり、トレース情報を用いればプログラムの実行経過を解析することができる。本発明の実施形態のメモリ破壊検出方法は、前述の特許文献1あるいは非特許文献1に記載される従来技術とは異なり、プログラム実行工程の後に、プログラム実行工程中にアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定を行う。アクセス許容か否かは実行プログラムの状態遷移に依存するケースもあるという理由から、アクセス許容メモリ領域を算出する際、メモリアクセスログ情報に加えてトレース情報を用いれば、より確実にアクセス許容メモリ領域を算出することが可能となる。
典型的には、メモリアクセスログ情報およびトレース情報はいずれも時刻情報を含んでいる。時刻情報を含むメモリアクセスログ情報は、プログラムを実行するためにメモリ中のどの領域がいつアクセスされたかを示す。また、時刻情報を含むトレース情報は、実行プログラムのどのコードがいつ実行されたかを示す。アクセス許容メモリ領域算出工程において、メモリアクセスログ情報に含まれる時刻情報と、トレース情報に含まれる時刻情報とを関連付けて、メモリアクセスログ情報とトレース情報とを同期させることができる。これにより、メモリアクセスログ情報とトレース情報とのタイミングを合わせることができ、より確実に精度良くアクセス許容メモリ領域を算出できる。
プログラム実行工程およびメモリアクセスログ情報取得工程を行う装置(第1の装置)から、判定工程を行う装置(第2の装置)に、メモリアクセスログ情報を転送すれば、第1の装置と、第2の装置とを異なる装置で行うことができる。転送方法は特に限定されない。例えば、メモリカードなどの記憶媒体を用いてもよいし、ネットワークを用いても良い。第1の装置と、第2の装置とを異なる装置で行うことにより、第1の装置から遠隔した場所で、第1の装置のメモリ破壊を検出できる。
プログラム実行工程は、プログラムの実行中に発生した、セグメンテーションフォルトなどのエラーの検出を行うエラー検出工程を含むことが好ましい。これにより、例えば、第1の装置と、第2の装置とを異なる装置で行った場合に、第1の装置がエラーを検出したことをトリガとして、第2の装置が本発明のメモリ破壊検出方法を実行することができる。
本発明の実施形態のメモリ破壊検出方法を使用する装置は、典型的には、デバッグ対象のプログラムを実行する組み込み装置に、物理的にまたは電気的に接続される。組み込み装置は、例えば、携帯電話端末、ディジタルTV、DVDレコーダー、またはセットトップボックス等である。
以下、図面を参照しながら、本発明の実施形態のメモリ破壊検出方法およびその方法を使用する装置をより具体的に説明する。
(第1の実施形態)
図1は、本発明の第1の実施形態のメモリ破壊検出方法を説明するためのフローチャートであり、図2はその検出方法を使用するメモリ破壊検出装置を説明するためのブロック図である。
図2に示すように、メモリ破壊検出装置2は、デバッグ対象のプログラムを実行する組み込み装置1に接続される。以下、本実施形態のメモリ破壊検出方法を説明する。
まず、図1のステップS1において、組み込み装置1のCPU10が、メモリ13に記憶されているデバッグ対象のプログラムの実行を開始させる。
ステップS3においてプログラムの実行が終了するまでの間、すなわちプログラム実行中に、ステップS2において、メモリ破壊検出装置2のトレーサー21はコードトレース情報を収集し、メモリアクセスロガー23はメモリアクセスログ情報を収集する。なお、コードトレース情報の収集は必ずしも必要でないため、必要に応じて行えばよい。
ステップS3のプログラム実行終了後、ステップS4において、メモリ破壊検出装置2の判定部30は、アクセスが許容されたメモリ領域の範囲を算出する。具体的には、例えば、アクセス可能な配列の範囲、アクセス可能な文字列の範囲、または、動的に確保されたメモリ領域の範囲を算出する。
ステップS5において、メモリ破壊検出装置2の判定部30は、実行プログラムにおける配列、またはポインタによるメモリアクセスが、S4で算出したアクセス許容メモリ領域の範囲外であるか否かを判定する。領域外アクセスが発生した場合には、エラーを警告する。
以上、本実施形態のメモリ破壊検出方法では、デバッグ対象のプログラムを実行した後に、領域外アクセスを判定する処理を行うので、領域外アクセスを検出するコードをユーザープログラムに組み込むことなく、領域外アクセスを検出することが可能となる。
以下、本実施形態のメモリ破壊検出方法を使用するための装置2を説明する。
図2に示すように、メモリ破壊検出装置2は、デバッグ対象のプログラムを実行する組み込み装置1に接続される。組み込み装置1はトレースインタフェース16(以下、インタフェースをI/Fと略す)を有し、メモリ破壊検出装置2はトレースI/F27を有する。また、組み込み装置1はバスI/F15を有し、メモリ破壊検出装置2はバスI/F26を有する。メモリ破壊検出装置2と組み込み装置1とは、トレースI/F16とトレースI/F27との接続およびバスI/F15とバスI/F26との接続によって接続されている。
組み込み装置1は、デバッグ対象のプログラムを実行するCPU10、上記プログラムが記憶されたメモリ13、I/O14を有する。CPU10、メモリ13、I/O14、およびバスI/F15は、アドレス・データバス12により、それぞれ接続されている。CPU10は、コードトレース情報を出力するトレースポート11を備え、トレースポート11はトレースI/F16に接続されている。
コードトレース情報とは、CPU10で実行しているプログラムのコードが実行順に、所定のフォーマットで出力されるものであり、プログラムの実行の経過を順にトレースして、解析するための情報である。たとえば、組み込み機器向けのプロセッサとして一般的に使用されているARM社のCPUでは、ETM(Embedded Trace Macrocell)として規格化されており、CPUにおいて分岐命令を実行すると、実行した分岐命令と分岐先の命令が格納されたアドレス情報を、実行時刻を示すタイムスタンプとともに出力する。通常、CPUでは、実行プログラム中で配置された順に命令コードを実行し、分岐命令を実行したときにのみ分岐先アドレスにジャンプするので、プログラム実行中に出力されたETMデータをトレースメモリに蓄積しておけば、プログラム実行における全命令の実行の経過をトレースすることが可能となる。
メモリ破壊検出装置2は、ETM等のトレース情報を蓄積するためのトレースメモリ22を備える。メモリ破壊検出装置2は、さらに、ETMデータを解析し、プログラム実行の経過をトレースするトレーサー21と、メモリアクセスのログ情報を記録するメモリアクセスロガー23と、プログラムのソースコードと、シンボルのアドレス情報や、命令コードのロードアドレス情報などを含むデバッグ情報を蓄積する、ソースコード・デバッグ情報蓄積部31と、デバッグフローを制御して、領域外アクセスを判定する判定部30とを有する。トレーサー21はトレースI/F27に接続される。また、メモリアクセスロガー23は、トレースI/F27およびバスI/F26にそれぞれ接続される。判定部30は、トレーサー21、メモリアクセスロガー23、およびソースコード・デバッグ情報蓄積部31にそれぞれ接続される。
メモリアクセスロガー23は、デコーダー24および記録部25を有する。メモリアクセスロガー23は、バスI/F26からアドレス・データバスの信号が入力されると、この信号をデコーダー24でデコードする。メモリアクセスロガー23はさらに、メモリアクセスが発生したときのメモリのアドレスおよびデータを、後述のタイムスタンプ(時刻情報)とアドレス・データの種別を識別するための識別子とともに記録部25に記録する。デコーダー24は、トレースI/F27から出力されるETMデータからタイムスタンプを抽出し、記録部25に記録する。この記録部25に記録されたメモリアクセスログ情報のタイムスタンプと、トレースメモリ22に記録されたトレース情報のタイムスタンプとを比較すれば、コードの実行とメモリアクセスのタイミングとを同期させることができる。
図5は、記録部25が記録するメモリアクセスログ情報の例を示す。図5中の識別子は、後続のログ情報がタイムスタンプであるか、または、メモリアクセスログ情報(アクセスしたメモリのアドレス情報とデータ値とのペア)であるかを識別するための符号である。
上記に説明したメモリ破壊検出装置2は、図1で示したステップS1からステップS5に該当する工程を実施する。
図1に示すように、デバッグ対象のプログラムの実行開始(ステップS1)から実行終了(ステップS3)までのの間に、トレーサー21はトレース情報を収集し、トレースメモリ22に記録し、メモリアクセスロガー23はメモリアクセスログ情報を収集し、記録部25に記録する(ステップS2)。
プログラム実行終了(ステップS3)後、判定部30は、トレースメモリ22に蓄積されたトレース情報をもとに、プログラムの実行の経過をトレースし、アクセス可能な配列または文字列の範囲、あるいは動的に確保したメモリ領域の範囲を算出する(ステップS4)。次に、プログラム実行の経過をトレースして、メモリアクセス命令実行時にアクセスしたメモリのアドレスとデータを記録部25に蓄積されたメモリアクセスログより参照し、該当アドレスが、アクセス許容領域内であるか否かを判定する。アクセス許容領域外であれば、領域外アクセスとしてエラーを出力する。判定部30において、シンボルのアドレス情報や、命令コードのロードアドレス情報などを含むデバッグ情報を参照して、プログラムソースにおける当該エラーの発生箇所を表示することも可能である。
以上、説明したように、本実施形態によると、領域外アクセスを検出するためのコードをユーザープログラムに組み込むことなく実行して、領域外アクセスの検出を行うことが可能となる。
(第2の実施形態)
図4は、第2の実施形態のメモリ破壊検出方法を説明するためのフローチャートであり、図5は、この方法を使用する装置を説明するためのブロック図である。図5では、図2に示した構成要素と同様の機能を有する構成要素には同じ参照符号を付しており、以下、その詳細な説明は省略する。
図5のメモリ破壊検出装置2Aの基本的な構成は、図2のメモリ破壊検出装置2と同じである。
図2のメモリ破壊検出装置2の場合と異なり、図5のメモリ破壊検出装置2Aでは、トレーサー21およびメモリアクセスロガー23を組み込み装置1に実装している。また、組み込み装置1Aとメモリ破壊検出装置2Aとは、組み込み装置1Aの二次記憶装置28、およびメモリ破壊検出装置2Aの二次記憶装置29を介して接続される。二次記憶装置28、29は、例えばメモリカードなどの着脱可能な記憶装置で構成される。
また、メモリ破壊検出装置2Aは、プログラム実行エラー検出部32を有する。プログラム実行エラー検出部32は、セグメンテーションフォルト等、プログラム(=OS(Operating System)が管理しているプロセス)に割り当てられたメモリ領域(セグメント)外にアクセスするとエラーを検出する。セグメンテーションフォルトは、配列等のアクセス許容メモリ領域外エラーが要因となって発生する場合や、スタック破壊等、またその他の要因によって発生する場合がある。また、配列等のアクセス許容メモリ領域外エラーがセグメンテーションフォルトの発生要因となる場合においても、配列等のアクセス許容メモリ領域外エラーにより直接生じる場合と、アクセス許容メモリ領域外エラーの発生から二次的に生じる場合(配列等のアクセス許容メモリ領域外エラーの発生により、ポインタ変数を破壊し、そのポインタ変数を参照することにより不正なメモリアクセスとなる場合等)とがある。このようなことから、セグメンテーションフォルト等ではエラーの発生を検出すること可能であるが、プログラムにおけるエラー発生個所を特定することは通常、容易ではない。
上記に説明したメモリ破壊検出装置2Aは、図4に示したステップS1、S2、S6、S7およびステップS3、S4、S5に該当する工程を実施する。
図4に示すように、デバッグ対象のプログラムの実行開始(ステップS1)から実行終了(ステップS3)までの間に、トレーサー21はトレース情報を収集し、トレースメモリ22に記録し、メモリアクセスロガー23はメモリアクセスログ情報を収集し、記録部25に記録する(ステップS2)。また、ステップS6において、プログラムの実行中にプログラム実行エラー検出部32は、例えばセグメンテーションフォルトなどのエラーを検出する(ステップS6)。
ステップS6でエラーを検出すると、このエラー検出をトリガとして、エラー処理を行うプログラムが起動し、CPU10はトレースメモリ22に記録されたトレース情報および記録部25に記録されたメモリアクセスログ情報を、二次記録装置28(例えばメモリカード)に転送し、記録する(ステップS7)。
次に、二次記憶装置28に記録されたトレースログ情報およびメモリアクセスログ情報を、メモリ破壊検出装置2Aの二次記録装置29(例えばメモリカード)に移動させる。プログラム実行終了(ステップS3)後、図1に記載したステップS4およびステップS5と同様の処理を行い、領域外アクセスが発生したプログラムの該当ヶ所の検出を行う。
組み込み装置1A内で記録されたトレース情報およびメモリアクセスログ情報は、ネットワーク等を介して、組み込み装置1Aから遠隔した場所に設置されたメモリ破壊検出装置2Aに転送されてもよい。
以上、説明したように、本実施の形態では、組み込み装置1Aからメモリ破壊検出装置2Aに、メモリアクセスログ情報およびトレース情報を転送するので、組み込み装置1Aの設置場所から離れた場所で組み込み装置1Aのメモリ破壊を検出できる。具体的には、例えば、携帯電話端末等の組み込み装置を製品としてエンドユーザーに出荷後に、メモリ破壊による不具合が生じた際においても、リモートでメモリ破壊の検出を実施できる。また、組み込み装置1Aが、プログラムの実行中に発生したセグメンテーションフォルトなどのエラーの検出を行うので、このエラー検出をトリガとして、メモリ破壊の検出方法を実行することができる。
本発明は、携帯電話端末、ディジタルTV、DVDレコーダー、およびセットトップボックス等の組み込み装置で動作するソフトウェアを開発する上でのデバッグシステムとして有用である。
本発明の第1の実施形態のメモリ破壊検出方法を説明するためのフローチャート。 本発明の第1の実施形態のメモリ破壊検出方法を使用する装置を説明するための模式図。 本発明の第1の実施形態のメモリ破壊検出方法に用いるメモリアクセスログの一例を示す図。 本発明の第2の実施形態のメモリ破壊検出方法を説明するためのフローチャート。 本発明の第2の実施形態のメモリ破壊検出方法を使用する装置を説明するための模式図。 従来のメモリ破壊検出方法を説明するためのフローチャート。
符号の説明
1 組み込み装置
2 メモリ破壊検出装置
10 CPU
11 トレースポート
12 アドレス・データバス
13 メモリ
14 I/O
15 バスI/F
21 トレーサー
22 トレースメモリ
23 メモリアクセスロガー
24 デコーダー
25 記録部
26 バスI/F
27 トレースI/F
28 二次記憶装置
29 第二の二次記憶装置
30 判定部
31 ソースコード・デバッグ情報蓄積部
32 プログラム実行エラー検出部

Claims (6)

  1. メモリへのアクセスを伴って、プログラムを実行するプログラム実行工程と、
    前記プログラム実行工程において前記メモリ中のいずれの領域がアクセスされたかを示すメモリアクセスログ情報を取得する、メモリアクセスログ情報取得工程と、
    前記メモリの中でアクセスが許容される、アクセス許容メモリ領域を算出する、アクセス許容メモリ領域算出工程と、
    前記プログラム実行工程の後に、前記メモリアクセスログ情報に基づいて、前記プログラム実行工程においてアクセスされた前記メモリの領域が前記アクセス許容メモリ領域内であるか否かを判定する、判定工程と、を備える、メモリ破壊検出方法。
  2. 前記プログラムの実行経過を示すトレース情報情報を取得するトレース情報取得工程を更に備え、
    前記アクセス許容メモリ領域算出工程は、前記トレース情報を用いて前記アクセス許容メモリ領域を算出する工程を含む、請求項1に記載のメモリ破壊検出方法。
  3. 前記メモリアクセスログ情報および前記トレース情報は、それぞれ、時刻情報を含み、
    前記アクセス許容メモリ領域算出工程は、前記メモリアクセスログ情報に含まれる前記時刻情報と、前記トレース情報に含まれる前記時刻情報とを関連付けて、前記メモリアクセスログ情報と前記トレース情報とを同期させる工程を含む、請求項1または2に記載のメモリ破壊検出方法。
  4. 第1の装置を用いて前記プログラム実行工程および前記メモリアクセスログ情報取得工程が行われ、かつ、第2の装置を用いて前記判定工程が行われ、
    前記判定工程で用いる前記メモリアクセスログ情報は、前記第1の装置から前記第2の装置に転送されたものである、請求項1から3のいずれかに記載のメモリ破壊検出方法。
  5. 前記プログラム実行工程は、前記プログラムの実行中に発生したエラーの検出を行うエラー検出工程を含む、請求項1から4のいずれかに記載のメモリ破壊検出方法。
  6. 請求項1から5のいずれかに記載のメモリ破壊検出方法を使用する、メモリ破壊検出装置。
JP2006015242A 2006-01-24 2006-01-24 メモリ破壊検出方法および装置 Withdrawn JP2007199845A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2006015242A JP2007199845A (ja) 2006-01-24 2006-01-24 メモリ破壊検出方法および装置
PCT/JP2006/304783 WO2007086150A1 (ja) 2006-01-24 2006-03-10 メモリ破壊検出方法および装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006015242A JP2007199845A (ja) 2006-01-24 2006-01-24 メモリ破壊検出方法および装置

Publications (1)

Publication Number Publication Date
JP2007199845A true JP2007199845A (ja) 2007-08-09

Family

ID=38308959

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006015242A Withdrawn JP2007199845A (ja) 2006-01-24 2006-01-24 メモリ破壊検出方法および装置

Country Status (2)

Country Link
JP (1) JP2007199845A (ja)
WO (1) WO2007086150A1 (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009075116A1 (ja) * 2007-12-12 2009-06-18 Nec Corporation プログラムデバッグ方法、プログラム変換方法及びそれを用いるプログラムデバッグ装置、プログラム変換装置並びに記憶媒体
JP2011197952A (ja) * 2010-03-18 2011-10-06 Ricoh Co Ltd 情報処理装置、画像形成装置及び情報処理プログラム
JP2013196241A (ja) * 2012-03-19 2013-09-30 Fujitsu Ltd 情報処理装置およびログ取得方法
JP2014235707A (ja) * 2013-06-05 2014-12-15 株式会社リコー 情報処理装置、機器、情報処理システム、情報処理方法、及び情報処理プログラム
US9703622B2 (en) 2013-06-18 2017-07-11 Nxp Usa, Inc. Detection of data corruption in a data processing device
US10445168B2 (en) 2013-06-18 2019-10-15 Nxp Usa, Inc. Device and method for executing a program, and method for storing a program
US20220214958A1 (en) * 2019-05-23 2022-07-07 Connectfree Corporation Programming assist system and programming assist method
US11416372B2 (en) 2020-03-23 2022-08-16 Kioxia Corporation Storage device and method of controlling storage device

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6472245A (en) * 1987-09-11 1989-03-17 Nec Corp System for collecting trouble information
JPH0359731A (ja) * 1989-07-28 1991-03-14 Nec Corp デバッグ装置
JPH05100898A (ja) * 1991-10-04 1993-04-23 Hitachi Software Eng Co Ltd プログラムデバツグ方式
JP2002318712A (ja) * 2001-04-20 2002-10-31 Matsushita Electric Ind Co Ltd プログラム実行履歴解析方法
JP2005128692A (ja) * 2003-10-22 2005-05-19 Matsushita Electric Ind Co Ltd シミュレータ及びシミュレーション方法
JP2005222446A (ja) * 2004-02-09 2005-08-18 Matsushita Electric Ind Co Ltd オンボードデバッグ装置および半導体回路装置

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009075116A1 (ja) * 2007-12-12 2009-06-18 Nec Corporation プログラムデバッグ方法、プログラム変換方法及びそれを用いるプログラムデバッグ装置、プログラム変換装置並びに記憶媒体
US8468500B2 (en) 2007-12-12 2013-06-18 Nec Corporation Program debugging method and program transformation method, program debugging device and program transformation device using the same, and storage medium
JP5333232B2 (ja) * 2007-12-12 2013-11-06 日本電気株式会社 プログラムデバッグ方法、プログラム変換方法及びそれを用いるプログラムデバッグ装置、プログラム変換装置並びにデバッグ用プログラム
JP2011197952A (ja) * 2010-03-18 2011-10-06 Ricoh Co Ltd 情報処理装置、画像形成装置及び情報処理プログラム
US8874959B2 (en) 2010-03-18 2014-10-28 Ricoh Company, Limited Information processing apparatus, image forming apparatus, and information processing program
JP2013196241A (ja) * 2012-03-19 2013-09-30 Fujitsu Ltd 情報処理装置およびログ取得方法
JP2014235707A (ja) * 2013-06-05 2014-12-15 株式会社リコー 情報処理装置、機器、情報処理システム、情報処理方法、及び情報処理プログラム
US9703622B2 (en) 2013-06-18 2017-07-11 Nxp Usa, Inc. Detection of data corruption in a data processing device
US10445168B2 (en) 2013-06-18 2019-10-15 Nxp Usa, Inc. Device and method for executing a program, and method for storing a program
US20220214958A1 (en) * 2019-05-23 2022-07-07 Connectfree Corporation Programming assist system and programming assist method
US11416372B2 (en) 2020-03-23 2022-08-16 Kioxia Corporation Storage device and method of controlling storage device

Also Published As

Publication number Publication date
WO2007086150A1 (ja) 2007-08-02

Similar Documents

Publication Publication Date Title
JP2007199845A (ja) メモリ破壊検出方法および装置
KR100868762B1 (ko) 임베디드용 소프트웨어의 오류 검출 방법
TWI470420B (zh) 除錯方法及電腦系統
CN110704304B (zh) 一种应用程序测试方法、装置、存储介质和服务器
US20100251220A1 (en) Method and apparatus for dynamically instrumenting a program
CN103257919B (zh) 脚本程序检查方法和装置
US8930761B2 (en) Test case result processing
JP5303795B2 (ja) アプリケーションの解析方法、解析システム及び解析プログラム
US20080126905A1 (en) Memory control device, computer system and data reproducing and recording device
CN104091616A (zh) 机顶盒内置flash芯片数据一致性检测方法
JP2009140155A (ja) アプリケーションプログラムのテストプログラム
KR101449231B1 (ko) 어드레스 변환 검사 장치, 중앙 처리 연산 장치, 및 어드레스 변환 검사 방법
CN103365772B (zh) 软件测试自动评价装置以及方法
US20120110383A1 (en) Method and apparatus for off-line analyzing crashed programs
JP2011145824A (ja) 情報処理装置、障害解析方法及び障害解析プログラム
WO2012067034A1 (ja) 設計・開発支援システム
JP2005339204A (ja) 情報処理装置およびプログラムのテスト方法
JP2009223714A (ja) 演算回路及び演算回路の異常解析方法
CN112363875B (zh) 一种系统缺陷检测方法、设备、电子设备和存储介质
JP5384136B2 (ja) 障害解析支援システム
JP4806577B2 (ja) トレースデータ記録装置
JP2004101203A (ja) ロジックlsiの不良解析システム及び不良解析方法
JP2017167615A (ja) ログ取得装置、演算装置、プロセッサ、処理方法、プログラム
KR100854823B1 (ko) 영상표시기기의 에러 검출장치 및 방법
US20080195896A1 (en) Apparratus and method for universal programmable error detection and real time error detection

Legal Events

Date Code Title Description
RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20071113

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20071120

A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20090407