为什么2000:0~2000:f中的内容会发生改变?
在图示操作下,为什么2000:0~2000:f中的内容会发生改变? 程序在修改ss的时候引发中断,中断把原程序的ip cs eflag压入栈中 楼上说的对,仔细观察被改变的值,ob39,0108,不就是cs和ip的值吗。其实计算机一次只能运行一个程序,运行你写的程序的时候就不能运行debug,运行debug的时候就不能运行你写的程序。
而我们在debug单步调试的时候,我们是先在你写的程序里面执行一步,然后中断你的程序,再去debug里面查看程序的运行情况和内存的值什么的。当我们查看完毕,单步执行你的程序的下一步的时候,计算机怎么才能知道自己上一次执行到哪里了呢?原来,计算机在中断你的程序的时候,把执行到的位置,也就是cs:ip的值(还有你后面会学到的flag的值)压入栈中保存,下一次执行你的程序的时候,就从栈中取出cs:ip的值,这样,就能知道自己执行到哪里了。
如此往复,一次次快速中断,和继续,就给使用者一种----我的程序一直在执行的假象,这种方式计算机又称为并发。(来回快速中断和执行多个程序,给使用者一种所有程序都在共同执行的假象)
页:
[1]