鱼C论坛

 找回密码
 立即注册
查看: 4070|回复: 1

[已解决]dw定义的数据空间,数据并不安全?

[复制链接]
发表于 2021-2-13 02:36:11 | 显示全部楼层 |阅读模式
5鱼币
因为在栈段上一直有点混,就做了下面这个程序来验证sp定义,现在栈段大概清楚了,但因为程序中的问题,产生了新的疑问,请大家帮助解答。
程序
assume cs:code
code segment

dw 0123h,0456h
dw 0,0,0,0,0
start:    mov ax,cs
           mov ss,ax
           mov sp,0eh
           mov bx,0
           mov cx,2
s:           push cs:[bx]
           add bx,2
           loop s
          
          
           mov ax,4c00h
           int 21h
          
code ends
end start

debug载入程序后,d cs:0 f, 结果返回 23 01 56 04 00 00 00 00-00 00 00 00 00 00 A3 01
-t执行到第一个push结束,再d cs:0 f, 结果返回 23 01 6A 07 00 00 1B 00-6A 07 03 01 23 01 BC CB,发现cs:3~4数据已经改变。继续执行,返回结果是把新的cs:3~4结果推进去了。
但是如果中间不d cs:0 f而是直接运行程序到mov ax,4c00h前面,用d cs:0 f命令查看,返回的结果是23 01 6A 07 00 00 1B 00-6A 07 56 04 23 01 BC CB,程序按设计把0456h推进。
为什么中间用d查看一下会出现不同的执行结果呢?

谢谢
最佳答案
2021-2-13 02:36:12
首先,栈是个公共区域,触发断点需要调用中断,中断的调用过程需要使用栈空间,我没看错的话,你们cs应该是076a,这是触发断点,程序自动调用栈空间存储cs和ip值的结果,所以栈空间设大一点,不妨碍自己的使用和程序的自行调用就好了。所以,你的查看触发了中断,让2,3偏移地址变成了076a这个cs地址,才发生这种错误。总结,你栈空间设置大一点就可以了。(可能有错误,勿喷)

最佳答案

查看完整内容

首先,栈是个公共区域,触发断点需要调用中断,中断的调用过程需要使用栈空间,我没看错的话,你们cs应该是076a,这是触发断点,程序自动调用栈空间存储cs和ip值的结果,所以栈空间设大一点,不妨碍自己的使用和程序的自行调用就好了。所以,你的查看触发了中断,让2,3偏移地址变成了076a这个cs地址,才发生这种错误。总结,你栈空间设置大一点就可以了。(可能有错误,勿喷)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-13 02:36:12 | 显示全部楼层    本楼为最佳答案   
首先,栈是个公共区域,触发断点需要调用中断,中断的调用过程需要使用栈空间,我没看错的话,你们cs应该是076a,这是触发断点,程序自动调用栈空间存储cs和ip值的结果,所以栈空间设大一点,不妨碍自己的使用和程序的自行调用就好了。所以,你的查看触发了中断,让2,3偏移地址变成了076a这个cs地址,才发生这种错误。总结,你栈空间设置大一点就可以了。(可能有错误,勿喷)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 09:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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