JPH0619711A - スタック保護方式 - Google Patents

スタック保護方式

Info

Publication number
JPH0619711A
JPH0619711A JP17821792A JP17821792A JPH0619711A JP H0619711 A JPH0619711 A JP H0619711A JP 17821792 A JP17821792 A JP 17821792A JP 17821792 A JP17821792 A JP 17821792A JP H0619711 A JPH0619711 A JP H0619711A
Authority
JP
Japan
Prior art keywords
procedure
stack
register
contents
called
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
JP17821792A
Other languages
English (en)
Inventor
Akitomo Yamada
晃智 山田
Yoichiro Takeuchi
陽一郎 竹内
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 JP17821792A priority Critical patent/JPH0619711A/ja
Publication of JPH0619711A publication Critical patent/JPH0619711A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】 【目的】特定の手続きによりスタックの状態を復元する
場合に、スタック内のデータが破壊されるのを防止でき
るようにする。 【構成】スタック21上のカレントフレームのそれぞれ
下限位置,上限位置の次の位置を指すポインタ(FB
P,SP)が格納されるCFBレジスタ11,CSPレ
ジスタ12をCPU1に設け、フレームF2 〜Fm の下
限位置には、その1つ前に呼ばれた手続きに対応したフ
レームの下限位置を指すFBPが設定される構成とす
る。CPU1は、longjump実行時、先のset
jump実行によりジャンプバッファ22に保存された
CPU1内の全レジスタの内容のうち、レジスタ11,
12の内容FBP,SPを取出し、そのSPの指すスタ
ック21内位置の内容と、そのFBPとを比較し、両者
が一致している場合だけ、バッファ22内の全レジスタ
の内容をCPU1内の該当レジスタに復元する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】この発明は、呼出された手続きで
使用するスタックの状態を、第1の手続きでバッファに
保存されたレジスタ情報に従って、第2の手続きにより
第1の手続きの実行時の状態に復元する際に好適なスタ
ック保護方式に関する。
【0002】
【従来の技術】一般に計算機システムでは、手続き(関
数、処理ルーチン)が呼出される毎に、その手続きで使
用するフレーム(スタックフレーム)が、主記憶上に確
保されたスタックに積まれる。このフレームは、CPU
内の各種レジスタ内容を格納するためのもので、該当手
続きが終了すると解放(消滅)される。
【0003】さて、C言語ライブラリ関数が適用可能な
計算機システムでは、setjump(セットジャン
プ)という関数(手続き)とlongjump(ロング
ジャンプ)という関数とが対で使用される。但し、se
tjumpが呼出されてから次にlongjumpが呼
出されるまでの間に、別の1つ以上の関数が呼出されて
実行されるのが一般的である。
【0004】まず、setjump(第1の手続き)が
呼出されると、CPUの全てのレジスタの内容が専用の
バッファ(ジャンプバッファ)に保存(退避)される。
その後、longjump(第2の手続き)が呼出され
ると、先のsetjumpの実行によりジャンプバッフ
ァに保存されていた情報に従って、スタックがsetj
umpの実行時の状態に復元される。
【0005】
【発明が解決しようとする課題】このように従来は、l
ongjump(第2の手続き)が呼出されると、スタ
ックをsetjump(第1の手続き)の実行時の状態
に機械的に復元するだけであった。このため、もし正し
くスタックが復元されなかったならば、スタック内のデ
ータが破壊されるという問題があった。
【0006】この発明は上記事情に鑑みてなされたもの
でその目的は、第1の手続きでバッファに保存されたレ
ジスタ類の情報に従って、第2の手続きにより第1の手
続きの実行時の状態にスタックを復元する際に、その復
元が正しく行われるか否かを予測し、正しく行われるこ
とが予測できた場合だけスタックを復元することによ
り、スタック内のデータの破壊が防止できるスタック保
護方式を提供することにある。
【0007】
【課題を解決するための手段】この発明は、現在実行中
の手続きで使用するフレーム(スタックフレーム)の下
限位置を第1のレジスタ(CFBレジスタ)に格納され
た第1のポインタ(FBP)により指し示し、同じく上
限位置を第2のレジスタ(CSPレジスタ)に格納され
た第2のポインタ(SP)により指し示す構成とすると
共に、フレームの下限位置には、同フレームを使用する
手続きの直前に呼ばれた別の手続きで使用する先行フレ
ームのFBPを(旧FBPとして)格納する構成とす
る。
【0008】また、この発明は、第1の手続き(set
jump)が呼ばれることにより、その時点の全レジス
タの内容を所定のバッファ(ジャンプバッファ)に退避
する第1の手続き実行手段と、第2の手続き(long
jump)が呼ばれることにより、上記のバッファから
setjumpが呼ばれた際のCFBレジスタおよびC
SPレジスタの内容を取出して、この取出したCSPレ
ジスタの内容をもとにsetjump実行時に使用され
ていたフレームの下限位置の内容を取出し、この内容と
先に取出したCFBレジスタの内容とが一致している場
合だけ、CPU内の全レジスタの状態を、バッファに退
避されていた内容に従ってsetjump実行時の状態
に復元する第2の手続き実行手段とを備えたことを特徴
とする。
【0009】
【作用】上記の構成において、setjump実行時に
は、CFBレジスタおよびCSPレジスタを含むCPU
内の全レジスタの内容が、レジスタ毎に、所定のレジス
タ順にバッファに退避される。その後、1つまたは複数
の何等かの手続きが呼出され、しかる後にlongju
mpが実行されると、まず先のsetjump実行によ
りバッファに退避されていた全レジスタの内容のうち、
CFBレジスタ,CSPレジスタの内容FBP,SPが
取出される。すると、このSPを用いて、setjum
p実行時のカレントフレームの下限位置の内容(旧FB
P)がスタックから取出され、この下限位置の内容(旧
FBP)と先にバッファから取出しておいたCFBレジ
スタの内容FBPとが比較される。
【0010】もし、両者が一致しているならば、スタッ
クは正常であるものとして、先のsetjump実行に
よりバッファに退避されていた全レジスタの内容を対応
するレジスタに復元する操作が行われる。これにより、
CFBレジスタ,CSPレジスタも先のsetjump
実行時の状態に復元され、したがってスタックもset
jump実行時の状態に復元される。これに対して、両
者が一致していなければ、setjumpより後に呼出
された手続きの処理でスタックへの異常書込みが行われ
たものとして、上記のレジスタ復元、したがってスタッ
ク復元を控える。これにより、スタックのデータが破壊
されるのが防止される。
【0011】
【実施例】図1はこの発明を適用する計算機システムの
一実施例を示す概略ブロック構成図である。
【0012】図1において、1は計算機システムの制御
中枢を成すCPU、2は各種プログラム、データ等が格
納される主メモリである。この主メモリ2にはスタック
21およびジャンプバッファ22が確保されている。
【0013】スタック21は、手続き(処理ルーチン、
C言語ではライブラリ関数)が呼出される毎に、その手
続きで使用するスタックフレーム(以下、単にフレーム
と称する)を積む(生成する)ための領域として用いら
れる。図1の例では、スタック21に、m個のフレーム
F1 ,F2 …Fm-1 ,Fm が積まれている様子が示され
ている。このm個のフレームF1 〜Fm のうちのフレー
ムFm は、現在実行中の手続きが呼出された際に積まれ
て、同手続きで使用されるもので、カレントフレームと
呼ばれる。先頭フレームF1 を除く各フレームFi (i
=2〜m)の下限位置(図ではフレームの上側の位置)
には、該当する手続きの1つ前に呼ばれて終了していな
い手続きに対応したフレームの下限位置を示すフレーム
ボトムポインタ(以下、FBPと称する)が、旧FBP
として格納されるようになっている。一方、ジャンプバ
ッファ22はsetjump実行によりCPU1内の全
レジスタの内容を保存するのに用いられる。
【0014】CPU1には、汎用レジスタ等の他、スタ
ック21上のカレントフレーム(図1では、フレームF
m )の下限位置を指すFBP(フレームボトムポイン
タ)を格納するためのレジスタ(以下、CFBレジスタ
と称する)11と、同じく上限位置の次の位置を指すス
タックポインタ(以下、SPと称する)を格納するため
のレジスタ(以下、CSPレジスタと称する)12とが
設けられている。このCFBレジスタ11およびCSP
レジスタ12を含むCPU1内の全レジスタが、set
jump実行時におけるジャンプバッファ22への保存
対象となる。
【0015】次に本発明の一実施例の動作を、図2乃至
図4のフローチャートを参照して説明する。なお、図2
は各種の手続き(処理ルーチン)が呼出された際のスタ
ック処理を説明するためのフローチャート、図3はse
tjump実行時の処理を説明するためのフローチャー
ト、図4はlongjump実行時の処理を説明するた
めのフローチャートである。
【0016】まず、CPU1によるプログラム処理が進
行し、スタック21にフレームFiまで積まれている状
態で、ある手続きの呼出しが行われたものとする。この
場合、CPU1は、その時点においてCSPレジスタ1
2に格納されているSP(スタックポインタ)の指し示
すスタック21内位置を下限位置とする領域に、新たな
フレームFi+1 を積む(ステップS1)。このフレーム
Fi+1 には、CPU1内のCFBレジスタ11およびC
SPレジスタ12を含む全レジスタの内容が格納され
る。特に、フレームFi+1 の下限位置には、その時点に
おいてCFBレジスタ11に格納されているFBP(フ
レームボトムポインタ)が旧FBPとして格納される。
【0017】次にCPU1は、CFBレジスタ11中の
FBPを新たなフレームFi+1 の下限位置を指す値(そ
れまでのSPの値)に更新すると共に、CSPレジスタ
12中のSPを同フレームFi+1 の上限位置の次の位置
を指す値に更新する(ステップS2)。
【0018】次に、setjump(予め定められた第
1の手続き)が呼出された際の動作を説明する。この場
合、CPU1は、その時点におけるCPU1内のCFB
レジスタ11およびCSPレジスタ12を含む全レジス
タの内容を、レジスタ毎に、そのレジスタに予め割り当
てられたジャンプバッファ22内領域に順に保存する
(ステップS11)。その後、1つあるいは複数の何等
かの手続きが呼出され、しかる後にlongjump
(予め定められた第2の手続き)が呼出されたものとす
る。
【0019】この場合、CPU1はまず、ジャンプバッ
ファ22の所定位置から、最も最近に行われたsetj
ump実行時のCFBレジスタ11,CSPレジスタ1
2の内容FBP,SPを取出す(ステップS21)。
【0020】ステップS21でジャンプバッファ22か
ら取出されたFBPおよびSPは、setjump実行
時のカレントフレームの下限位置および同フレームの上
限位置の次の位置(setjumpの次に何等かの手続
きが呼出された場合に積まれることになる次のフレーム
の下限位置)を指す。したがってlongjump実行
時においては、このSPの指すスタック21内位置に
は、先のsetjump実行時のカレントフレームの下
限位置を指す旧FBPが格納されているはずである。ま
た、このSPの指すスタック21内位置の内容(旧FB
P)は、ステップS21でジャンプバッファ22から取
出されたFBPに一致するはずである。
【0021】そこでCPU1は、ステップS21でジャ
ンプバッファ22から取出したSPの指すスタック21
内位置の内容(旧FBP)を取出し(ステップS2
2)、この取出した内容(旧FBP)と、ステップS2
1でジャンプバッファ22から取出しておいたFBP
(setjump実行時のCFBレジスタ11の内容)
とを比較する(ステップS23)。
【0022】もし、両者が一致していなければ、CPU
1はsetjumpより後に呼出された手続きの処理で
スタック21への異常書込みが行われたものと判断し、
スタック21の破壊を防ぐために、スタック21をse
tjump実行時の状態に復元することはせず、lon
gjumpの失敗であるとしてエラー通知を行う(ステ
ップS24,S25)。
【0023】これに対して両者が一致していれば、CP
U1はジャンプバッファ22に保存されていたCPU1
内の各レジスタの内容を、それぞれ該当するレジスタに
復元する(ステップS24,S26)。したがって、ジ
ャンプバッファ22に保存されていた、setjump
実行時のCFBレジスタ11,CSPレジスタ12の内
容FBP,SPも、そのCFBレジスタ11,12に復
元される。これにより、もしフレームF2 がカレントフ
レームとなっている状態でsetjumpが実行された
ならば、復元後のCFBレジスタ11,CSPレジスタ
12の内容FBP,SPは、それぞれフレームF2 の下
限位置,フレームF2 の上限位置の次の位置を指し、ス
タック21はsetjump実行時の状態に復元された
ことになる。
【0024】なお、前記実施例では、CSPレジスタ1
2に格納されるSPはカレントフレームの上限位置の次
の位置を指すものとして説明したが、上限位置を指すも
のであってもよい。但し、このようにした場合、スタッ
ク21に新たなフレームを積む際の開始位置(新たなフ
レームの下限位置)を、SPの指す位置の次の位置とす
る必要がある。また、図4のステップS22では、ステ
ップS21で取出したSPの指すスタック21内位置の
内容ではなく、このSPの指す位置の次のスタック21
内位置の内容を(旧FBPとして)取出す必要がある。
【0025】
【発明の効果】以上詳述したようにこの発明によれば、
第1の手続きでバッファに保存されたレジスタ類の情報
に従って、第2の手続きにより第1の手続きの実行時の
状態にスタックを復元する際に、第1の手続きが呼ばれ
た際のカレントフレームの下限位置に設定されている、
その1つ前に呼ばれた手続きに対応したフレームの下限
位置を示すポインタと、第1の手続きでバッファに保存
された、その際のカレントフレームの下限位置を示すレ
ジスタの内容とを比較することで、その復元が正しく行
われるか否かを予測し、正しく行われることが予測でき
た場合だけスタックを復元する構成としたので、第2の
手続きの実行時に正しくスタックが復元され、スタック
内のデータが破壊されるのを防止できる。
【図面の簡単な説明】
【図1】この発明を適用する計算機システムの一実施例
を示す概略ブロック構成図。
【図2】各種の手続きが呼出された際のスタック処理を
説明するためのフローチャート。
【図3】setjump実行時の処理を説明するための
フローチャート。
【図4】longjump実行時の処理を説明するため
のフローチャート。
【符号の説明】
1…CPU、2…主メモリ、11…CFBレジスタ(第
1のレジスタ)、12…CSPレジスタ(第2のレジス
タ)、21…スタック、22…ジャンプバッファ、F1
〜Fm …フレーム(スタックフレーム)。

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 手続きが呼出される毎に、その手続きで
    使用するスタックフレームが、主記憶上のスタックに積
    まれる計算機システムにおいて、 前記スタック内のスタックフレームのうち、現在実行中
    の手続きで使用するスタックフレームの下限位置を指す
    第1のポインタを格納するための第1のレジスタと、 現在実行中の手続きで使用する前記スタックフレームの
    上限位置を指す第2のポインタを格納するための第2の
    レジスタと、 前記スタックフレームの下限位置に、同フレームを使用
    する手続きの直前に呼ばれた別の手続きで使用する先行
    するスタックフレームについての前記第1のポインタを
    設定する手段と、 予め定められた第1の手続きが呼ばれることにより、そ
    の時点の前記第1および第2のレジスタを含む全レジス
    タの内容を所定のバッファに退避する第1の手続き実行
    手段と、 予め定められた第2の手続きが呼ばれることにより、前
    記バッファから前記第1の手続きが呼ばれた際の前記第
    1レジスタおよび第2のレジスタの内容を取出して、こ
    の取出した第2のレジスタの内容をもとに前記第1の手
    続きが呼ばれた際に使用されていたフレームの下限位置
    の内容を取出し、この内容と先に取出した前記第1のレ
    ジスタの内容とが一致している場合だけ、前記全レジス
    タの状態を、前記バッファに退避されていた内容に従っ
    て前記第1の手続きが呼ばれた際の状態に復元する第2
    の手続き実行手段と、 を具備することを特徴とするスタック保護方式。
JP17821792A 1992-07-06 1992-07-06 スタック保護方式 Pending JPH0619711A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP17821792A JPH0619711A (ja) 1992-07-06 1992-07-06 スタック保護方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP17821792A JPH0619711A (ja) 1992-07-06 1992-07-06 スタック保護方式

Publications (1)

Publication Number Publication Date
JPH0619711A true JPH0619711A (ja) 1994-01-28

Family

ID=16044636

Family Applications (1)

Application Number Title Priority Date Filing Date
JP17821792A Pending JPH0619711A (ja) 1992-07-06 1992-07-06 スタック保護方式

Country Status (1)

Country Link
JP (1) JPH0619711A (ja)

Similar Documents

Publication Publication Date Title
JPH0810437B2 (ja) 仮想計算機システムのゲスト実行制御方式
JPH0619711A (ja) スタック保護方式
JPH0594353A (ja) データベース管理方式
JP2743860B2 (ja) 利用者プログラムのデバッグ処理システム
JPS60221829A (ja) デ−タ処理装置
JPH0546378A (ja) プログラムの修正処理方法
JPS6020769B2 (ja) マイクロプログラム制御方式
JPH01201728A (ja) プログラム修正方式
JPH07152541A (ja) システム無中断プログラム切替え方法
JP2005284925A (ja) コンピュータシステムおよびプログラム更新方法
JPS63284617A (ja) コンピュ−タの自動再スタ−ト方法
JPH05134888A (ja) 情報処理装置
JPH01147636A (ja) 障害発生時の処理再試行方式
JPH08166887A (ja) 割込み処理からの復帰方法
JPH0262633A (ja) プログラム間通知方式
JPH04264625A (ja) レジスタ管理方式
JPS63109558A (ja) プログラムのロ−ド方式
JPH05233342A (ja) ジョブ再スタート制御方式
JPH0293956A (ja) データセグメント参照更新履歴収集方式
JPH02244345A (ja) 情報処理装置
JPS62133535A (ja) プログラムチエツクポイント処理方式
JPH03147130A (ja) オペレーティングシステム修正方式
JPH08235029A (ja) システム障害情報保存方法
JPH03282630A (ja) スケジュール定義再実行方式
JPH0520101A (ja) 演算レジスタ情報監視方式