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

本文记录了一次分析奇怪程序的过程。通过debug查看汇编和机器码,理解了程序如何将cs:[si]的内容转移到cs:[di],并详细解释了一个转移指令导致的循环现象,最终导致程序执行mov ax, 4c00h int 21h,从而结束。作者通过纸面模拟加深了对汇编执行顺序的理解。" 116229618,10209089,树莓派打造语音机器人实战,"['Python编程', '语音识别', '硬件开发', '树莓派项目', '自然语言处理']
摘要由CSDN通过智能技术生成

第一次没有仔细看就运行了一下程序感觉好奇怪为什么会这样呢?一个大大的问号。

图源网络,侵删
后来我又好好看了一下,豁然开朗,就记录一下(希望可以帮到需要的人)
前面的写程序,编译,连接这些就不管了,默认都搞好了。
我们debug一下这个程序,可以看到所有语句的汇编语句和对应的机器码。
在这里插入图片描述
图中大部分的汇编语言我们都可以看的懂,大概的意思就是将cs:[si]中的内容放入到cs:[di]中,cs:[si]中的内容是EBF6,其实这个内容本身就是一个转移指令,相当于执行当前的指令往后退10个字节(因为F6是补码,它的真值为-10),现在两个nop中的内容为EBF6,当我们执行jmp short s(jmp 0008)语句时,相当于跳转到了nop中,继续执行跳转语句,相当于上面说执行当前的指令往后退10个字节,这时执行 movax,4c00h
int 21h,程序结束。

我在纸上写了一下汇编语言执行的顺序(不要嫌弃)
在这里插入图片描述

执行的具体步骤,在加深一下印象
在这里插入图片描述
在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学无止境****

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值