博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编实验五
阅读量:7016 次
发布时间:2019-06-28

本文共 1064 字,大约阅读时间需要 3 分钟。

汇编实验五

实验任务(1)

实验代码如下

编译连接过程如下(后续实验便不再展示编译连接过程):

对该查询执行反汇编操作

由u命令可知该程序最后执行与001d的位置,故要查看程序返回前data段中的数据应该用g命令定位到001d的位置,得出程序执行前的cs,ss,ds的值。

再通过d命令可以得知data段中的数据。

书上习题如下:

实验任务(2)

 代码如下:

将其编译连接后进行反汇编。

由此可知程序执行前cs,ss,ds的值。

再同一可知data的值。

书上习题如下所示

实验任务(3)

 实验代码如下

对其执行编译连接。在无误的情况下进行反汇编。

可知未进行返回前cs,ss,ds的地址。

再运用d命令可知data段中的数据如下。

书上内容如下

实验任务(4)

 对(1)(2)(3)的代码执行操作如图所示。

对这三个代码重新编译连接。

编译连接没有任何问题。

然后再对该代码执行反汇编来确认其是否能正常运行。

程序一

程序二

程序三

由上图可知只有三顺利运行了,而其他两个代码却在一直重复执行add操作

首先,end start的作用是指明程序的入口,而end的作用是标志整个程序段的结束。故我认为代码一代码二之所以会不能运行是因为无法找到程序的入口,而三能运行的原因多半是其不需要一个具体的程序入口。代码一二三中都含有start部分。但代码三第一个代码为机器码,而一二不是。故可知其不需要入口的原因。也可得知在不指明入口的情况下程序从第一个机器码开始执行。

实验任务(5)

 代码如图所示

在debug模式调试下的逻辑段c的8个字节

由图可知该代码正确的实现了数据相加,故该代码正确。

不过在调试过程中我一开执行d命令的地址是具体的ds地址:0.然后运行时却引起了dosbox的崩溃,不知道为什么。难道是bug?

实验任务(6)

实验任务六代码如图所示

对其进行编译连接。

没有问题目前

执行前和执行后b的八个子单元信息如图所示

不知道怎么回事但是总感觉自己弄错了什么。希望老师和大佬解答。代码完全无法像大佬敲的那样干净整洁是真的心塞,重点是也不对。。。

实验结论:这次实验任务是真的多(小声吐槽)。难度系数也不小。主旨是让我们理解和掌握多段汇编源程序对目标执行时内存的分配方式。前面还好,还能在翻书的情况下解决。但是最后一个是真的不行了。果然基础还是不够扎实。大概是自己对于逆序存放等操作还不够娴熟吧。(真的有一丢丢看不懂)

 

转载于:https://www.cnblogs.com/heyha/p/10011042.html

你可能感兴趣的文章
java合并两个升序数组为一个新的有序数组
查看>>
Lesson 1#10 流程控制
查看>>
(二)从分布式一致性谈到CAP理论、BASE理论
查看>>
设计模式【15】| 迭代子模式
查看>>
linux系统性能监控--网络利用率
查看>>
cocos2d-x 使用UIWebView加载网页(顺便可以看到如何用OC调C++)
查看>>
飞凌百套OK335xS-2开发平台免费申请
查看>>
数据库系统原理,很赞的课程!
查看>>
iis站点内存泄漏问题分析
查看>>
win10 HTTP 错误 500.21 - Internal Server Error
查看>>
如何创建Vue3.0项目
查看>>
MongoDB 启动基于角色的登录认证功能
查看>>
数据库原理整理笔记1
查看>>
如果选错云服务商,后果很严重……
查看>>
c#备份MySQL数据库 --转载
查看>>
HDU - 1247 Hat’s Words 字典树
查看>>
从client(content="<p></p>")中检測到有潜在危急的 Request.Form 值。
查看>>
《Effective C++》笔记:I
查看>>
C语言 指针和指针变量
查看>>
经典类与新式类的区别
查看>>