标题:8086汇编,对用debug的t命令单步执行结果的疑问
只看楼主
kangaroo1212
Rank: 1
等 级:新手上路
帖 子:6
专家分:9
注 册:2020-5-24
结帖率:100%
已结贴  问题点数:20 回复次数:4 
8086汇编,对用debug的t命令单步执行结果的疑问
如图一些汇编指令,用t命令一条条执行,并观察如图所示栈中数据,存在如下疑问:栈中数据包含了当前ip和cs,接着不应该是标志寄存器内容吗?那为啥和显示出来的各个标志位不对应呢?
搜索更多相关主题的帖子: debug 疑问 汇编 命令 执行 
2020-05-24 12:28
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:337
专家分:2462
注 册:2016-5-15
得分:0 
flag的word值是3047h吧
把你的flag直接输入(第1黄框),结果(第2黄框)
红框是pushf前的栈,蓝框是pushf后的栈,也就是flag中的值3047h

2020-05-24 17:05
kangaroo1212
Rank: 1
等 级:新手上路
帖 子:6
专家分:9
注 册:2020-5-24
得分:0 
回复 2楼 Valenciax
flag的word值是3047h吧?
是的,我那个图中直接pushf这条执行后栈中的对应数据是3047h,你可以看到的。

重点是我问的前半句疑问,因为我理解图上红线的“58 06”应该是“47 30”。换句话说,图中每条指令下查看栈数据,其中后面都有5806(就是0658h),
这个0658h是什么数据啊,因为我以为这个是上条指令执行后用来恢复现场的标志寄存器值。我的依据是t命令执行后会单步中断,相应的中断过程会干这事吧。
2020-05-24 23:14
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:337
专家分:2462
注 册:2016-5-15
得分:20 
push动作是每次sp-2,'自身程序'管控的栈域是sp或以后的内存,换言之,sp前面的区域是'未定义'的.
用户按一下t,p,甚至输入任何字符,debug都会取回控制权去处理插入的命令,它的动作是先push一堆暂存器,标志等等,
然后运作对应程序,完了后就pop回一堆暂存器,再交回控制权,这一连串PUSH/POP是平冲的,以保证用户的SP或以后的内存不变,
你看见sp之前的东西就是DEBUG残留的
.
上图红框和蓝框前FFF0一列的变化,就是DEBUG做完T后遗留的东西.

即使dos不是多功系统,但计时中断,或其他不定时的中断都会随时插入,完成后也一样还原用户的栈针.
用户SP之前的东西是随时变化的.

用户也应该只关心本身SP或之后的内存,SP之前的是没有意义的.
2020-05-25 06:20
kangaroo1212
Rank: 1
等 级:新手上路
帖 子:6
专家分:9
注 册:2020-5-24
得分:0 
回复 4楼 Valenciax
嗯,谢谢你~我主要在纠结中断过程入栈参数,毕竟看到了ip和cs,唯独不见flag,所以一直纠结这个,算了,不纠结这个了,我想应该是被你说的中断例程污染了吧
2020-05-25 13:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501769-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.242820 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved