JPH09128267A - データ処理装置およびデータ処理方法 - Google Patents

データ処理装置およびデータ処理方法

Info

Publication number
JPH09128267A
JPH09128267A JP7282959A JP28295995A JPH09128267A JP H09128267 A JPH09128267 A JP H09128267A JP 7282959 A JP7282959 A JP 7282959A JP 28295995 A JP28295995 A JP 28295995A JP H09128267 A JPH09128267 A JP H09128267A
Authority
JP
Japan
Prior art keywords
stack
stack area
instruction
write
buffer
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.)
Granted
Application number
JP7282959A
Other languages
English (en)
Other versions
JP2850808B2 (ja
Inventor
Tatsuko Katou
樹子 加藤
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.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Priority to JP7282959A priority Critical patent/JP2850808B2/ja
Priority to US08/739,829 priority patent/US5953529A/en
Publication of JPH09128267A publication Critical patent/JPH09128267A/ja
Application granted granted Critical
Publication of JP2850808B2 publication Critical patent/JP2850808B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【課題】プログラムカウンタ値の記憶装置として用いる
スタック領域への不正アクセスによるプログラムの不正
動作や暴走、データの破壊を防ぐ。 【解決手段】スタック領域管理部52が、ユーザプログ
ラム1を構成する関数および割込み処理ルーチンを含む
命令が使用するスタック534を管理する使用スタック
領域管理部53と、スタック534の不正なアクセス操
作の検出を行なうアクセスチェック部54とを備える。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はデータ処理装置およ
びデータ処理方法に関し、特にプログラムカウンタ値の
退避用にスタック領域を使用するマイクロコンピュータ
用のプログラム開発用のデータ処理装置およびデータ処
理方法に関する。
【0002】
【従来の技術】マイクロコンピュータでは、次の関数の
実行に移る前、あるいは割り込み処理の実行前に、現在
実行中の関数への復帰後の実行再開命令を指すプログラ
ムカウンタ(以下PC)値の保存用の記憶装置としてス
タック領域を使用する。このスタック領域は後入れ先出
し(LIFO)メモリとも呼び、後に入力したデータが
先に出力されるような構造を有するメモリ領域である。
このスタック領域へのアクセスアドレスはスタックポイ
ンタ(以下SP)で指定する。SPの値はスタック領域
の操作に伴って変化し、常に最新のスタックへのアクセ
スアドレスを指しているので、読出し時には最新の書込
みデータが得られることになる。例えば、関数コール時
にはサブルーチンコール命令であるcall命令を実行
する。call命令では、現実行関数の次の命令の先頭
アドレスを現実行関数復帰後のPC値としてスタックに
退避し、その後、call命令のオペランドで設定され
た分岐先アドレスをPCに格納してコール先関数の実行
に移る。コール先関数の処理の最後では、サブルーチン
からのリターン命令であるret命令を実行する。その
命令の実行により、SPの指すスタックフレームから戻
り先番地を読出してPCに格納する処理が行なわれコー
ル元の関数に戻ることができる。
【0003】PC値をスタックに退避/復帰する動作を
説明する説明図である図8を参照すると、(A)に示す
ユーザプログラムは、メイン関数81と、コール先関数
82とを含む。
【0004】メイン関数81は、instA0なる命令
811と、instB0なる命令812と、call
!pc(A1)なる命令(call命令)813と、i
nstC0なる命令814とからなり、これら命令81
1〜814を格納しているメモリの先頭アドレスをそれ
ぞれPC(A0),PC(B0),PC(call),
PC(C0)とする。また、コール先関数82は、in
stA1なる命令821と、instB1なる命令82
2と、ret命令823とからなり、これら命令821
〜823を格納しているメモリの先頭アドレスをそれぞ
れPC(A1),PC(B1),PC(ret)とす
る。また、call命令813を実行する前のSP値を
SP(0),実行後のSP値をSP(1)とする。
【0005】メイン関数81の実行中にcall命令8
13が読込まれると、この命令813の次の命令814
の先頭アドレスPC(C0)の値を復帰後PC値として
図8(B)に示すスタック83に退避する。このとき、
スタック83に保持したSPの値は、退避動作に伴って
SP(0)からSP(1)に変化する。次にPCにca
ll命令813のオブジェクトで指定された分岐先アド
レスPC(A1)が格納され、コール先関数82の処理
に移る。PC(A1)を先頭アドレスとする命令821
から順次命令を読込んで実行し、コール先関数の最後で
ret命令823が読込まれると、スタック領域83の
現在のSP値、つまりSP(1)の指す箇所から復帰後
PC値を読出してPCにセットし、命令814からメイ
ン関数の処理を再開する。このとき、SPの値は、スタ
ックからの読出し動作に伴ってSP(1)からSP
(0)に変化する。
【0006】また、スタック領域には、上記のようにコ
ール元の関数の戻り先PCの値を退避する他に、コール
元の関数で使用していたローカル変数や汎用レジスタの
値を格納することもできる。スタック領域へのPC以外
の値の退避は、主にpush命令を用いて行い、スタッ
ク領域からのPC以外の値の読出しには、主にpop命
令を用いる。
【0007】PC値以外の関数値のpush命令および
pop命令によるスタックへの格納/読出し動作を説明
する説明図である図9を参照すると、(A)に示すユー
ザプログラムは、メイン関数91と、コール先関数92
とを含む。
【0008】メイン関数81は、instA0なる命令
911と、instB0なる命令912と、call
!pc(push)なる命令(call命令)913
と、instC0なる命令914とからなり、これら命
令911〜914を格納しているメモリの先頭アドレス
をそれぞれPC(A0),PC(B0),PC(cal
l),PC(C0)とする。また、コール先関数92
は、push hlなる命令(push命令)921
と、instA1なる命令922と、instB1なる
命令923と、pop hlなる命令(pop命令)9
24と、ret命令925とからなり、これら命令92
1〜925を格納しているメモリの先頭アドレスをそれ
ぞれPC(push),PC(A1),PC(B1),
PC(pop),PC(ret)とする。また、cal
l命令913の実行前,実行後の各々ののSP値をそれ
ぞれSP(0),SP(1)、push命令の実行後の
SP値をSP(2)とする。
【0009】メイン関数91の実行中にcall命令9
13が読込まれると、この命令913の次の命令914
の先頭アドレスPC(C0)の値を復帰後PC値として
スタックに退避する。このとき、スタック93に保持し
たSPの値は、退避動作に伴って、SP(0)からSP
(1)に変化する。次にPCにcall命令913のオ
ブジェクトで指定された分岐先アドレスPC(pus
h)が格納され、コール先関数92の処理に移る。PC
(push)を先頭アドレスとするpush命令921
では、スタックにレジスタhlのデータを退避する。こ
のとき、スタック93に保持したSPの値は、SP
(1)からSP(2)に変化する。その後、順次命令を
読込んで実行し、コール先関数でpop命令924が読
込まれると、スタックからデータを読出して、hlレジ
スタに格納する操作を行なう。このとき、スタック93
のSPの値はSP(2)からSP(1)に変化する。ま
た、コール先関数の最後でret命令925が読込まれ
ると、スタック領域の現在のSP値、つまりSP(1)
の指す箇所から復帰後PC値を読出してPCにセット
し、命令914からメイン関数の処理を再開する。この
とき、スタック93のSPの値は、スタックからの読出
し操作に伴ってSP(1)からSP(0)に変化する。
【0010】次に、関数がネスト状にコールする場合の
処理も同様であり、この処理の流れを示す説明図である
図10,図11を参照してこのコール処理について説明
すると、図10に示すユーザプログラムは、メイン関数
101と、第1〜第nのコール先関数102〜104と
を含む。
【0011】メイン関数101は、命令1011〜10
14(instA0,instB0,call !pc
(push1),instC0)とから成り、これらの
命令1011〜1014が格納されているメモリの先頭
アドレスをPC(A0),PC(B0),PC(cal
l0),PC(C0)とする。また、第1コール先関数
102は、命令1011〜1014(pushhl,i
nstA1,instB1,call !pc,ins
tC1,pop hl,ret)とから成り、これら命
令1021〜1027が格納されているメモリの先頭ア
ドレスをPC(push1),PC(A1),PC(B
1),PC(call1),PC(C1),PC(po
p1),PC(ret1)とする。同様に、第n−1コ
ール先関数103は、命令1031〜1037(pus
h hl,instA(n−1),instB(n−
1),call !pc(pushn),instC
(n−1),pophl,ret)とから成り、これら
命令1031〜1037が格納されているメモリの先頭
アドレスをPC(push(n−1)),PC(A(n
−1)),PC(B(n−1)),PC(call(n
−1)),PC(C(n−1)),PC(pop(n−
1)),PC(ret(n−1))とする。第nコール
先関数104は、命令1041〜1046(push
hl,instAn,instBn,instCn,p
ophl,ret)から成り、これらの命令が格納され
ているメモリの先頭アドレスをPC(pushn),P
C(An),PC(Bn),PC(Cn),PC(po
pn),PC(retn)とする。
【0012】メイン関数101の実行中にcall命令
1013が読込まれると、次の命令1014の先頭アド
レスPC(C0)の値を復帰後PC値として図11に示
すスタック105に退避する。このとき、SPの値は退
避動作に伴って、SP(0)からSP(1a)に変化す
る。次にPCにcall命令1013のオブジェクトで
指定された分岐先アドレスPC(push1)が格納さ
れ、第1コール先関数102の処理に移る。PC(pu
sh1)を先頭アドレスとする命令1021では、スタ
ック105にレジスタhlのデータを退避する。このと
き、SPの値はSP(1a)からSP(1b)に変化す
る。
【0013】その後、順次命令を読込んで実行し、ca
ll命令1024が読込まれると、次の命令1025の
先頭アドレスPC(C1)の値を復帰後PC値としてス
タック105に退避し、SPの値はSP(1b)からS
P(2a)に変化する。次にPCにcall命令102
4のオブジェクトで指定された分岐先アドレスPC(p
ush2)が格納され、次のコール先関数の処理に移
る。同様にして、第n−1コール先関数103の実行中
にcall命令1034が読込まれると、次の命令10
35の先頭アドレスPC(C(n−1))の値を復帰後
PC値としてスタック105に退避し、SPの値はSP
((n−1)b)からSP(na)に変化する。次にP
Cにcall命令1034のオブジェクトで指定された
分岐先アドレスPC(pushn)が格納され、第nコ
ール先関数104の処理に移る。PC(pushn)を
先頭アドレスとする命令1041では、スタック105
にレジスタhlのデータを退避する。このとき、SPの
値はSP(na)からSP(nb)に変化する。
【0014】その後、順次命令を読込んで実行し、po
p命令1045が読込まれると、スタック105からデ
ータを読出して、hlレジスタに格納する操作を行な
う。このとき、SPの値はSP(nb)からSP(n
a)に変化する。また、ret命令1046が読込まれ
ると、スタック領域105の現在のSP値、SP(n
a)の指す箇所から復帰後PC値を読出してPCにセッ
トし、命令1035から第n−1コール先関数103の
処理を再開する。このとき、SPの値は、スタック10
5からの読出し操作に伴ってSP(na)からSP
((n−1)b)に変化する。
【0015】pop命令1036が読込まれると、スタ
ック105からデータを読出して、hlレジスタに格納
する操作を行なう。このとき、SPの値はSP((n−
1)b)からSP((n−1)a)に変化する。ret
命令1037では、スタック105の現在のSP値、つ
まりSP((n−1)a)の指す箇所から復帰後PC値
を読出してPCにセットし、第n−2コール先関数の処
理を再開する。このとき、SPの値は、SP((n−
1)a)からSP((n−2)b)に変化する。同様に
して、第1コール先関数102に戻って命令1025を
実行し、次にpop命令1026が読込まれると、スタ
ック105からデータを読出して、hlレジスタに格納
する操作を行なう。このとき、SPの値はSP(1b)
からSP(1a)に変化する。ret命令1027で
は、スタック105の現在のSP値、つまりSP(1
a)の指す箇所から復帰後PC値を読出してPCにセッ
トし、命令1014からメイン関数101の処理を再開
し、SPの値はSP(1a)からSP(0)に変化す
る。こうしてメイン関数105の処理に戻すことができ
る。
【0016】従来の第1のデータ処理装置のスタック管
理機能をフローチャートで示す図12を参照してこの従
来のデータ処理装置のスタック管理方法について説明す
ると、まず、データ処理装置であるシミュレータの起動
後、ユーザプログラムをダウンロードすると(ステップ
P1)、同時にデバッグ情報として得たスタック領域情
報を記憶して(ステップP2)からデータ処理装置はコ
マンド入力待ち(ステップP3)状態になる。コマンド
が入力されたことを検出すると(ステップP4)、コマ
ンドの処理を行ない(ステップP5)、そのコマンドが
データ処理装置の終了コマンドだったら(ステップP
6)データ処理装置の終了を行なう。また、コマンド処
理の結果、命令実行フラグがセットされていたら(ステ
ップP7)、1命令実行処理を開始する(ステップP
8)。
【0017】命令実行(ステップP9)中にスタック領
域以外のメモリへのスタック操作を行なうスタックオー
バーフローが発生していないかどうかのチェックを行な
い(ステップP10)、スタックオーバーフロー発生時
には、エラーメッセージを出して(ステップP12)命
令を中断し(ステップP13)、コマンド入力待ちモー
ドに入る(ステップP3)。
【0018】命令実行処理終了後、エラーやブレークの
発生によってセットされる命令実行中止フラグがOFF
のときは(ステップP11)次の命令の処理に移る。ブ
レークポイント等の処理をする必要が生じて命令実行中
止フラグがONされたときは命令実行中断処理を行なっ
て(ステップP13)、コマンド入力待ちモードに入る
(ステップP3)。
【0019】このように、従来の第1のデータ処理装置
では、スタック操作がスタック領域内で行なわれている
かどうかをチェックする機能はあったが、スタック領域
への不正な書込みやスタックポインタの不正操作をチェ
ックする機能はなかった。
【0020】上述したように、スタック領域には、関数
や割り込みの実行に際し復帰先PCやローカルデータ等
の退避を要する情報を格納することが可能であるが、も
しスタックに格納した値を不用意に書換えてしまうと、
正しいプログラムの実行が不可能になるという問題があ
る。例えば、退避されているPC値を書換えてしまう
と、正しい復帰先に戻すことができず、プログラムの流
れが変わったり、暴走したりしてしまう。その他の値が
書変わった場合も、データが破壊されたことになるの
で、復帰後の正しい実行ができなくなる。スタック領域
は通常メモリの一部に置かれているため、この領域のデ
ータは、スタック操作命令だけでなく通常メモリの書込
み命令によっても内容変化が生ずる危険性がある。この
ような問題点を解決するために、特開平5−18170
3号公報(文献1)記載のデータ処理装置である従来の
第2のデータ処理装置は、通常のスタック領域とは別
に、PC値を退避するための専用のスタック(以下PC
スタック)とPCスタックを指すPCスタックポインタ
(以下PCSP)およびPCSPの初期値を保持するレ
ジスタSR0とPCSPとともに変化するレジスタSR
1を持ち、PCスタックに対する書込みのチェックを可
能としている。
【0021】従来の第2のデータ処理装置のPCスタッ
ク111の状態と通常スタック112の状態をそれぞれ
示す図13(A),(B)を参照すると、プログラムの
実行を開始する前にまずPCSPの初期値がSR0とS
R1に転送される。以後、SR0の値はPCSPの値が
初期化されるまで変更しない。また、PC値以外の退
避,復帰動作には通常のスタック112を使い、cal
l命令やret命令のようなPC値の退避,復帰動作の
際のみPCスタック111を使用することとする。
【0022】次に、図10,図13を参照してこの従来
の第1のデータ処理装置で図10のプログラムを実行す
る際の動作について説明すると、まず、図13(A)に
示すPCスタック111の状態において、メイン関数1
01のcall命令1013が実行される前のPCSP
の値をPCSP(0)とし、第n−1コール先関数のc
all命令1034が実行された後のPCSPの値をP
CSP(n)とする。また、図13(B)に示す通常ス
タック112の状態において、第1コール先関数のpu
sh命令1021が実行される前のSPの値をSP
(0)とし、第nコール先関数のpush命令1041
が実行された後のSPの値をSP(n)とする。
【0023】メイン関数101の実行中にcall命令
1013が読込まれると、次の命令1014の先頭アド
レスPC(C0)の値を復帰後PC値としてPCスタッ
ク111に退避する。このとき、図13(A)に示すよ
うに、PCSPの値は退避動作に伴って、PCSP
(0)からPCSP(1)に変化する。PCSPの値の
変化と同時にSR1の値もPCSP(1)と同一値に変
化する。次にPCにcall命令1013のオブジェク
トで指定された分岐先アドレスPC(push1)が格
納され、第1第1コール先関数02の処理に移る。PC
(push1)を先頭アドレスとするpush命令10
21では、通常スタック112にレジスタhlのデータ
を退避する。このとき、(B)に示すようにSPの値は
SP(0)からSP(1)に変化する。
【0024】その後、順次命令を実行し、call命令
1024が読込まれると、次の命令1025の先頭アド
レスPC(C1)の値を復帰後PC値としてPCスタッ
ク111に退避する。このとき、PCSPの値は、PC
SP(1)からPCSP(2)に変化し、同時にSR1
の値もPCSP(2)と同一値に変化する。次にPCに
call命令1024で指定された分岐先アドレスPC
(push2)が格納され、次のコール先関数の処理に
移る。
【0025】同様にして、第n−1コール先関数103
実行中にcall命令1034が読込まれると、次の命
令1035の先頭アドレスPC(C(n−1))の値を
復帰後PC値としてスタック111に退避し、PCSP
の値はPCSP(n−1)からPCSP(n)に変化
し、SR1の値もPCSP(n)と同一値に変化する。
次にPC111に分岐先アドレスPC(pushn)が
格納され、第nコール先関数104の処理に移る。
【0026】PC(pushn)を先頭アドレスとする
push命令1041では、通常スタック112にレジ
スタhlのデータを退避する。すると、SPの値はSP
(n−1)からSP(n)に変化する。その後、順次命
令を実行し、pop命令1045が読込まれると通常ス
タック112からデータを読出してhlレジスタに格納
する操作を行なう。このとき、SPの値はSP(n)か
らSP(n−1)に変化する。また、ret命令104
6が読込まれると、スタック111の現在値PCSP
(n)の指す箇所から復帰後PC値を読出してPCにセ
ットし、命令1035から第n−1コール先関数の処理
を再開する。PCSPの値は、スタック111からの読
出し操作に伴ってPCSP(n)からPCSP(n−
1)に変化し、同時にSR1の値もPCSP(n−1)
と同一値に変化する。pop命令1036が読込まれる
と、スタック112からデータを読出して、hlレジス
タに格納する操作を行ない、SPの値はSP(n−1)
からSP(n−2)に変化する。ret命令1037で
は、PCスタック111の現在値のPCSP(n−1)
の指す箇所から復帰後PC値を読出してPCにセット
し、第n−2コール先関数の処理を再開し、PCSP値
はPCSP(n−1)からPCSP(n−2)に変化す
る。同時にSR1の値もPCSP(n−2)と同1値に
変化する。
【0027】同様にして、第1コール先関数102に戻
って命令1025を実行し、次にpop命令1026が
読込まれると、通常スタック112からデータを読出
し、hlレジスタに格納する操作を行ない、SPの値は
SP(1)からSP(0)に変化する。ret命令10
27では、PCスタック111の現在の値PCSP
(1)の指す箇所から復帰後PC値を読出してPCにセ
ットし、命令1014からメイン関数101の処理を再
開する。このとき、PCSPの値は、PCSP(1)か
らPCSP(0)に変化し、同時にSR1の値もPCS
P(0)と同一値に変化する。こうしてメイン関数10
1の処理に戻すことができる。
【0028】命令実行中のメモリへの書込み動作におい
ては、書込み対象のメモリのアドレスとSR0,SR1
の値とを比較し、上記メモリのアドレスがSR0,SR
1の範囲にある場合には書込み禁止エラーを発生する。
【0029】このように、この従来の第2のデータ処理
装置は、PC値の退避専用のPCスタック領域とその他
のデータの退避用の通常スタック領域との2種類のスタ
ック領域を持つことにより、スタック領域に退避したP
C値の不正な書換え発生の危険性が回避される。
【0030】しかし、元来1つだったスタック領域を2
つに分けることで、それらの操作用のスタックポインタ
が2つ必要になり、また、領域管理用のレジスタを設け
る必要があることで、データ処理装置に追加するハード
ウェア部品が増加してしまうという問題点がある。ま
た、通常スタックに退避した値の不正な書換えについて
は考慮されていないので、コール元のローカルデータ等
が破壊され、復帰後の正しい実行ができなくなる危険性
は回避されない。
【0031】
【発明が解決しようとする課題】上述した従来の第1の
データ処理装置は、スタック領域は通常メモリの一部に
置かれているためスタック操作命令だけでなく通常メモ
リの書込み命令によっても内容変化が生ずる不正書換え
の危険性があり、関数や割り込みの実行に際しスタック
領域に退避した復帰先PCやローカルデータ等の格納値
に上記不正書換えが生ずると正しいプログラムの実行が
不可能になるという欠点があった。
【0032】また、上記欠点の解決を図った従来の第2
のデータ処理装置は、PC値の退避専用のPCスタック
領域とその他のデータの退避用の通常スタック領域との
2種類のスタック領域を持つことにより、元来1つだっ
たスタック領域を2つに分けることでそれらの操作用の
2つのスタックポインタと各領域管理用のレジスタとを
備える必要があり、ハードウェア規模が増大してしまう
という欠点があった。
【0033】さらに、通常スタックに退避した値の不正
書換えについては考慮されていないので、コール元のロ
ーカルデータ等が破壊され、復帰後の正しい実行ができ
なくなる危険性は回避されないという欠点があった。
【0034】
【課題を解決するための手段】本発明のデータ処理装置
は、プログラムカウンタ値の退避用にスタック領域を使
用するマイクロコンピュータ用のプログラム開発用にユ
ーザプログラムのシミュレーションおよびデバッグを行
うデバッグ手段と、前記スタック領域を管理するスタッ
ク領域管理手段とを備えるデータ処理装置において、前
記スタック領域管理手段が、前記ユーザプログラムを構
成する関数および割込み処理ルーチンを含む命令が使用
する前記スタック領域を管理する使用スタック領域管理
手段と、前記スタック領域の不正なアクセス操作の検出
を行なうスタック領域アクセスチェック手段とを備えて
構成されている。
【0035】本発明のデータ処理装置は、プログラムカ
ウンタ値の退避用にスタック領域を使用するマイクロコ
ンピュータ用のプログラム開発用にユーザプログラムの
シミュレーションおよびデバッグを行うデータ処理方法
において、前記ユーザプログラムの処理実行開始前に前
記ユーザプログラムを構成する関数および割り込み処理
ルーチンを含む命令が使用する前記スタック領域の情報
を取得して書込み可能かどうかを示す書込み許可/不許
可範囲情報とともに前記スタック領域を管理するテーブ
ルであるスタック領域管理バッファに登録する第1のス
テップと、前記ユーザプログラムの処理実行中に変化す
る使用中の前記スタック領域の前記書込み許可/不許可
範囲情報を逐一前記スタック領域管理バッファに記録し
このスタック領域管理バッファを更新する第2のステッ
プと、前記書込み許可/不許可範囲情報を使って前記ス
タック領域への不正な書込みをチェックする第3のステ
ップとを有することを特徴とするものである。
【0036】
【発明の実施の形態】次に、本発明の実施の形態をブロ
ックで示す図1を参照すると、この図に示す本実施の形
態のデータ処理装置5を含むデータ処理システムは、ユ
ーザプログラム1と、ユーザプログラム1をオブジェク
トファイル3に変換する言語処理手段2と、オブジェク
トファイル3と、スタック使用情報やユーザのスタック
領域指定コマンドを含むデバッグ情報ファイル4と、デ
ータ処理装置5とを備える。
【0037】データ処理装置5は、ユーザプログラムの
シミュレーション/デバッグを行うデバッグ部51と、
スタック領域を管理するスタック領域管理部52とを備
える。
【0038】スタック領域管理部52は、従来のスタッ
クオーバーフローチエック機能を実行するオーバフロー
チェック部55に加えて、デバッグ情報ファイル4を基
に後述するスタック使用情報テーブル531,アクセス
モード情報バッファ532,スタック管理バッファ53
3を作成する使用スタック領域管理部53と、スタック
管理バッファ533のアクセスモード情報を基とにスタ
ック領域の書込みアクセスチェックを行なうアクセスチ
ェック部54とを備える。
【0039】次に、図1,使用スタック領域管理部53
の詳細を示す図2および本実施の形態のプログラムの一
例を示す図3を参照して本実施の形態の動作について説
明すると、言語処理手段2は、ユーザプログラム1をオ
ブジェクトファイル3に変換する。このとき、ユーザプ
ログラム1の各関数や割り込み処理ルーチンのスタック
使用情報等を格納したデバッグ情報ファイル4も生成す
る。データ処理装置5は、このオブジェクトファイル3
とデバッグ情報ファイル4とをダウンロードしてデバッ
グ部51でシミュレーションやデバッグ処理を行なう。
【0040】ところで、デバッグ情報ファイル4のスタ
ック使用情報やユーザのスタック領域指定コマンドから
スタック領域を決定することができる。こうして把握で
きるスタック領域情報を使ったスタック管理機能とし
て、従来の第1のデータ処理装置は、スタック操作がス
タック領域内で行なわれているかどうかをチェックする
スタックオーバーフローチェック機能を有していた。
【0041】上述のように、本実施の形態のデータ処理
装置では、スタック領域管理部52を強化し、上記スタ
ックオーバーフローのチェック機能に追加して、使用ス
タック領域管理部53とアクセスチェック部54とを追
加する。
【0042】図2を参照すると、使用スタック領域管理
部53は、ダウンロード時に取り込んだデバッグ情報フ
ァイル4を基に本実施の形態で用意するスタック使用情
報テーブル531,アクセスモード情報バッファ53
2,スタック管理バッファ533の各々を作成する。
【0043】スタック管理バッファ533には、シミュ
レーション開始前に、最初に実行する関数で使用するス
タック領域のアクセスモード情報を格納しておき、シミ
ュレーション中に関数コールや割り込み処理要求が発生
するとこの格納情報を更新する。アクセスチェック部5
4では、このスタック管理バッファ533のアクセスモ
ード情報を基にスタック領域の書込みアクセスチェック
を行なう。
【0044】これらの機能について、さらに詳しく説明
すると、まず、言語処理手段2は高級言語で記述された
ユーザプログラム1を、アセンブラ言語で記述した変換
ユーザプログラム10に変換した後、さらに機械語レベ
ルのオブジェクト3Aにまで変換し、オブジェクトファ
イル3に格納する。その時に同時にデバッグ情報ファイ
ル4を作成する。データ処理装置5では、このオブジェ
クトファイル3とデバッグ情報ファイル4をダウンロー
ドする。この時、スタック領域管理部52の使用スタッ
ク領域管理部53は、ダウンロードしたデバッグ情報フ
ァイル4を基にスタック使用情報テーブル531とアク
セスモード情報バッファ532を作成する。
【0045】スタック使用情報テーブル531は、ユー
ザプログラム1中に記述された関数や割り込み処理ルー
チン名の各々に対して、引数用に使用するスタック領域
のサイズと処理実行用に使用するスタック領域のサイズ
および参照対象のアクセスモード情報バッファ532の
先頭アドレスを記録したものである。アクセスモード情
報バッファ532は、スタック534の各1バイト分の
格納データ領域に対して書込み可能かどうかを各1ビッ
トのフラグで管理するバッファである。このアクセスモ
ード情報バッファ532のフラグ領域は、スタック使用
情報テーブル531の引数用スタック領域と使用スタッ
ク領域の各々のバイト数で表すサイズの和に加えて、初
期化時用およびメイン関数以外の場合のコール時の復帰
後PCの退避用のスタックとして2を加えた数だけのフ
ラグを格納できるフラグ領域を持つ。このフラグ領域は
最上位ビットから順に、引数用スタック領域管理フラグ
FI,復帰時PC退避用スタック領域管理フラグFSお
よび使用スタック領域管理フラグFUから成る。ただ
し、初期化時およびメイン関数の各々に対応するアクセ
スモード情報バッファ532は、使用スタック領域管理
フラグFUのみのフラグ領域を有し、フラグFI,FS
用のフラグ領域は有しない。
【0046】スタック534の引数用スタック領域と復
帰時PC退避用スタック領域は全て書込み禁止とみな
し、これらに対応する管理フラグFI,FSにはそれぞ
れ書込み禁止モードとして0の値を格納する。使用スタ
ック領域管理フラグFUについては、最初の2ビット分
はHLレジスタ退避領域に相当するので書込み禁止とみ
なし、上位2ビットを書込み禁止モードとして0の値を
格納する。残りの管理フラグは、自動変数領域に相当す
るので書込み許可とみなし、書込み許可モードとして1
の値を格納する。
【0047】また、使用スタック領域管理部53で、ス
タック管理バッファ533の領域を確保して、初期化し
ておく。
【0048】このスタック管理バッファ533は、アク
セスモードAMと、アクセスモードAMの情報の格納時
に参照したアクセスモード情報バッファ532の先頭ア
ドレスASとビット位置BPとの3つの情報から成る。
【0049】アクセスモードAMは、スタック領域アク
セスチェック部54でスタック領域534への書込みチ
ェック時に参照される情報であり、アクセスモード情報
バッファ532を参照してスタック534への書込みが
許可されている場合には1を、書込み禁止の場合には0
をそれぞれ格納する。同時に格納するアクセスモード情
報バッファ532のアドレスASとビット位置BPの情
報は、次に実行する関数や割り込み処理ルーチンがコー
ルされてスタック管理バッファ533の内容を更新する
必要が生じた時に、更新開始フレームを検索するために
使用する。
【0050】全スタック領域に対応する情報を格納する
バッファ領域を確保した場合は、次のような手順で初期
化を行なう。まず、スタック使用情報テーブル531か
ら初期化時および最初の実行対象関数で使用するスタッ
ク領域のサイズとこれらのスタック領域のアクセスモー
ドを示すアクセスモード情報バッファ532の先頭アド
レスASを求める。次に、そのアドレスASの指すアク
セスモード情報バッファ532の最上位ビットから、使
用するスタック領域のサイズ分の管理フラグの内容をス
タック管理バッファ533のアクセスモードAM欄に順
に格納していく。その際に、参照元のアクセスモード情
報バッファ532の先頭アドレスASとビット位置BP
も格納しておく。この時点で、スタック管理バッファ5
33には、Aで示す7フレーム分だけ情報が格納されて
いることになる。
【0051】こうした準備を行なった後、図3に示すよ
うな変換ユーザプログラム10の実行に移る。まず、p
ush命令11を実行するが、このときスタック524
において、SPはSP(0)からSP(1)に変化す
る。ここで、スタック領域アクセスチェック部54で行
なう書込みチェックは、現在のSPより古いスタック情
報への書込みに関してのみ行なうので、この場合はアク
セスチェックを行なわない。
【0052】次に、命令12までの各命令を実行するこ
とで、スタック534においてSPはSP(1)からS
P(2)に変化する。この場合はスタックへの値の書込
みは行なっていないので、チェックは行なわない。
【0053】次に命令13で、スタック534のSP
(1a)に対する書込みが発生する。これは、現在のS
Pより古いスタックへの書込みに相当するので、スタッ
ク領域アクセスチェック部54による書込みチェックを
行なう。まず、現在、書込みアクセスを要求されたスタ
ックSP(1a)に対応するスタック管理バッファ53
3の矢印Cのさすフレーム(以下フレームC)のアクセ
スモードAMをチェックする。この場合には、アクセス
モードAMは1であり、したがって書込み許可であるこ
とがわかるので、このフレームCへの書込みは不正では
ないことがわかる。ここで、このような書込みチェック
時にその書込み操作が不正であることが判明した場合に
はワーニングメッセージを出力し、強制書込みを行なう
かどうかの判断をユーザに質問し、ユーザから強制書込
み要求の回答があった場合には、強制的に書込みを行な
い命令実行処理を続ける。一方、強制書込みしない旨の
回答のあった場合には、命令実行処理を中断し次のコマ
ンド待ちの状態になる。
【0054】命令14から16までの一連のスタック領
域への書込み命令実行時も、上記13の命令処理時と同
様に書込みチェックを行なう。
【0055】次に命令17,18でpush命令を実行
するが、これらも命令11の実行時と同様に処理を行な
う。その際にスタック534において、SPの値はSP
(2)からSP(3)、SP(4)へと変化する。
【0056】次に、call命令19を実行すると、ま
ず、使用スタック領域管理部53で次のような手順でス
タック管理バッファ533のデータの更新を行なう。更
新開始フレームを求めるためには、まず、スタック使用
情報テーブル531からコール元の関数や割り込み処理
ルーチンの参照するアクセスモード情報バッファ532
の先頭アドレスを求め、そのアドレスが最初にスタック
管理バッファ533のアクセスモード情報バッファのア
ドレスAS欄に登録された箇所を先頭から検索する。こ
の場合には、検索対象アドレスはaddr mainで
あり、矢印Dの指すフレーム(以下フレームD)がこの
アドレスの最初の登録箇所に該当する。
【0057】次に、このフレームDのビット位置BPを
参照すると5なので、このフレームDを含め0から5ま
での6ビット分の情報がmain関数の使用スタックの
情報として格納されていることがわかる。よって、フレ
ームDから6フレーム先の矢印Eの指すフレーム(フレ
ームE)が更新開始フレームであることがわかる。
【0058】更新開始フレームが決定したので、次に、
スタック管理バッファ533のデータの更新を行なう。
まず、スタック使用情報テーブル531から、これから
実行を開始する関数や割り込み処理ルーチンで使用する
スタック領域のサイズと引数用スタックのサイズ,その
スタック領域のアクセスモードを示すアクセスモード情
報バッファの先頭アドレスを求める。次に、そのアドレ
スを指すアクセスモード情報バッファ532(ここで
は、addr subの指すバッファ)の最上位ビット
から、使用するスタック領域のサイズと引数用スタック
領域のサイズに復帰時PC退避分の2を加えた分の管理
フラグの内容をスタック管理バッファ533の更新開始
フレームEから順にアクセスモードAM欄に格納してい
く。その際に、参照元のアクセスモード情報バッファ5
32の先頭アドレスAS(ここではaddr sub)
とビット位置BPもそれぞれ格納しておく。この時点
で、スタック管理バッファ533には、A,Bで示す1
5フレーム分だけ情報が格納されていることになる。
【0059】このcall命令19の実行時にもスタッ
ク534への書込みが発生するが、現在のSPより新し
いスタック情報への書込みなので書込みチェックは行な
わない。この命令19の実行によって、SPはスタック
534の状態においてSP(4)からSP(5)に変化
する。
【0060】次に、push命令26を実行するが、こ
のときスタック534において、SPはSP(5)から
SP(6)に変化する。この場合も現在のSPより新し
いスタック情報への書込みなので書込みチェックを行な
わない。
【0061】pop命令27でSPの値はスタック53
4の状態においてSP(6)からSP(5)に変化す
る。
【0062】同様にret命令28でSPの値はスタッ
ク534においてSP(5)からSP(4)に変化し、
main関数の処理に戻る。
【0063】命令20〜24の一連のpop命令でスタ
ック534におけるSPの値はSP(0)まで変化して
いき、次のret命令25でこのシミュレーションが終
了する。
【0064】このようにしてユーザプログラムのシミュ
レーションを実行することにより、PCやレジスタ値の
退避箇所などの不正書込みの発生によりその後のシミュ
レーションに支障をきたすスタック領域への不正書込み
を防止できる。
【0065】次に、本発明のデータ処理方法の第1の実
施の形態の処理をフローチャートで示す図4および図
1,図2を参照して、本実施の形態の動作について説明
すると、まず、データ処理装置5の起動後、ユーザプロ
グラム1をダウンロードする(ステップS1)と同時に
デバッグ情報ファイル4を読込んで、図2で示すような
スタック使用情報テーブル531と、アクセスモード情
報バッファ532を作成する(ステップS2)。また、
そのスタック使用情報テーブル531とアクセスモード
情報バッファ532を使って、スタック管理バッファ5
33の領域確保と初期化を行なう(ステップS3)。
【0066】この初期化処理後にコマンド入力待ち(ス
テップS4)状態になるが、コマンドが入力されたこと
を検出すると(ステップS5)、コマンドの処理を行な
い(ステップS6)、そのコマンドがデータ処理装置5
の終了コマンドだったら(ステップS7)データ処理装
置5の終了を行なう。
【0067】また、コマンド処理の結果、命令実行フラ
グがセットされていたら(ステップS8)、1命令実行
処理を開始する(ステップS9)。この命令が、cal
l命令やbrk命令等の関数,割り込み処理ルーチン処
理開始命令だったら(ステップS10)、スタック管理
バッファ533の情報を更新する(ステップS11)。
どの命令実行時にも(ステップS12)、スタックアク
セスチェックを行なうが、これは、従来からのスタック
オーバーフローチェックに加えて、スタック管理バッフ
ァ533による書込みチェックである。まず、スタック
オーバーフローチェックを行ない、ここでスタックオー
バーフローが発生していたら(ステップS13)エラー
メッセージを出して(ステップS14)命令実行を中断
する(ステップS15)。スタックオーバーフローチェ
ック後には、現在のSPと書込み希望アドレスを比較す
ることで、古いスタック領域への書込みが起こったかど
うかをチェックする(ステップS16)。もし、このよ
うな書込みが発生していた場合には、スタック管理バッ
ファ533による書込みチェックを行なう(ステップS
17)。スタック管理バッファ533の対応するスタッ
クのアクセスモードが書込み禁止モードだったら(ステ
ップS18)ワーニングメッセージを発行して(ステッ
プS19)、強制的に書込みを行なうかどうかの選択を
促し(ステップS20)、強制処理要求時にはスタック
への書込み処理を行なう(ステップS21)。強制処理
の非要求時には命令実行を中止し(ステップS22)、
コマンド入力待ちモードに戻る(ステップS4)。
【0068】各命令の処理の実行後、エラーやブレーク
の発生によってセットされる命令実行中止フラグがOF
Fの場合は(ステップS23)次の命令の処理に移る。
ブレークポイント等の処理をする必要が生じて命令実行
中止フラグがONされたら、命令実行中断処理を行なっ
て(ステップS24)コマンド入力待ちモードに入る
(ステップS4)。
【0069】次に、本発明の第2の実施の形態について
説明する。
【0070】上述の第1の実施の形態では、図4のステ
ップS19のように、書込み許可モードのスタック以外
に対する書込み処理が発生した場合には、常にワーニン
グメッセージを出していたが、実際には、このようなス
タック操作が全て不正な処理であるわけではない。書込
み許可モードのスタック以外のスタック領域に対する正
常書込み処理を発生するユーザプログラム1Aの一例を
示す図5と、対応する本実施の形態のスタック管理バッ
ファ533Aの構成を示す図6を参照してこの種の正常
書込み処理の例について説明すると、ユーザプログラム
1Aは、第1の実施の形態のプログラム1に命令31の
一行を追加したものであり、不正なプログラムではな
い。この一行の命令31は、アセンブラ言語に変換され
た変換ユーザプログラム10Aでは、命令32〜39が
追加された形になる。したがって、データ処理装置5で
命令32の一つ前の命令までを実行したときのスタック
使用情報テーブル531とアクセスモード情報バッファ
532とスタック管理バッファ533Aとスタック53
4Aの状態は、第1の実施の形態の場合と変わらない。
【0071】ここで、命令36ではスタックへの書込み
処理を行なうが、書込み対象のスタックは図6のスタッ
クの状態534AのSP(3a)にあたり、その時点の
SPの値、つまりSP(6)より古いスタックに相当す
るので書込みチェックを行なう必要がある。スタック管
理バッファ533Aの書込み希望スタックSP(3a)
に相当するフレームは矢印Aの指すフレームAなので、
そのフレームAのアクセスモードAMをみると、値が0
すなわち書込み禁止モードになっている。この場合、第
1の実施の形態では常にワーニングメッセージを発行し
て、ユーザに強制書込みを行なうかどうかの確認を求
め、強制処理要求が回答された場合にはスタックへの書
込みを行なってそのまま実行を続け、その他の場合には
命令実行処理を中断する。
【0072】命令39でも古いスタックへの書込み処理
が発生するが、同様にスタック管理バッファ533Aの
書込み希望スタックに相当し矢印Bの指すフレームBを
チェックすると、アクセスモードAMより書込み禁止な
ので、命令36の場合と同様に第1の実施の形態では常
にワーニングメッセージを発行することになる。
【0073】しかし、これら命令36,39は、ユーザ
が意図して引数の書換えを行なうのであり、不正アクセ
スではない。
【0074】このような場合に、常にワーニングメッセ
ージを発行するのではなく、一度ワーニングメッセージ
の発行によりユーザに強制的書込み処理実行の確認を求
めた後、強制書込み要求が選択された場合には、対応の
スタック管理バッファ533AのアクセスモードAMと
アクセスモード情報バッファ532Aの対応の管理フラ
グを書込み許可に変更して、その後ワーニングメッセー
ジの発行を停止するようにするのが、第2の実施の形態
の主旨である。
【0075】すなわち、第2の実施の形態では、スタッ
ク管理バッファ533AのアクセスモードAMは、ユー
ザのスタックへの強制書込み要求を受けてそのモードA
Mを書込み許可に変更することができる。また、同時に
スタック管理バッファ533AのアクセスモードAMを
書換えたフレームからそのアクセスモードAMの登録時
に参照したアクセスモード情報バッファ532Aのアド
レスと管理フラグが検索できるので、その情報を基にア
クセスモード情報バッファ532の管理フラグの値を書
込み許可に変更できる。
【0076】このような処理を追加することによって、
ユーザの意図を反映したスタック管理が可能になる。
【0077】図6および本発明のデータ処理方法の第2
の実施例の処理フローを図4と共通の構成要素には共通
の参照文字/数字を付して同様にフローチャートで示す
図7を参照すると、この実施の形態の前述の第1の実施
の形態との相違点は、ワーニングメッセージの発行(ス
テップS19)に応答してステップS20で強制処理を
選択し、ステップS21の強制処理実行後にスタック管
理バッファのアクセスモード変更するステップS25
と、アクセスモード情報バッファのアクセスモードを変
更するステップS26とを付加したことである。
【0078】本実施の形態のデータ処理方法の動作につ
いて説明すると、データ処理装置の起動後、ステップS
1のユーザプログラムのダウンロードからステップS2
1の強制処理の実行までは第1の実施の形態と同様であ
る。本実施の形態では、このステップS21の強制処理
実行時に、強制書込み処理対象スタックに対応するスタ
ック管理バッファ533Aのアクセスモードの変更(ス
テップS25)とアクセスモード情報バッファ532A
のアクセスモードの変更(ステップS26)を行なう。
例えば、スタック管理バッファ533AのフレームAが
強制書込み許可された場合には、矢印Cの指すアクセス
モードAMを0(書込み禁止)から1(書込み許可)に
変更する。また、このフレームは、addr subの
値を先頭アドレスに持つアクセスモード情報バッファ5
32のビット5の管理フラグを参照していることがわか
るので、アクセスモード情報バッファ532の矢印Dの
指す管理フラグの内容を0(書込み禁止)から1(書込
み許可)に変更する。
【0079】このような処理を行なうことで、このスタ
ック情報がスタックに積まれている間は、スタック管理
バッファ533Aのアクセスモードが書込み許可に書換
わっているので、次にこのスタックに対して書込みが行
なわれた場合には、ワーニングが発生することはない。
【0080】また、再度スタックに積まれる場合にも、
アクセスモード情報バッファ532Aの対応する管理フ
ラグのモードが書込み許可モードになっているのでスタ
ック管理バッファ533A更新時にもアクセスモードが
書込み許可になり、そのスタックへの書込み処理時にワ
ーニングが発生することはなくなる。
【0081】以下第1の実施の形態と同様に、各命令の
処理の実行終了後の命令実行中止フラグのOFFの確認
(ステップS23)結果、命令実行中止フラグがONの
場合は命令実行中断処理(ステップS24)を行ない、
コマンド入力待ちモードに入る(ステップS4)。
【0082】
【発明の効果】以上説明したように、本発明のデータ処
理装置およびデータ処理方法は、スタック領域管理手段
が、ユーザプログラムを構成する関数および割込み処理
ルーチンを含む命令用のスタック領域を管理する使用ス
タック領域管理手段と、上記スタック領域の不正なアク
セス操作の検出を行なうスタック領域アクセスチェック
手段とを備えているので、スタック領域の不正書込みに
よって発生するデータの破壊やプログラムの不正実行や
プログラムの暴走等を防止することができるという効果
がある。
【図面の簡単な説明】
【図1】本発明のデータ処理装置の一実施の形態を示す
ブロック図である。
【図2】本実施の形態の使用スタック領域管理部の状態
を模式的に示す説明図である。
【図3】ユーザプログラムの一例を模式的に示す説明図
である。
【図4】本発明のデータ処理方法の第1の実施の形態を
示すフローチャートである。
【図5】ユーザプログラムの他の一例を模式的に示す説
明図である。
【図6】図5のユーザプログラムに対応する使用スタッ
ク領域管理部の状態を模式的に示す説明図である。
【図7】本発明のデータ処理方法の第2の実施の形態を
示すフローチャートである。
【図8】PC値をスタックに退避/復帰する動作を説明
する説明図である。
【図9】PC値とレジスタ値とをスタックに退避/復帰
する動作を説明する説明図である。
【図10】関数がネスト状にコールされる場合のデータ
のスタックへの退避/復帰する動作を説明する説明図で
ある。
【図11】図10のプログラムの退避/復帰用に使用す
るスタックの状態を示す説明図である。
【図12】従来の第1のデータ処理装置によるデータ処
理方法を示すフローチャートである。
【図13】従来の第2のデータ処理装置の動作説明用の
スタック領域を模式的に示す説明図である。
【符号の説明】
1,1A ユーザプログラム 2 言語処理手段 3 オブジェクトファイル 4 デバッグ情報ファイル 5 データ処理装置 10,10A 変換ユーザプログラム 51 デバッグ部 52 スタック領域管理部 53 使用スタック領域管理部 54 アクセスチエック部 55 オーバロードチエック部 531 スタック使用情報テーブル 532,532A アクセスモードバッファ 533,533A スタック管理バッファ 83,93,105,111,112,524,524
A スタック 81,91,101 メイン関数 82,92,102〜104 コール先関数

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】 プログラムカウンタ値の退避用にスタッ
    ク領域を使用するマイクロコンピュータ用のプログラム
    開発用にユーザプログラムのシミュレーションおよびデ
    バッグを行うデバッグ手段と、前記スタック領域を管理
    するスタック領域管理手段とを備えるデータ処理装置に
    おいて、 前記スタック領域管理手段が、前記ユーザプログラムを
    構成する関数および割込み処理ルーチンを含む命令が使
    用する前記スタック領域を管理する使用スタック領域管
    理手段と、 前記スタック領域の不正なアクセス操作の検出を行なう
    スタック領域アクセスチェック手段とを備えることを特
    徴とするデータ処理装置。
  2. 【請求項2】 前記使用スタック領域管理手段が、前記
    関数および前記割り込み処理ルーチンの各々に対して引
    数用に使用する前記スタック領域のサイズと処理実行用
    に使用する前記スタック領域のサイズと参照対象のアク
    セスモード情報バッファの先頭アドレスとを記録したス
    タック使用情報テーブルと、 前記スタック領域の各単位格納データ領域毎に書込み可
    能かどうかを各1ビットのフラグで管理する前記アクセ
    スモード情報バッファと、 前記スタック領域アクセスチェック手段による前記スタ
    ック領域への書込みチェック時の参照対象であるアクセ
    スモードとこのアクセスモードの格納時に参照した前記
    アクセスモード情報バッファの先頭アドレスとビット位
    置との各々の情報を有するスタック管理バッファとを備
    えることを特徴とする請求項1記載のデータ処理装置。
  3. 【請求項3】 プログラムカウンタ値の退避用にスタッ
    ク領域を使用するマイクロコンピュータ用のプログラム
    開発用にユーザプログラムのシミュレーションおよびデ
    バッグを行うデータ処理方法において、 前記ユーザプログラムの処理実行開始前に前記ユーザプ
    ログラムを構成する関数および割り込み処理ルーチンを
    含む命令が使用する前記スタック領域の情報を取得して
    書込み可能かどうかを示す書込み許可/不許可範囲情報
    とともに前記スタック領域を管理するテーブルであるス
    タック領域管理バッファに登録する第1のステップと、 前記ユーザプログラムの処理実行中に変化する使用中の
    前記スタック領域の前記書込み許可/不許可範囲情報を
    逐一前記スタック領域管理バッファに記録しこのスタッ
    ク領域管理バッファを更新する第2のステップと、 前記書込み許可/不許可範囲情報を使って前記スタック
    領域への不正な書込みをチェックする第3のステップと
    を有することを特徴とするデータ処理方法。
  4. 【請求項4】 前記第3のステップで前記スタック領域
    への不正な書込みアクセスの発生を検出したときこの旨
    を知らせるワーニングメッセージを発行する第4のステ
    ップと、 ユーザに対し前記書込みアクセス処理を強制的に実行す
    る強制処理の要否の質問を発行する第5のステップと、 前記質問に対する回答として前記強制処理を選択した場
    合に前記書込みアクセス処理を実行する第6のステップ
    とを含むことを特徴とする請求項3記載のデータ処理方
    法。
  5. 【請求項5】 前記第3のステップで前記スタック領域
    への不正な書込みアクセスの発生を検出したときこの旨
    を知らせるワーニングメッセージを発行する第4のステ
    ップと、 ユーザに対し前記書込みアクセス処理を強制的に実行す
    る強制処理の要否の質問を発行する第5のステップと、 前記質問に対する回答として前記強制処理を選択した場
    合に前記書込みアクセス処理を実行するとともにこの書
    込みアクセスに対し前記スタック領域管理バッファの前
    記書込み許可/不許可範囲情報を書込み許可に変更する
    第7のステップを含むことを特徴とする請求項3記載の
    データ処理方法。
JP7282959A 1995-10-31 1995-10-31 データ処理装置およびデータ処理方法 Expired - Fee Related JP2850808B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP7282959A JP2850808B2 (ja) 1995-10-31 1995-10-31 データ処理装置およびデータ処理方法
US08/739,829 US5953529A (en) 1995-10-31 1996-10-30 Data processor with a debug device and a stack area control unit and corresponding data processing method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP7282959A JP2850808B2 (ja) 1995-10-31 1995-10-31 データ処理装置およびデータ処理方法

Publications (2)

Publication Number Publication Date
JPH09128267A true JPH09128267A (ja) 1997-05-16
JP2850808B2 JP2850808B2 (ja) 1999-01-27

Family

ID=17659349

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7282959A Expired - Fee Related JP2850808B2 (ja) 1995-10-31 1995-10-31 データ処理装置およびデータ処理方法

Country Status (2)

Country Link
US (1) US5953529A (ja)
JP (1) JP2850808B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2005024630A1 (ja) * 2003-09-04 2005-03-17 Science Park Corporation 不正コード実行の防止方法および防止プログラム
JP2006053760A (ja) * 2004-08-12 2006-02-23 Nippon Telegr & Teleph Corp <Ntt> バッファオーバーフロー脆弱性分析方法、データ処理装置、分析情報提供装置、分析情報抽出処理用プログラムおよび分析情報提供処理用プログラム
JP2007207250A (ja) * 2006-02-01 2007-08-16 Avaya Technology Llc ソフトウェア複製

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5948113A (en) * 1997-04-18 1999-09-07 Microsoft Corporation System and method for centrally handling runtime errors
US6311325B1 (en) * 1998-10-22 2001-10-30 International Business Machines Corporation Method and apparatus for profiling processes in a data processing system background of the invention
DE19846673A1 (de) * 1998-10-09 2000-04-20 Siemens Ag Verfahren zur Verbindung von Stackmanipulationsangriffen bei Funktionsaufrufen
JP3646631B2 (ja) * 2000-08-04 2005-05-11 ヤマハ株式会社 電子機器
US7137109B2 (en) * 2002-12-17 2006-11-14 Hewlett-Packard Development Company, L.P. System and method for managing access to a controlled space in a simulator environment
JP4732874B2 (ja) * 2005-11-28 2011-07-27 株式会社エヌ・ティ・ティ・ドコモ ソフトウェア動作モデル化装置、ソフトウェア動作監視装置、ソフトウェア動作モデル化方法及びソフトウェア動作監視方法
US7752427B2 (en) * 2005-12-09 2010-07-06 Atmel Corporation Stack underflow debug with sticky base

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3786432A (en) * 1972-06-20 1974-01-15 Honeywell Inf Systems Push-pop memory stack having reach down mode and improved means for processing double-word items
GB1441816A (en) * 1973-07-18 1976-07-07 Int Computers Ltd Electronic digital data processing systems
US4315314A (en) * 1977-12-30 1982-02-09 Rca Corporation Priority vectored interrupt having means to supply branch address directly
JPS57153339A (en) * 1981-03-18 1982-09-21 Hitachi Ltd Information processor
US4488227A (en) * 1982-12-03 1984-12-11 Honeywell Information Systems Inc. Program counter stacking method and apparatus for nested subroutines and interrupts
US5132972A (en) * 1989-11-29 1992-07-21 Honeywell Bull Inc. Assembly language programming potential error detection scheme sensing apparent inconsistency with a previous operation
US5355469A (en) * 1990-07-30 1994-10-11 Delphi Data, A Division Of Sparks Industries, Inc. Method for detecting program errors
US5274817A (en) * 1991-12-23 1993-12-28 Caterpillar Inc. Method for executing subroutine calls
JPH05181703A (ja) * 1992-01-07 1993-07-23 Mitsubishi Electric Corp データ処理装置
US5613063A (en) * 1994-07-01 1997-03-18 Digital Equipment Corporation Method and apparatus for checking validity of memory operations

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2005024630A1 (ja) * 2003-09-04 2005-03-17 Science Park Corporation 不正コード実行の防止方法および防止プログラム
JPWO2005024630A1 (ja) * 2003-09-04 2007-11-08 サイエンスパーク株式会社 不正コードの防止方法および防止プログラム
JP4518564B2 (ja) * 2003-09-04 2010-08-04 サイエンスパーク株式会社 不正コード実行の防止方法、不正コード実行の防止用プログラム、及び不正コード実行の防止用プログラムの記録媒体
US8042179B2 (en) 2003-09-04 2011-10-18 Science Park Corporation False code execution prevention method, program for the method, and recording medium for recording the program
JP2006053760A (ja) * 2004-08-12 2006-02-23 Nippon Telegr & Teleph Corp <Ntt> バッファオーバーフロー脆弱性分析方法、データ処理装置、分析情報提供装置、分析情報抽出処理用プログラムおよび分析情報提供処理用プログラム
JP4643201B2 (ja) * 2004-08-12 2011-03-02 日本電信電話株式会社 バッファオーバーフロー脆弱性分析方法、データ処理装置、分析情報提供装置、分析情報抽出処理用プログラムおよび分析情報提供処理用プログラム
JP2007207250A (ja) * 2006-02-01 2007-08-16 Avaya Technology Llc ソフトウェア複製
JP4563412B2 (ja) * 2006-02-01 2010-10-13 アバイア テクノロジー エルエルシー ソフトウェア複製

Also Published As

Publication number Publication date
JP2850808B2 (ja) 1999-01-27
US5953529A (en) 1999-09-14

Similar Documents

Publication Publication Date Title
US6578094B1 (en) Method for preventing buffer overflow attacks
US5701493A (en) Exception handling method and apparatus in data processing systems
US6529985B1 (en) Selective interception of system calls
US8806474B2 (en) Computer-hardware, life-extension apparatus and method
US6173248B1 (en) Method and apparatus for handling masked exceptions in an instruction interpreter
JP2850808B2 (ja) データ処理装置およびデータ処理方法
US6925522B2 (en) Device and method capable of changing codes of micro-controller
JPH1196002A (ja) データ処理装置
JPH10214203A (ja) 情報処理装置
JPH07152551A (ja) コンピュータシステムおよびプログラム実行方法
JP2000029690A (ja) デ―タ処理の方法および装置
JPH1153249A (ja) メモリ管理方法
JP2715988B2 (ja) プログラムシミュレータ装置及びプログラムデバッグ方法
JP2562838B2 (ja) プロセッサ及びストアバッファ制御方法
JPH1021067A (ja) プログラムの動的修正方法
JPH10283188A (ja) プロセッサにおけるレジスタ保護方法
JPH11134202A (ja) タスク切替え装置
KR960029969A (ko) 파이프라인 처리기능을 갖는 데이타프로세서
JPH05181703A (ja) データ処理装置
JPH05346872A (ja) 異種計算機命令の疑似実行方法および装置
JPH1115659A (ja) 分岐予測方式
JPS6149695B2 (ja)
JP2002132528A (ja) マイクロコンピュータ、及び、空きメモリ領域/スタック解放領域の初期化方法
JPH0560130B2 (ja)
JPH10269081A (ja) プロセッサおよびその使用方法

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 19981013

LAPS Cancellation because of no payment of annual fees