计算机启动的细节与汇编Demo的拆解3

电子说

1.3w人已加入

描述

打开文件,数据将以如下方式展示在我们面前。左边是机器码,右边是反编译文本。

![](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处,从0E1D内容作用如上文一致,不再解析。

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.
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分