打开文件,数据将以如下方式展示在我们面前。左边是机器码,右边是反编译文本。
![](https://file.elecfans.com/web2/M00/8C/10/poYBAGPaFpGAR9AzAAZJ9NhmHFY935.png)
很显然,反编译文本只是按照Ascii对二进制数据进行编译,所以能够很好地恢复出来。而剩下的因为在Ascii表中没有对应的编码,所以也就不能恢复出来。
在扇区末尾可以很明显的看到55aa结束标志,而在之间填充的0完全是times 510 - ($-$$) db 0的功劳。如果不以0填充这些区域,程序拉起后的行为就不一定是我们所能够预想的。
为了看懂剩下的区域内容,使用ndisasm进行反编译。正常来说我们可以得到下列结果,而从7C28到7DFC中间的内容不过是简单重复,没有展示出来的必要。
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaFuCAfIGqAAJ5I1tjMnY660.png)
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaF3iAKiJpAABgkn3URW0184.png)
首先程序加载到7C00处,从这里进行起跳;
然后数据对齐,并调用7C0B的程序;
7C0B命令装载7c1E起始地址到ax,从1F到22要求端口传输字符串。
insb--输入字符串到端口。
输入字符串指令(Input String Instruction)。该指令是从某一指定的端口接受一个字符串,并存入一片存储单元之中。输入端口由DX指定,存储单元的首地址和读入数据的个数分别由ES:DI和CX来确定。在指令的执行过程中,还根据标志位DF对寄存器DI作相应增减。该指令不影响任何标志位。
Outsw—输出字符串到端口。
输出字符串指令(Output String Instruction)。该指令是把一个字符串输入到指定的输出端口中。输出端口由DX指定,其输出数据的首地址和个数分别由DS:SI和CX来确定。在指令的执行过程中,还根据标志位DF对寄存器SI作相应增减。该指令的执行不影响任何标志位。
回到7C0E处,从0E到1D内容作用如上文一致,不再解析。
7C0A有一个短跳转到7C0A,即是要程序在此循环,可是该命令存在空耗计算机资源嫌疑。
至此整个程序解析完毕,而剩余没有解析的部分希望看客自行查找资料,这对于学习汇编与操作系统有好处。
三、运行环境搭建
运行环境使用VBox虚拟机,也可以使用物理机验证。
Ⅰ.创建虚拟机。
新建
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaF4-AIzflAAH-Kl8AVto242.png)
按图填写,下一步
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaF5mAMMm5AAH0VhiVbWk346.png)
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaF8CAKNY4AAFSm8R45V8246.png)
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaF8uAb9M_AAGx-fcYXQs713.png)
![](https://file.elecfans.com/web2/M00/8C/97/pYYBAGPaF9WAUGwrAAGVnOqaEl4977.png)
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaGEiAFfRSAAIXroAAvMM634.png)
![](https://file.elecfans.com/web2/M00/8C/97/pYYBAGPaGEyAND-BAAFCpvdT4ss153.png)
最后点击创建。
Ⅱ.装载.bin文件到虚拟硬盘。
使用李忠老师开发的工具。
打开按照如下方式写入即可。
![](https://file.elecfans.com/web2/M00/8C/97/pYYBAGPaGKOAHAMAAAD3x-j1MZA820.png)
Ⅲ.将盘片安装到虚拟机。
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaGMSAY2FDAAG-MpR2dw0920.png)
参考文献:
[1] General Software.[EB/OL]. https://cdn.embeddedts.com/resource-attachments/x86-edio-41.pdf
[2] 谢焕强.精简32位Linux操作系统在X86上的设计与实现[D].2022.23-24.
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
计算机
+关注
关注
19文章
7428浏览量
87727 -
汇编
+关注
关注
2文章
214浏览量
25904 -
虚拟机
+关注
关注
1文章
908浏览量
28107
发布评论请先 登录
相关推荐
计算机安全使用常识
计算机安全使用常识 (1)使用符合额定电压的电源。电压高于额定电压会烧毁硬件,低于额定电压计算机不能正常启动或系统运行不正常,甚至也会烧毁硬件。(2)正确开关计算机。正确的开机方法是:
发表于 03-10 12:10
计算机组成原理 精选资料分享
计算机组成原理第一章 计算机系统概述1.1 计算机系统简介计算机系统:硬件、软件软件:系统软件、应用软件计算机系统的层次结构(由高到低):高
发表于 07-23 06:15
计算机开机启动过程详解 精选资料分享
计算机的开机启动过程(1) 启动过程总揽(二)详细说明1、CPU 供电按下主机的电源键后,计算机开始启动,为主板部分芯片和CPU进行供电。主
发表于 07-23 09:18
计算机组成期末复习 精选资料分享
机D.计算机可实现高速运算(c)2、计算机硬件能直接执行的只能是下面哪项。A.符号语言 B.汇编语言C.机器语言 D.机器语言和汇编语言(c)3
发表于 07-26 07:14
微型计算机原理及应用
前言微机原理主要内容包括微型计算机体系结构、8088微处理器和指令系统、汇编语言设计以及微型计算机各个组成部分介绍等内容。微机原理接口技术是一门实践性强的学科,不但要求较高的理论水平,而且还要求有实际的动手能力。这次项目设计的主
发表于 09-10 07:38
5. 电子计算机的应用,计算机应用基础(试卷版)5|计算机应用基础试卷 精选资料分享
:通用计算机和专用计算机B:数字电子计算机和模拟电子计算机C:科学与过程计算计算机、工业控制计算机
发表于 09-13 09:08
计算机组成原理与汇编语言程序设计
计算机组成原理与汇编语言程序设计是为中央电大计算机组成原理与汇编语言程序设计课程编写的教材。在开始学习本书之前,请大家务必先认真阅读这篇前言,它将告诉你本课
发表于 10-21 17:56
•0次下载
计算机的机器语言和汇编语言与高级语言的详细资料介绍
计算机语言通常是一个能完整、准确和规则地表达人们的意图,并用以指挥或控制计算机工作的“符号系统”。计算机语言通常分为三类:即机器语言、汇编语言和高级语言。
构建 4 位计算机:汇编语言和汇编器(第 2 部分)
一旦我们构建了一台计算机,下一步就是开发一种汇编语言,然后是一个可以汇编我们程序的汇编器。 在我 之前的专栏 中,我们介绍了在计算机内存
发表于 08-01 17:52
•844次阅读
评论