首页
社区
课程
招聘
[求助]请帮忙看结果是多少,并给出分析过程
发表于: 2009-1-15 15:43 2739

[求助]请帮忙看结果是多少,并给出分析过程

2009-1-15 15:43
2739
在8086下,程序运行后的ax和bx分别是多少?为什么?(最好能写明分析过程)
assume cs:code
data segment
	dw 8 dup(0)
data ends

code segment
	start:	mov ax, data
					mov ss, ax
					mov sp, 16
					mov word ptr ss:[0], offset s
					mov ss:[2], cs
					call dword ptr ss:[0]
					nop
	s:
					mov ax, offset s
					sub ax, ss:[0ch]
					mov bx, cs
					sub bx, ss:[0eh]
code ends
end start

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 508
活跃值: (89)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
如果发错地方,请斑竹先别移贴,拜谢了
2009-1-15 15:49
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
3
没有实验,凭我的理解,应该是最后ax=1,bx=0

等下实验一下,看看对不对。
2009-1-15 16:00
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你自己弄个编译器调试不就行了吗?王爽的汇编语言里面有
2009-1-15 16:00
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
5
实验过了,结果确实是ax=1,bx=0。

下面解释一下:

程序定义了16个word作栈空间,前几行代码是置栈指针的,让栈初始为空即,sp=16指向栈底部。

接下来的几条指令是将call指令后的那一条nop的地址入栈,此时栈中的数据为:

ss:00    -> offset s
ss:02    -> cs
// 上面的值不是栈中的值,是为call指令构造的目的地址
// 04 - 0a\0b之间的值无效
ss:0c    -> offset s - 1,因nop占一个字节,所以它与后面s的地址相差1
ss:0e    -> cs

并且call指令执行后,cs:eip指向s处的代码,sp == 0c,即“返回”地址

所以,后面给ax装入s的地址,再减去ss:[0ch],相差正好是1,即一个nop指令的字节长度
而给bx装入cs的值,再减去cs,结果当然是0了

如果这个问题搞不明白,把书中的8086逻辑寻址模式和堆栈那一部分知识好好看一下,哦,还有call指令也要搞明白。
2009-1-15 16:17
0
雪    币: 508
活跃值: (89)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
感谢书呆彭,讲得非常透彻,我也搞明白了,再谢
2009-1-15 16:22
0
游客
登录 | 注册 方可回帖
返回
//