鱼C论坛

 找回密码
 立即注册
查看: 4740|回复: 2

[已解决]为什么2000:0~2000:f中的内容会发生改变?

[复制链接]
发表于 2021-3-4 20:52:27 | 显示全部楼层 |阅读模式

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

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

x
在图示操作下,为什么2000:0~2000:f中的内容会发生改变?
最佳答案
2021-3-5 10:58:41
楼上说的对,仔细观察被改变的值,ob39,0108,不就是cs和ip的值吗。
其实计算机一次只能运行一个程序,运行你写的程序的时候就不能运行debug,运行debug的时候就不能运行你写的程序。
而我们在debug单步调试的时候,我们是先在你写的程序里面执行一步,然后中断你的程序,再去debug里面查看程序的运行情况和内存的值什么的。当我们查看完毕,单步执行你的程序的下一步的时候,计算机怎么才能知道自己上一次执行到哪里了呢?原来,计算机在中断你的程序的时候,把执行到的位置,也就是cs:ip的值(还有你后面会学到的flag的值)压入栈中保存,下一次执行你的程序的时候,就从栈中取出cs:ip的值,这样,就能知道自己执行到哪里了。
如此往复,一次次快速中断,和继续,就给使用者一种----我的程序一直在执行的假象,这种方式计算机又称为并发。(来回快速中断和执行多个程序,给使用者一种所有程序都在共同执行的假象)
{4G~)P8J_T}L2QJV@Q[VM@9.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-5 01:03:09 | 显示全部楼层

回帖奖励 +2 鱼币

程序在修改ss的时候引发中断,中断把原程序的ip cs eflag压入栈中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-5 10:58:41 | 显示全部楼层    本楼为最佳答案   
楼上说的对,仔细观察被改变的值,ob39,0108,不就是cs和ip的值吗。
其实计算机一次只能运行一个程序,运行你写的程序的时候就不能运行debug,运行debug的时候就不能运行你写的程序。
而我们在debug单步调试的时候,我们是先在你写的程序里面执行一步,然后中断你的程序,再去debug里面查看程序的运行情况和内存的值什么的。当我们查看完毕,单步执行你的程序的下一步的时候,计算机怎么才能知道自己上一次执行到哪里了呢?原来,计算机在中断你的程序的时候,把执行到的位置,也就是cs:ip的值(还有你后面会学到的flag的值)压入栈中保存,下一次执行你的程序的时候,就从栈中取出cs:ip的值,这样,就能知道自己执行到哪里了。
如此往复,一次次快速中断,和继续,就给使用者一种----我的程序一直在执行的假象,这种方式计算机又称为并发。(来回快速中断和执行多个程序,给使用者一种所有程序都在共同执行的假象)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 15:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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