tujiezi 发表于 2022-11-16 23:13:03

汇编语言中的CS与IP寄存器的值怎么不是变化的?

请问一下如题,Win+R -> cmd ->debug -> -r查看寄存器数值。CS:IP寄存器并没有数据跳动的原因,我思考的结果,debug并未打开任何一个程序,就像点开浏览器默认空白页面,打开word显示空白页面一样。
假如是 debug C:\fishc.exe 那查看-r,CS:IP寄存器应该就是会跳动得了吧。
求解答指路,感恩遇见!

jackz007 发表于 2022-11-16 23:19:49

         debug.exe 是会实际加载目标程序进入内存的,当你调试的时候,也是让指令实际执行,然后,debug 通过特殊技术始终在控制这一切,至于各个寄存器的值也是实际的,被调试程序一旦运行起来,CS:IP 就会开始改变了,不要在这里空想,实际调试一个程序试试看,好好找找感觉。

tujiezi 发表于 2022-11-17 08:30:35

你好jackz007朋友,感谢你的回复。我是刚开始学习汇编,到这个环节存在点疑惑,或许往后学疑惑自然解开。
咱们系统是一直在运行的,为啥-r查看到的cs:ip寄存器却一直没变动,(实战视频视频小甲鱼老师输入debug后用了-r命令)
我的疑惑是,操作系统也可以看成是一个软件,它一直在运行,那debug -r应该不输入任何程序参数时,寄存器应该是会变动的。debug输入参数时,cs:ip寄存器指向程序断点处,那应该整个系统都卡死了,实际并不会这样,所以不理解,我们看到的寄存器是虚拟的还是什么情况。
想法有点乱,不知道你能理解我想表达的没。
简单来说,可能是知识盲区的原因,我目前的想法是,硬件寄存器之上跑的操作系统,操作系统里跑的软件。所以查看寄存器,应该无时无刻不在变动,因为系统一直在运行。
感恩你耐心解惑

jackz007 发表于 2022-11-17 10:42:51

本帖最后由 jackz007 于 2022-11-17 11:06 编辑

      你想的有点太多了,从加载被调试程序开始,debug 中所有的寄存器只属于你和你所调试的程序,所以,除非运行程序指令让寄存器改变,否则,寄存器的值永远都不会自己改变,你不是上帝,不用关心这一切如何做到,你只需要专注你的程序指令、程序流程走向,搞清楚程序出现某个结果的来陇去脉就可以了。
页: [1]
查看完整版本: 汇编语言中的CS与IP寄存器的值怎么不是变化的?