鱼C论坛

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

关于汇编程序单步调试的问题

[复制链接]
发表于 2016-12-3 00:22:41 | 显示全部楼层
我来回答你的问题吧。首先你得理解debug是带有中断机制的调试工具。既然有中断机制,那么中断前的寄存器状态会保存到什么地方呢?
答案很明显,栈!

我来给你做一个演示:
我用debug写一段代码进去(我直接在debug中输入的指令),如下:
1.png

这里和你的代码类似,让CS=SS,即指令段和栈段重叠。
并且,我将SP设置为10f,也就是说,栈底,基本上在我的指令段最尾端。

然后我们开始单步调试,当我完成对栈段的定义后,也就是mov sp,10f之后,发生了什么?你看:
2.png
嘿嘿, ,后面的指令变了,为什么?因为debug的中断机制,栈内已经有了数据,而这个数据覆盖了CS段的内容,因为CS和SS段是同一个内存段。

OK,解说到此我想你应该懂部分了,而此时,我们可以查看栈内数据,如下:
3.png

从里面看,显然和第一图中的机器码不同!

所以,我给你的提示是:在使用debug时,应该注意的一点就是,定义任何栈之后,栈都不是空的,里面保存了debug的中断信息!
那么在使用debug调试的时候,要注意不要将栈段与其他段重叠。否则一旦debug保存的数据将其他段内数据覆盖,debug的意义也就没有了。


求采纳,求评分!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-30 06:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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