明明定义了栈仍然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所在空间被(不知道为什么)修改为其他数据。