| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4846 人关注过本帖
标题:下面的程序为什么会栈溢出。
只看楼主 加入收藏
随风的飞叶
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:90
专家分:158
注 册:2015-10-8
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:14 
下面的程序为什么会栈溢出。
assume cs:codesg,ds:datasg,ss:stack
datasg 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 开始的地方了吗。
搜索更多相关主题的帖子: start 
2015-10-13 11:24
随风的飞叶
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:90
专家分:158
注 册:2015-10-8
收藏
得分:0 
版主大神,请指教。
2015-10-13 16:22
随风的飞叶
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:90
专家分:158
注 册:2015-10-8
收藏
得分:0 
如果程序修改下。
assume cs:codesg,ds:datasg
datasg segment
     dw 123h,234h,345h,456h,567h,678h,789h,890h

     dw 8 dup(0)     
datasg ends
codesg segment
start:mov ax,datasg
      mov ds,ax
      mov ss,ax
      mov sp,32
     push ax
       push ax
     push ax
     push ax
     push ax
     push ax
     push ax
     mov ax,4c00h
     int 21h
codesg ends
end start
在第四次压栈操作时,数据就被改变。但是程序能完成。   
2015-10-13 16:24
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 3楼 随风的飞叶
这样压会破坏前面定义的数据。

能编个毛线衣吗?
2015-10-13 17:28
随风的飞叶
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:90
专家分:158
注 册:2015-10-8
收藏
得分:0 
主要是第一贴的问题。执行到第七次压栈就会给踢出程序。10 00 c8 13 d4 0d我明白是怎么来的。但是前面的c7 13 00 00是怎么来的弄不明白。还有,压栈后溢出的数据应该存在13c7:fffe 13c7:fffc.......可是怎么就程序给踢出来了,后面全是00 00的。
图片附件: 游客没有浏览图片的权限,请 登录注册
2015-10-13 19:06
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11759
专家分:43407
注 册:2006-5-13
收藏
得分:0 
只能说明你堆栈的容量定义的太小了。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-10-13 19:53
随风的飞叶
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:90
专家分:158
注 册:2015-10-8
收藏
得分:0 
我知道我定义的栈小,问题不是这个。我的问题是,单步操作三次压栈,那两个字的内容是怎么改变的。为什么第七次压栈时程序给踢出来了。看五楼的图。
2015-10-13 20:01
随风的飞叶
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:90
专家分:158
注 册:2015-10-8
收藏
得分:0 
就是单步操作除了pushf,push cs,push ip外,还有两次压栈,这两次压栈是那来的。是外中断引起的吗,刚看到外中断这章,看不明白。
2015-10-13 20:05
随风的飞叶
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:90
专家分:158
注 册:2015-10-8
收藏
得分:0 
操作改为中断。
2015-10-13 20:08
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11759
专家分:43407
注 册:2006-5-13
收藏
得分:0 
以下是引用随风的飞叶在2015-10-13 20:05:53的发言:

就是单步操作除了pushf,push cs,push ip外,还有两次压栈,这两次压栈是那来的。是外中断引起的吗,刚看到外中断这章,看不明白。

debug在执行程序的时候也要用到堆栈的。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-10-14 07:30
快速回复:下面的程序为什么会栈溢出。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015910 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved