汇编语言 明明定义了栈仍然no stack segment 以及栈空间数据被篡改问题

明明定义了栈仍然no stack segment的解决方案

参考原博客:https://blog.csdn.net/sxhelijian/article/details/69338661 这篇写的很好,可以看看

在连接过程中,连接器并未因为有“stacksg segment”,和assume了“ss:stacksg”就认为设置了堆栈段。
  怎样做才能被承认呢?
  找度娘,说是将段定义写成下面的形式:

stacksg segment stack
      ……
stacksg ends

于是整段代码改为
在这里插入图片描述
完美运行,没有warning: no stack segment
在这里插入图片描述

但是…仍然只有11个0放进了栈空间中

栈空间数据被篡改问题 原因分析

循环执行之前↓
在这里插入图片描述
循环执行一次↓
在这里插入图片描述

我自己的解释…
为了测试,加长0的个数(50个数据)
在这里插入图片描述
执行循环之前
在这里插入图片描述
执行一次循环之后
在这里插入图片描述
其他位置的内存空间均能正常赋值为0,黄色框内部分却总是 6B 07 … A3 01猜测这段数据和栈顶指向的位置有关,为了测试,控制其他不变,尝试修改栈顶位置(原来SP是20,这次测试将SP改为30),如下:在这里插入图片描述
debug单步执行,执行mov sp,30h指令之前,数据没有被改动,看SP指向的位置076b:0064 ,可以看到,6A 07 ... A3 01这一段数据被存在了这里 而且是6A开头 不是6B
在这里插入图片描述
果然,执行mov sp,30h指令之后,076b:0064处的数据也被改动了
在这里插入图片描述
结论:栈中数据并未按照定义的那样存储。栈顶指针SP所在空间被(不知道为什么)修改为其他数据。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值