JPH0731617B2 - Program runaway detection method - Google Patents
Program runaway detection methodInfo
- 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
Links
Landscapes
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
Description
【発明の詳細な説明】 〔概要〕 計算機システムにおいて、メインルーチンとサブルーチ
ンあるいはサブルーチンとサブルーチンなどの間の連係
処理を行う際のプログラム暴走の検知方法に関し, 呼び出し先のプログラムから呼び出し元のプログラムへ
のリターンアドレスの正当性をチェックする手段を設け
ることによって,プログラム暴走の早期検知を可能に
し,またプログラム暴走による被害を最小限に抑制する
ことを目的とし, 実行中のプログラムから他のプログラムを呼び出す際リ
ターンアドレス等をスタックに退避して管理し,複数の
プログラムの間の連係処理を行う計算機システムにおい
て,呼び出されたプログラムは,上記スタックからリタ
ーンアドレスを読み出してメモリの所定の領域に複写し
てから本来の処理を実行し,その本来の処理終了後に上
記スタックから再びリターンアドレスを読み出して,こ
れを上記メモリの所定の領域に複写してあるリターンア
ドレスと比較し,不一致の場合にはプログラムの暴走と
判定する構成をもつ。DETAILED DESCRIPTION OF THE INVENTION [Outline] In a computer system, a method for detecting a program runaway when performing a linkage process between a main routine and a subroutine or between subroutines is described. By providing a means for checking the validity of the return address, it is possible to detect a program runaway early and to minimize the damage caused by a program runaway. In a computer system that saves and manages return addresses in a stack and performs linkage processing between multiple programs, the called program reads the return address from the stack and copies it to a specified area of memory. Perform the original process, After the original processing is completed, the return address is read again from the stack, and this return address is compared with the return address copied in a predetermined area of the memory. If they do not match, it is determined that the program is out of control.
本発明は,計算機システムにおいて,メインルーチンと
サブルーチンあるいはサブルーチンとサブルーチンなど
の間の連係処理を行う際のプログラム暴走の検知方法に
関する。The present invention relates to a program runaway detection method in a computer system when a main routine and a subroutine or a subroutine and a subroutine are linked.
第4図(a)に,プログラムの連係処理の1例を示す。
図示された例は,メインルーチンAが処理中にサブルー
チンBを呼び出し,またサブルーチンBはその処理にお
いてさらにサブルーチンCを呼び出すものである。FIG. 4 (a) shows an example of program linkage processing.
In the illustrated example, the main routine A calls the subroutine B during the processing, and the subroutine B further calls the subroutine C in the processing.
これらのサブルーチンの呼び出しを行う場合には,呼び
出し時に復帰情報の退避が行われる。復帰情報にはリタ
ーンアドレスやレジスタ情報などが含まれ,呼び出しの
サブルーチンにおいて処理を終了したとき,先に退避し
た復帰情報を取り出して,それに基づき呼び出し元のメ
インルーチンあるいはサブルーチンの処理を再開する。When calling these subroutines, the restoration information is saved at the time of calling. The return information includes return address and register information, and when the processing is completed in the calling subroutine, the previously saved return information is taken out and the processing of the calling main routine or the subroutine is restarted based on it.
第4図(a)に示されている連係処理のように,サブル
ーチンの呼び出しが多重に行われる場合,退避される復
帰情報も多重になるので,その退避,復元の制御を迅速
に行う必要がある。従来はこれらの復帰情報の管理を,
第4図(b)に示すようなスタックおよびスタックポイ
ンタを用いてOSの制御のもとで行っている。このスタッ
クは後入れ先出し法で構成されている。When subroutines are called multiple times as in the linkage processing shown in FIG. 4 (a), the return information to be saved also becomes multiple, so it is necessary to control the saving and restoration quickly. is there. Conventionally, management of these return information is
This is performed under the control of the OS using the stack and stack pointer as shown in FIG. 4 (b). The stack is constructed in a last-in first-out method.
第4図(b)において,はメインルーチンAの実行中
のスタックの状態であり,空となっている。はメイン
ルーチンAがサブルーチンBを呼び出したときのスタッ
クの状態であり,“A"は退避されたメインルーチンAの
復帰情報を示す。はサブルーチンBがサブルーチンC
を呼び出したときのスタックの状態であり,“B"は退避
されたサブルーチンBへの復帰情報を示す。はサブル
ーチンCからサブルーチンBへ復帰するときのスタック
の状態であり,スタックから“B"が取り出されて用いら
れる。そしてはサブルーチンBからメインルーチンA
へ復帰するときのスタックの状態であり,スタックから
“A"が取り出されて用いられる。In FIG. 4B, the state of the stack during execution of the main routine A is empty and is empty. Indicates the state of the stack when the main routine A calls the subroutine B, and "A" indicates the restored information of the saved main routine A. Subroutine B is subroutine C
Is the state of the stack when is called, and "B" indicates the restored information to the saved subroutine B. Is the state of the stack when returning from the subroutine C to the subroutine B, and "B" is taken out from the stack and used. And from subroutine B to main routine A
This is the state of the stack when returning to, and "A" is taken from the stack and used.
従来の計算機システムでは,プログラムの連係処理にお
いて,プログラムミスによりプログラムが暴走してスタ
ックのポインタがずれたり,スタックの値が破壊される
ことがあり,この状態で呼び出し先のプログラムからリ
ターン命令を実行すると,呼び出し先のプログラムから
呼び出し元のプログラムへ誤った復帰が行われ,プログ
ラムの暴走によるメモリの内容破壊等の被害を拡大する
とともに,バグの発見を困難にした。In a conventional computer system, in a program linkage process, a program error may cause a program runaway and the stack pointer may shift or the stack value may be destroyed. In this state, a return instruction is executed from the called program. As a result, the callee's program was erroneously restored to the caller's program, which caused damage such as memory content destruction due to program runaway, and made it difficult to find bugs.
本発明は,プログラム連係処理において,呼び出し先の
プログラムから呼び出し元のプログラムへのリターンア
ドレスの正当性をチェックする手段を設けることによっ
て、プログラム暴走の早期検知を可能にし,またプログ
ラム暴走による被害を最小限に抑制することを目的とし
ている。The present invention enables early detection of program runaway by providing means for checking the validity of the return address from the callee program to the caller program in the program linkage processing, and minimizes damage caused by program runaway. The purpose is to limit it.
本発明は,プログラムの呼び出しが行われたとき,呼び
出し先のプログラムがスタックに退避されているリター
ンアドレスをメモリに複写しておき,処理終了時に,ス
タックから取り出したリターンアドレスを,メモリに複
写してあるアドレスと比較し,両者が一致した場合にス
タックのリターンアドレスを正当なものと判定し,また
両者が不一致の場合には暴走と認識するようにしたもの
である。According to the present invention, when a program is called, the return address saved in the stack of the called program is copied to the memory, and at the end of the process, the return address fetched from the stack is copied to the memory. The return address of the stack is judged to be valid when the two match and the runaway is recognized when the two do not match.
第1図は本発明の原理図である。FIG. 1 is a principle diagram of the present invention.
図において, 1は,メインルーチンあるいはサブルーチンなどの呼び
出し元プログラムである。In the figure, 1 is a calling program such as a main routine or a subroutine.
2は,サブルーチンなどの呼び出し先プログラムであ
る。Reference numeral 2 is a called program such as a subroutine.
2a,2b,2cは,呼び出し先プログラム2の構成部分であ
り,2aはプログラムの先頭部分に置かれるリターンアド
レス複写処理,2bは本来の処理,2cはリターン命令の直前
に置かれるリターンアドレス正当性チェック処理であ
る。2a, 2b, 2c are components of the called program 2, 2a is a return address copy process placed at the beginning of the program, 2b is the original process, and 2c is the return address validity placed immediately before the return instruction. This is a check process.
3は,リターンアドレスを退避するスタックである。Reference numeral 3 is a stack for saving the return address.
4は,メモリのリターンアドレス複写領域である。Reference numeral 4 is a return address copy area of the memory.
呼び出し先のプログラム2のリターンアドレス複写処理
では,スタック3に退避されたリターンアドレスを一旦
取り出して,メモリのリターンアドレス複写領域4に複
写し,スタック3には再びリターンアドレスを積み戻
す。In the return address copying process of the called program 2, the return address saved in the stack 3 is once taken out, copied in the return address copying area 4 of the memory, and the return address is loaded back in the stack 3.
リターンアドレス正当性チェック処理では,スタック3
から取り出したリターンアドレスを,リターンアドレス
複写領域4に複写されているリターンアドレスと比較
し,スタックのリターンアドレスの正当性を判断する。
一致の場合は正当として,呼び出し元プログラム1への
復帰を実行し,不一致の場合はリターンアドレスのエラ
ーとしてプログラムの暴走状態にあるものと認識し,プ
ログラムの停止とエラー処理ルーチンによるエラー処理
等を行わせる。In the return address validity check process, stack 3
The return address fetched from is compared with the return address copied in the return address copy area 4 to judge the validity of the return address of the stack.
If they match, it is judged as valid, and the return to the calling program 1 is executed. If they do not match, it is recognized that the program is in a runaway state as an error in the return address, and the program is stopped and error processing by the error processing routine is performed. Let it be done.
プログラム呼び出しによる処理中,何らかのプログラム
はバグによりプログラムが暴走して,スタックポインタ
がずれたりスタックの内容が破壊されると,リターンア
ドレスが変化する。本発明はこれを呼び出し先プログラ
ムの処理開始時に複写したリターンアドレスを用いて正
当性をチェックすることにより簡単に検出することがで
きる。During processing by calling a program, the return address changes if the program runs out of control due to a bug and the stack pointer shifts or the contents of the stack are destroyed. The present invention can easily detect this by checking the validity using the return address copied at the start of the processing of the called program.
プログラム呼び出しが多重に行われる場合には,それぞ
れの呼び出し先のプログラムにおいて,このリターンア
ドレスの正当性をチェックする処理を行う。When multiple program calls are made, the validity of the return address is checked in each called program.
〔実施例〕 第2図は本発明の1実施例による計算機システムの構成
図であり,本発明に関連する要素のみを簡単化して示し
たものである。[Embodiment] FIG. 2 is a block diagram of a computer system according to an embodiment of the present invention, in which only the elements related to the present invention are simplified and shown.
図において,5はCPU,6はレジスタ〔R1〕,7はスタックポ
インタ,8はスタック領域のあるメモリ〔1〕,9はデータ
格納領域のあるメモリ〔2〕,10はリターンアドレス複
写領域〔M1〕である。In the figure, 5 is a CPU, 6 is a register [R1], 7 is a stack pointer, 8 is a memory with a stack area [1], 9 is a memory with a data storage area [2], and 10 is a return address copy area [M1 ].
第3図は本発明の1実施例によるメインルーチン11とサ
ブルーチン12の連係プログラムのフローを示したもので
ある。これらは第2図の計算機システムのもとで実行さ
れる。以下にその動作を説明する。FIG. 3 shows a flow of a linked program of the main routine 11 and the subroutine 12 according to the embodiment of the present invention. These are executed under the computer system of FIG. The operation will be described below.
メインルーチン11は処理Aとサブルーチンコールによる
処理と,処理Bとにより構成されている。The main routine 11 is composed of a process A, a process by a subroutine call, and a process B.
サブルーチンコールが発行されると,図示されていない
OSは,スタックポインタ7によりポイントされるメモリ
〔1〕のスタック領域にリターンアドレスを退避し,サ
ブルーチン12を起動する。サブルーチンには,次のな
いしのステップを実行する。Not shown when a subroutine call is issued
The OS saves the return address in the stack area of the memory [1] pointed to by the stack pointer 7 and activates the subroutine 12. The subroutine executes the following steps.
.サブルーチン12は,まず命令POP R1を実行する。こ
の命令は,スタックから最上部のリターンアドレスをポ
ップアップしてレジスタ〔R1〕に格納する。. The subroutine 12 first executes the instruction POP R1. This instruction pops up the top return address from the stack and stores it in register [R1].
.次にサブルーチン12は,命令PUSH R1を実行する。
この命令は,レジスタ〔R1〕のリターンアドレスをスタ
ックにプッシュし,積み戻す。このときレジスタ〔R1〕
には先のリターンアドレスが残されている。. Next, the subroutine 12 executes the instruction PUSH R1.
This instruction pushes the return address of register [R1] onto the stack and reloads it. At this time, register [R1]
Has the previous return address.
.次にレジスタ〔R1〕のリターンアドレスをリターン
アドレス複写領域〔M1〕に格納する。. Next, the return address of the register [R1] is stored in the return address copy area [M1].
.サブルーチン12は,本来の処理Cを実行する。. The subroutine 12 executes the original process C.
.処理Cの終了後,命令POP R1を実行し,スタックか
らリターンアドレスをポップアップしレジスタ〔R1〕に
格納する。. After the end of the process C, the instruction POP R1 is executed to pop up the return address from the stack and store it in the register [R1].
.続いて命令PUSH R1を実行し,リターンアドレスを
スタックに積み戻す。. Then execute the instruction PUSH R1 to push the return address back onto the stack.
.レジスタ〔R1〕の内容とリターンアドレス複写領域
〔M1〕の内容とを比較する。. The contents of the register [R1] and the contents of the return address copy area [M1] are compared.
.の比較でR1=M1であれば,図示省略されているリ
ターン命令を実行し,スタックのリターンアドレスを用
いてOSにより復帰制御が行われる。. If R1 = M1 in the comparison, the return instruction (not shown) is executed, and the return control of the OS is performed using the return address of the stack.
.の比較でR1≠M1であればプログラムを停止する。. If R1 ≠ M1 in the comparison of, the program is stopped.
メインルーチン11への復帰が行われた場合には,リター
ンアドレスから処理Bが実行される。When the return to the main routine 11 is performed, the process B is executed from the return address.
本発明によれば,複数のプログラムの連係処理におい
て,プログラムの暴走検出処理に関してプログラムの独
立性を保有したまま,比較的簡単な処理でプログラム中
のバグの発見を早期に行うことができ,またバグを含む
プログラムの特定が容易となりバグ解析調査を効率化す
ることができるとともに,バグによる誤動作の拡大が防
止でき,さらにプログラム改版時に修正を他のプログラ
ムに波及させずに済む利点がある。According to the present invention, it is possible to detect a bug in a program at an early stage by a relatively simple process while maintaining the independence of the program regarding the runaway detection process of the program in the linked process of a plurality of programs. This has the advantages that it is easy to identify the program that contains the bug, the efficiency of the bug analysis and investigation can be improved, the malfunction caused by the bug can be prevented from expanding, and the modification does not spread to other programs when the program is revised.
第1図は本発明の原理図,第2図は本発明の1実施例に
よる計算機システムの構成図,第3図は本発明の1実施
例によるプログラムのフロー図,第4図は従来のプログ
ラム連係処理の説明図である。 第1図中 1:呼び出し元プログラム 2:呼び出し先プログラム 2a:リターンアドレス複写処理 2b:本来の処理 2c:リターンアドレス正当性チェック処理 3:スタック 4:リターンアドレス複写領域FIG. 1 is a principle diagram of the present invention, FIG. 2 is a configuration diagram of a computer system according to one embodiment of the present invention, FIG. 3 is a flow chart of a program according to one embodiment of the present invention, and FIG. 4 is a conventional program. It is an explanatory view of cooperation processing. In Figure 1, 1: Calling source program 2: Calling destination program 2a: Return address copy processing 2b: Original processing 2c: Return address validity check processing 3: Stack 4: Return address copy area
Claims (1)
呼び出す際リターンアドレス等の復帰情報をスタックに
退避して管理し、複数のプログラムの間の連係処理を行
う計算機システムにおいて、呼び出されたプログラム
は、上記スタックからリターンアドレスを読み出してメ
モリの所定の領域に複写してから本来の処理を実行し、
その本来の処理終了後に上記スタックから再びリターン
アドレスを読み出して、これを上記メモリの所定の領域
に複写してあるリターンアドレスと比較し、不一致の場
合にはプログラムの暴走と判定することを特徴とするプ
ログラム暴走検知方法。1. When a program being executed is called from another program, return information such as a return address is saved in a stack and managed, and in a computer system for performing linkage processing between a plurality of programs, the called program is , Read the return address from the above stack, copy it to a specified area of memory, and then execute the original processing,
After the original processing is completed, the return address is read again from the stack, and this return address is compared with the return address copied to a predetermined area of the memory. If they do not match, it is determined that the program has runaway. Program runaway detection method.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP1125784A JPH0731617B2 (en) | 1989-05-19 | 1989-05-19 | Program runaway detection method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP1125784A JPH0731617B2 (en) | 1989-05-19 | 1989-05-19 | Program runaway detection method |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH02304635A JPH02304635A (en) | 1990-12-18 |
JPH0731617B2 true JPH0731617B2 (en) | 1995-04-10 |
Family
ID=14918772
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP1125784A Expired - Lifetime JPH0731617B2 (en) | 1989-05-19 | 1989-05-19 | Program runaway detection method |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH0731617B2 (en) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2642788B2 (en) * | 1991-02-18 | 1997-08-20 | 富士通株式会社 | Execution monitoring point reduction method |
WO1992015939A1 (en) * | 1991-03-07 | 1992-09-17 | Digital Equipment Corporation | Method and apparatus for computer code processing in a code translator |
JPH08161202A (en) * | 1994-12-09 | 1996-06-21 | Matsushita Electric Ind Co Ltd | Program runaway detection method and program runaway detector |
CN1886728A (en) * | 2003-09-04 | 2006-12-27 | 科学园株式会社 | False code prevention method and prevention program and the program recording medium |
JP5316148B2 (en) * | 2009-03-24 | 2013-10-16 | 富士通セミコンダクター株式会社 | Information processing apparatus and data restoration method |
JP2015011436A (en) * | 2013-06-27 | 2015-01-19 | 株式会社デンソー | Processor |
JP6723606B2 (en) * | 2017-01-19 | 2020-07-15 | 株式会社オリンピア | Amusement machine |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS59220849A (en) * | 1983-05-31 | 1984-12-12 | Toshiba Corp | Image comparison control system |
JPS61202234A (en) * | 1985-03-06 | 1986-09-08 | Fujitsu Ltd | Address control circuit |
JPS63136144A (en) * | 1986-11-27 | 1988-06-08 | Oki Electric Ind Co Ltd | Runaway detecting method for computer |
-
1989
- 1989-05-19 JP JP1125784A patent/JPH0731617B2/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JPH02304635A (en) | 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 | |
US8972794B2 (en) | Method and apparatus for diagnostic recording using transactional memory | |
US6256751B1 (en) | Restoring checkpointed processes without restoring attributes of external data referenced by the processes | |
CA2278696A1 (en) | Method and apparatus for allowing continued operation for overflow and invalid data | |
JPH0731617B2 (en) | Program runaway detection method | |
JP2922723B2 (en) | Information processing device | |
JPH04332055A (en) | Method for detecting program runaway | |
WO2019136852A1 (en) | Method and system for saving starting log of application program, and storage medium and electronic device | |
JPH08249206A (en) | Computer with stack area destruction detection function | |
JP2533532B2 (en) | Online test method | |
US20210011951A1 (en) | Data processing | |
AU695339C (en) | Computer backup system operable with open files | |
JPH0667942A (en) | Log extraction system | |
JPH01214934A (en) | System for detecting indirect recursive calling of program | |
JPH0816431A (en) | Debugging process system for user program | |
JPH03132823A (en) | Stacking system for data peculiar to procedure | |
JPH01116851A (en) | Program load control system | |
JPS6214240A (en) | Program inspecting system | |
JPH1021137A (en) | Memory hunt free system | |
JPS604492B2 (en) | calculator | |
JPH01114947A (en) | Tracing system for data processor | |
JPH01140239A (en) | Instruction executing address preserving processing system | |
JPS6269329A (en) | Detecting system for breakage position of memory | |
JPH0471040A (en) | Trap processing system |