Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JPH0731617B2 - プログラム暴走検知方法 - Google Patents
[go: Go Back, main page]

JPH0731617B2 - プログラム暴走検知方法 - Google Patents

プログラム暴走検知方法

Info

Publication number
JPH0731617B2
JPH0731617B2 JP1125784A JP12578489A JPH0731617B2 JP H0731617 B2 JPH0731617 B2 JP H0731617B2 JP 1125784 A JP1125784 A JP 1125784A JP 12578489 A JP12578489 A JP 12578489A JP H0731617 B2 JPH0731617 B2 JP H0731617B2
Authority
JP
Japan
Prior art keywords
program
return address
stack
subroutine
return
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.)
Expired - Lifetime
Application number
JP1125784A
Other languages
English (en)
Other versions
JPH02304635A (ja
Inventor
一佐武 堺
Original Assignee
株式会社ピーエフユー
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 株式会社ピーエフユー filed Critical 株式会社ピーエフユー
Priority to JP1125784A priority Critical patent/JPH0731617B2/ja
Publication of JPH02304635A publication Critical patent/JPH02304635A/ja
Publication of JPH0731617B2 publication Critical patent/JPH0731617B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

  • Executing Machine-Instructions (AREA)
  • Debugging And Monitoring (AREA)

Description

【発明の詳細な説明】 〔概要〕 計算機システムにおいて、メインルーチンとサブルーチ
ンあるいはサブルーチンとサブルーチンなどの間の連係
処理を行う際のプログラム暴走の検知方法に関し, 呼び出し先のプログラムから呼び出し元のプログラムへ
のリターンアドレスの正当性をチェックする手段を設け
ることによって,プログラム暴走の早期検知を可能に
し,またプログラム暴走による被害を最小限に抑制する
ことを目的とし, 実行中のプログラムから他のプログラムを呼び出す際リ
ターンアドレス等をスタックに退避して管理し,複数の
プログラムの間の連係処理を行う計算機システムにおい
て,呼び出されたプログラムは,上記スタックからリタ
ーンアドレスを読み出してメモリの所定の領域に複写し
てから本来の処理を実行し,その本来の処理終了後に上
記スタックから再びリターンアドレスを読み出して,こ
れを上記メモリの所定の領域に複写してあるリターンア
ドレスと比較し,不一致の場合にはプログラムの暴走と
判定する構成をもつ。
〔産業上の利用分野〕
本発明は,計算機システムにおいて,メインルーチンと
サブルーチンあるいはサブルーチンとサブルーチンなど
の間の連係処理を行う際のプログラム暴走の検知方法に
関する。
〔従来の技術〕
第4図(a)に,プログラムの連係処理の1例を示す。
図示された例は,メインルーチンAが処理中にサブルー
チンBを呼び出し,またサブルーチンBはその処理にお
いてさらにサブルーチンCを呼び出すものである。
これらのサブルーチンの呼び出しを行う場合には,呼び
出し時に復帰情報の退避が行われる。復帰情報にはリタ
ーンアドレスやレジスタ情報などが含まれ,呼び出しの
サブルーチンにおいて処理を終了したとき,先に退避し
た復帰情報を取り出して,それに基づき呼び出し元のメ
インルーチンあるいはサブルーチンの処理を再開する。
第4図(a)に示されている連係処理のように,サブル
ーチンの呼び出しが多重に行われる場合,退避される復
帰情報も多重になるので,その退避,復元の制御を迅速
に行う必要がある。従来はこれらの復帰情報の管理を,
第4図(b)に示すようなスタックおよびスタックポイ
ンタを用いてOSの制御のもとで行っている。このスタッ
クは後入れ先出し法で構成されている。
第4図(b)において,はメインルーチンAの実行中
のスタックの状態であり,空となっている。はメイン
ルーチンAがサブルーチンBを呼び出したときのスタッ
クの状態であり,“A"は退避されたメインルーチンAの
復帰情報を示す。はサブルーチンBがサブルーチンC
を呼び出したときのスタックの状態であり,“B"は退避
されたサブルーチンBへの復帰情報を示す。はサブル
ーチンCからサブルーチンBへ復帰するときのスタック
の状態であり,スタックから“B"が取り出されて用いら
れる。そしてはサブルーチンBからメインルーチンA
へ復帰するときのスタックの状態であり,スタックから
“A"が取り出されて用いられる。
〔発明が解決しようとする課題〕
従来の計算機システムでは,プログラムの連係処理にお
いて,プログラムミスによりプログラムが暴走してスタ
ックのポインタがずれたり,スタックの値が破壊される
ことがあり,この状態で呼び出し先のプログラムからリ
ターン命令を実行すると,呼び出し先のプログラムから
呼び出し元のプログラムへ誤った復帰が行われ,プログ
ラムの暴走によるメモリの内容破壊等の被害を拡大する
とともに,バグの発見を困難にした。
本発明は,プログラム連係処理において,呼び出し先の
プログラムから呼び出し元のプログラムへのリターンア
ドレスの正当性をチェックする手段を設けることによっ
て、プログラム暴走の早期検知を可能にし,またプログ
ラム暴走による被害を最小限に抑制することを目的とし
ている。
〔課題を解決するための手段〕
本発明は,プログラムの呼び出しが行われたとき,呼び
出し先のプログラムがスタックに退避されているリター
ンアドレスをメモリに複写しておき,処理終了時に,ス
タックから取り出したリターンアドレスを,メモリに複
写してあるアドレスと比較し,両者が一致した場合にス
タックのリターンアドレスを正当なものと判定し,また
両者が不一致の場合には暴走と認識するようにしたもの
である。
第1図は本発明の原理図である。
図において, 1は,メインルーチンあるいはサブルーチンなどの呼び
出し元プログラムである。
2は,サブルーチンなどの呼び出し先プログラムであ
る。
2a,2b,2cは,呼び出し先プログラム2の構成部分であ
り,2aはプログラムの先頭部分に置かれるリターンアド
レス複写処理,2bは本来の処理,2cはリターン命令の直前
に置かれるリターンアドレス正当性チェック処理であ
る。
3は,リターンアドレスを退避するスタックである。
4は,メモリのリターンアドレス複写領域である。
呼び出し先のプログラム2のリターンアドレス複写処理
では,スタック3に退避されたリターンアドレスを一旦
取り出して,メモリのリターンアドレス複写領域4に複
写し,スタック3には再びリターンアドレスを積み戻
す。
リターンアドレス正当性チェック処理では,スタック3
から取り出したリターンアドレスを,リターンアドレス
複写領域4に複写されているリターンアドレスと比較
し,スタックのリターンアドレスの正当性を判断する。
一致の場合は正当として,呼び出し元プログラム1への
復帰を実行し,不一致の場合はリターンアドレスのエラ
ーとしてプログラムの暴走状態にあるものと認識し,プ
ログラムの停止とエラー処理ルーチンによるエラー処理
等を行わせる。
〔作用〕
プログラム呼び出しによる処理中,何らかのプログラム
はバグによりプログラムが暴走して,スタックポインタ
がずれたりスタックの内容が破壊されると,リターンア
ドレスが変化する。本発明はこれを呼び出し先プログラ
ムの処理開始時に複写したリターンアドレスを用いて正
当性をチェックすることにより簡単に検出することがで
きる。
プログラム呼び出しが多重に行われる場合には,それぞ
れの呼び出し先のプログラムにおいて,このリターンア
ドレスの正当性をチェックする処理を行う。
〔実施例〕 第2図は本発明の1実施例による計算機システムの構成
図であり,本発明に関連する要素のみを簡単化して示し
たものである。
図において,5はCPU,6はレジスタ〔R1〕,7はスタックポ
インタ,8はスタック領域のあるメモリ〔1〕,9はデータ
格納領域のあるメモリ〔2〕,10はリターンアドレス複
写領域〔M1〕である。
第3図は本発明の1実施例によるメインルーチン11とサ
ブルーチン12の連係プログラムのフローを示したもので
ある。これらは第2図の計算機システムのもとで実行さ
れる。以下にその動作を説明する。
メインルーチン11は処理Aとサブルーチンコールによる
処理と,処理Bとにより構成されている。
サブルーチンコールが発行されると,図示されていない
OSは,スタックポインタ7によりポイントされるメモリ
〔1〕のスタック領域にリターンアドレスを退避し,サ
ブルーチン12を起動する。サブルーチンには,次のな
いしのステップを実行する。
.サブルーチン12は,まず命令POP R1を実行する。こ
の命令は,スタックから最上部のリターンアドレスをポ
ップアップしてレジスタ〔R1〕に格納する。
.次にサブルーチン12は,命令PUSH R1を実行する。
この命令は,レジスタ〔R1〕のリターンアドレスをスタ
ックにプッシュし,積み戻す。このときレジスタ〔R1〕
には先のリターンアドレスが残されている。
.次にレジスタ〔R1〕のリターンアドレスをリターン
アドレス複写領域〔M1〕に格納する。
.サブルーチン12は,本来の処理Cを実行する。
.処理Cの終了後,命令POP R1を実行し,スタックか
らリターンアドレスをポップアップしレジスタ〔R1〕に
格納する。
.続いて命令PUSH R1を実行し,リターンアドレスを
スタックに積み戻す。
.レジスタ〔R1〕の内容とリターンアドレス複写領域
〔M1〕の内容とを比較する。
.の比較でR1=M1であれば,図示省略されているリ
ターン命令を実行し,スタックのリターンアドレスを用
いてOSにより復帰制御が行われる。
.の比較でR1≠M1であればプログラムを停止する。
メインルーチン11への復帰が行われた場合には,リター
ンアドレスから処理Bが実行される。
〔発明の効果〕
本発明によれば,複数のプログラムの連係処理におい
て,プログラムの暴走検出処理に関してプログラムの独
立性を保有したまま,比較的簡単な処理でプログラム中
のバグの発見を早期に行うことができ,またバグを含む
プログラムの特定が容易となりバグ解析調査を効率化す
ることができるとともに,バグによる誤動作の拡大が防
止でき,さらにプログラム改版時に修正を他のプログラ
ムに波及させずに済む利点がある。
【図面の簡単な説明】
第1図は本発明の原理図,第2図は本発明の1実施例に
よる計算機システムの構成図,第3図は本発明の1実施
例によるプログラムのフロー図,第4図は従来のプログ
ラム連係処理の説明図である。 第1図中 1:呼び出し元プログラム 2:呼び出し先プログラム 2a:リターンアドレス複写処理 2b:本来の処理 2c:リターンアドレス正当性チェック処理 3:スタック 4:リターンアドレス複写領域

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】実行中のプログラムから他のプログラムを
    呼び出す際リターンアドレス等の復帰情報をスタックに
    退避して管理し、複数のプログラムの間の連係処理を行
    う計算機システムにおいて、呼び出されたプログラム
    は、上記スタックからリターンアドレスを読み出してメ
    モリの所定の領域に複写してから本来の処理を実行し、
    その本来の処理終了後に上記スタックから再びリターン
    アドレスを読み出して、これを上記メモリの所定の領域
    に複写してあるリターンアドレスと比較し、不一致の場
    合にはプログラムの暴走と判定することを特徴とするプ
    ログラム暴走検知方法。
JP1125784A 1989-05-19 1989-05-19 プログラム暴走検知方法 Expired - Lifetime JPH0731617B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP1125784A JPH0731617B2 (ja) 1989-05-19 1989-05-19 プログラム暴走検知方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP1125784A JPH0731617B2 (ja) 1989-05-19 1989-05-19 プログラム暴走検知方法

Publications (2)

Publication Number Publication Date
JPH02304635A JPH02304635A (ja) 1990-12-18
JPH0731617B2 true JPH0731617B2 (ja) 1995-04-10

Family

ID=14918772

Family Applications (1)

Application Number Title Priority Date Filing Date
JP1125784A Expired - Lifetime JPH0731617B2 (ja) 1989-05-19 1989-05-19 プログラム暴走検知方法

Country Status (1)

Country Link
JP (1) JPH0731617B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2642788B2 (ja) * 1991-02-18 1997-08-20 富士通株式会社 実行監視点削減方式
AU1560092A (en) * 1991-03-07 1992-10-06 Digital Equipment Corporation Method and apparatus for computer code processing in a code translator
JPH08161202A (ja) * 1994-12-09 1996-06-21 Matsushita Electric Ind Co Ltd プログラム暴走検知方法およびプログラム暴走検知装置
JP4518564B2 (ja) * 2003-09-04 2010-08-04 サイエンスパーク株式会社 不正コード実行の防止方法、不正コード実行の防止用プログラム、及び不正コード実行の防止用プログラムの記録媒体
JP5316148B2 (ja) * 2009-03-24 2013-10-16 富士通セミコンダクター株式会社 情報処理装置およびデータ修復方法
JP2015011436A (ja) * 2013-06-27 2015-01-19 株式会社デンソー プロセッサ
JP6723606B2 (ja) * 2017-01-19 2020-07-15 株式会社オリンピア 遊技機

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59220849A (ja) * 1983-05-31 1984-12-12 Toshiba Corp イメ−ジ比較制御方式
JPS61202234A (ja) * 1985-03-06 1986-09-08 Fujitsu Ltd アドレス制御回路
JPS63136144A (ja) * 1986-11-27 1988-06-08 Oki Electric Ind Co Ltd コンピユ−タの暴走検出方法

Also Published As

Publication number Publication date
JPH02304635A (ja) 1990-12-18

Similar Documents

Publication Publication Date Title
US7774636B2 (en) Method and system for kernel panic recovery
EP0921467A1 (en) Computer backup system operable with open files
US5828890A (en) System for interrupting program operation when an out-of-range value is encountered to correct a data value
US6256751B1 (en) Restoring checkpointed processes without restoring attributes of external data referenced by the processes
JPH0731617B2 (ja) プログラム暴走検知方法
JPH09128267A (ja) データ処理装置およびデータ処理方法
JP2922723B2 (ja) 情報処理装置
JPH04332055A (ja) プログラム暴走検知方法
JPH02260045A (ja) アプリケーション・トラブル・チェック方式
JP3124788B2 (ja) 組込型マルチタスクオペレーティングシステムの例外処理方法
US11334627B2 (en) Data processing
JP2533532B2 (ja) オンラインテスト方式
AU695339C (en) Computer backup system operable with open files
JPH07104993A (ja) 開発支援装置
JPH01214934A (ja) プログラムの間接再帰呼出し検出方式
JPH0816431A (ja) 利用者プログラムのデバッグ処理システム
JPH03132823A (ja) プロシジャ固有データのスタック方式
WO2019136852A1 (zh) 应用程序启动日志保存方法、存储介质、电子设备及系统
JPS6214240A (ja) プログラム検査方式
JPS604492B2 (ja) 計算機
JPH01140239A (ja) 命令実行アドレス保存処理方式
JP2001265619A (ja) データトレース方式
JPH1021137A (ja) メモリハント・フリー方式
JPS6269329A (ja) メモリ破壊位置検出方式
JPH0471040A (ja) トラップ処理方式