鱼C论坛

 找回密码
 立即注册
查看: 1683|回复: 7

捉到初学汇编的一个误区,这个地方被小甲鱼老师忽略了

[复制链接]
发表于 2013-12-30 12:29:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在学习小甲鱼老师的视频的时候,第五章有一个这样的题,看图

代码下面一点没截到图

代码下面一点没截到图



在这章中,小甲鱼老师没有为我们亲自单步调试,哎呀,这天意啊!前面小甲鱼老师都是亲自调试的
所以这个地方我是自己写好程序自己单步调试的,但是最后无论如何都无法通过,整整纠结了一天,睡觉做梦都在想这个问题,因为代码没错,我最后是照抄的了,可是还是出错和崩溃,就在今天,突然间想到了问题所以,豁然开朗
其实我在想,还是我的只是不够,如果是老手有经验的应该一看就知道会出问题的
还是真心希望各位大牛能多指点下我们这样潜心学习的好学生
分析问题: 图上下都有一点残缺,希望大家能看懂
1.首先定义了数据段,8个字  (系统分配了12个字节空间)
2.接着定义了栈,也是8个字 (这里把这8个字空间当作栈使用了)
3.后面我们数据段的8个字依次放入栈中,然后依次取出,达到逆过来存放的效果!这么想应该是对的,什么都对得上
4.但是当亲自编好程序运行的时候就出错了,有2种
4.1系统分配的内存是先是数据,接着是栈数据,在接着就是代码段了!!当我们运行程序后,把第一个数据放入到栈中,栈中是会自动出现(好像是)3个字的系统数据,这三个数据还受到了保护,栈中放入一个数据这三个字的系统数据就和sp一样自动往后退,我自己发现是不能被直接覆盖的,而我们定义的栈空间只有8个字大小,结果可想而知,最后就是系统数据被排挤到栈的起始地址后(因为栈的前面是数据段,我发现这几个系统数据只存在于栈中,无法越过栈到数据段中),其中有一个是cs指向的段地址,当这个段地址被排挤掉后就是程序崩溃的时候
4.2我开始想到这个问题,所以就把sp的栈顶指针数据加大了一点,指向更大一点的偏移,这样应该不会说cs指向的这个段地址被排挤出栈! 但是系统分配的的时候,栈段和代码段是相连着的,我们把sp望栈后面指向,在把数据往里面方,其不知道sp指向的地址同时也是代码段的代码呢?我们在栈中存放数据其实也就是在覆盖代码段的中的代码,导致单步调试的时候,程序出现不认识的乱汇编指令
经过一天的冥思苦想,在今天终于得到答案了,虽然很是傻,但是还是很开心的!因为毕竟是自己想到的,而不是看,听别人得到的答案
解决1.把栈中定义的字型数据增加,这样系统会把栈段和代码段的距离拉开,这样就不会出现错误
       2.把sp指向的栈顶指针继续向后,也就是sp指向我们的代码段结束的后面,前面是指向16,我们应该算上代码段所占用的字节,加起来一起算才行,这样猜不会是sp和ip两个重合出错,也不会是栈存放数据时覆盖了代码段的代码

继续学习,要是多学习,这个问题应该不算是问题,谁叫我还是新手呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-30 12:36:07 | 显示全部楼层
帮你顶一个。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-30 12:39:03 | 显示全部楼层
图片搞错了,真的不好意思啊
222.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-30 13:01:07 | 显示全部楼层
把栈放到代码段本身就不合适!容易修改指令代码!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-30 13:05:44 | 显示全部楼层
本帖最后由 深渊 于 2013-12-30 13:13 编辑

psb.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-30 13:55:55 | 显示全部楼层
:huffy:亲爱的小甲鱼老师怎么错了呢?  我没说老师错啊

这图片是老师视频中戒的图,按照图中的程序代码,是会报错和崩溃的

前面视频中这个程序代码显示用的sp=16,图上的这集视频用的是sp=32,按照我自己的理论,这两个栈顶指针指向的位置都是错误的,如果是16,那么栈空间不够,程序崩溃, 换做32的话,栈顶指针指向的其实也就是代码段的代码,把数据放入栈中的时候同时也覆盖了代码段的代码,程序最后就不是自己缩所写的代码了
这本书我还没看,所以不知道书上怎么写的,我想书上应该也是这样的,因为甲鱼老师是按着书本讲的
刚好这一段没有单步调试,让我们自己上鸡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-30 14:56:41 | 显示全部楼层
给你顶一下喽。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-30 17:41:45 | 显示全部楼层
修炼中,你简直是在写小说,不可以明了简单一点吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 13:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表