实验8 分析一个奇怪的程序

分析:
assume cs:codesg
codesg segment
	mov ax,4c00h
	int 21h
	
start:	mov ax,0
s:	nop
	nop
	
	mov di,offset s
	mov si,offset s2
	mov ax,cs:[si]
	mov cs:[di],ax

s0:	jmp short s

s1:	mov ax,0
	int 21h
	mov ax,0
	
s2:	jmp short s1
	nop
codesg ends
end start


先不上机分析,用脑海跑到4个mov的地方,发现是将s2的jmp代码复制到s0处,然后往下跑。先跳回s0,然后由于复制了s2的代码,继续跳到s1,执行一个不知道干嘛的中断。

一切很理想,但是上机后发现,奇怪了,为啥会返回,一步一步执行后发现代码变了


这里变成了0000,而不是s1的起始地址。这是为什么呢?


其实我们在复制程序的时候,计算机是复制内存的数据,而不是代码,也就是s2处前面的E8F6



而E8F6的意思就是向上跳10个地址,因为s2调到s1就是10个地址,所以在s处向上跳10个地址就是返回的代码段了。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值