ranbo_q 发表于 2017-5-22 12:00:56

6.1章节第一个试题,关于栈,为什么会溢出? --------求问

代码如下:
assume cs:codesg
codesg segment
        dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
        dw 0,0,0,0,0,0,0,0
       
start:        mov ax, cs
                mov ss, ax
                mov sp, 32
                mov bx, 0
                mov cx, 8
        s:        push cs:
                add bx, 2
                loop s
               
                mov bx, 0
                mov cx, 8
               
        s0:        pop cs:
                add bx, 2
                loop s0
               
                mov ax,4c00H
                int 21H
codesg ends
end start



ranbo_q 发表于 2017-5-22 12:04:00

上传不了更多图片了...最后我手打上来吧
0BA6:0000 23 01 56 04 89 07 BC 0A-EF 0D ED 0F A6 0B 00 00

人造人 发表于 2017-5-22 13:01:00

栈太小了

assume cs:codesg

codesg segment
        dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
       
        db 10h dup (?)
       
        dw 0,0,0,0,0,0,0,0
sp_top:

start:
        mov ax, cs
        mov ss, ax
        mov sp, sp_top

        mov bx, 0
        mov cx, 8
s:
        push cs:
        add bx, 2
        loop s

       
        mov bx, 0
        mov cx, 8
s0:
        pop cs:
        add bx, 2
        loop s0

        mov ax, 4c00H
        int 21H
       
codesg ends
end start

ranbo_q 发表于 2017-5-22 13:09:15

人造人 发表于 2017-5-22 13:01
栈太小了

谢谢版主回复~原来是这样,要不然还真不知道是什么原因,看来栈里面还有不可告人的秘密。

人造人 发表于 2017-5-22 13:12:58

ranbo_q 发表于 2017-5-22 13:09
谢谢版主回复~原来是这样,要不然还真不知道是什么原因,看来栈里面还有不可告人的秘密。

^_^

zlj19931010 发表于 2017-5-22 17:08:42

本帖最后由 zlj19931010 于 2017-5-22 17:12 编辑

你圈出来的那部分,到底是被什么数据覆写了,求解{:10_249:}

如果是系统自己覆写的,对代码执行没有影响吧

ranbo_q 发表于 2017-5-22 18:27:45

zlj19931010 发表于 2017-5-22 17:08
你圈出来的那部分,到底是被什么数据覆写了,求解

如果是系统自己覆写的,对代码执行没有影响 ...

图片里的数据是刚要执行push cs:0000=0123
原本0BA6:0010 为自己定义的栈空间,可是执行到push 程序就多出这些数据,
大概循环4次,栈顶溢出,把那些部分溢出到代码段,0BA6:000~F处,
把原来DS内容给覆盖了,
0BA6:0000 23 01 56 04 89 07 BC 0A-EF 0D ED 0F A6 0B 00 00
页: [1]
查看完整版本: 6.1章节第一个试题,关于栈,为什么会溢出? --------求问