下面的程序为什么会栈溢出。
assume cs:codesg,ds:datasg,ss:stackdatasg segment
dw 123h,234h,345h,456h,567h,678h,789h,890h
datasg ends
stack segment
dw 8 dup(0)
stack ends
codesg segment
start:mov ax,datasg
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
push ax
push ax
push ax
push ax
push ax
push ax
push ax
mov ax,4c00h
int 21h
codesg ends
end start
在单步执行到第六次push后,查看data段,数据没有被改变。
根据王爽老师的汇编语言第二版教材,第十二,十三章,
我知道了单步操作是中断,要进行压栈操作。pushf.
push cs,push ip
这是进行了三次压栈操作。可是在程序中,在进行第七次压栈时
直接无效操作。给踢出程序了。
如果把dw 8 dup(0)给改为6,那么第五次压栈操作时就给踢出去了。
但是,数据段的内容并没有改变。
进行第七次压栈时。
这是进行第三次压操作后,栈段的数据,那么第四次压栈就应该会溢出了。
那么我的问题就是,单步操作要进行三次压栈,另外的两个字的内容是被什么操作
改变的。溢出的数据存在了那儿。是存在了13c7:fffe 开始的地方了吗。