时间:2009-08-12 点击: 次 来源:本站原创 作者:佚名 - 小 + 大
操作系统之引导 操作系统之引导要研究操作系统的第一步当然是实现引导,网上有很多文章都只说到了用软盘来实现,基本上是用一段C程序,把引导代码写进软盘的引导扇区里。 但现在哪里能找得到软驱阿,光驱倒可以试一下,有兴趣的朋友可以用光盘来实现引导,有好办法记得告诉我啊! 但如果这些物理因素都不具备的话,就要用到虚拟机——vmware了,本人是在WINDOWS下做的实验,win xp+vmware。 vmware能使用软盘的映像文件,也就是后缀名为img的文件,只要新建一个虚拟机,在setting那里的软驱项选择img文件就可以了,这个系统的启动就会从读这个img文件开始。(如果这个不懂,就学习一下怎么使用vmware吧) 但img文件的格式我不懂,网上也貌似没有相关的工具,让你把代码直接写到img文件的引导部分去。 既然没有工具,那我们就自己来吧,先了解一下img文件的格式,因为引导扇区是512个字节的,img文件应该和它有一定的对应关系。 下面是引导扇区的格式: 硬盘的第一个扇区,是主引导扇区,有时候叫做 MBR。 主引导扇区是一个数据结构,由以下三部分组成: 1、446 字节的程序代码(病毒最爱改写这里的代码); 2、64 字节的分区表; 3、2 字节的“幻数”,或者叫做“引导允许标志”。 前面 446 字节是程序。程序都是标准的,例如 DOS/WINDOWS引导程序,LINUX引导程序, 即使坏了,也不要紧,很容易获得这些程序的代码。 64 字节的分区表最要命! 千万不能改动(即破坏)了,它保存你的硬盘分区信息。坏了就不容易恢复了。 最末尾的两个字节也是不能改动的,它是允许引导的标志。 (0x55, 0xaa) =============== 所以,你只需要写 446 个字节就行了,写多了可危险!(覆盖掉 64 字节的分区表中的任何一部分,就完蛋了!) 建议你写盘操作之前,先把分区表备份到软盘,或者打印到纸上,以防万一。 备份到硬盘是没有用的,因为硬盘分区表一损坏,你的操作系统就不能进入了。 ============== 写盘操作太危险,如果没有绝对的把握,不要盲干。
看到512字节里最后两个字节了吧,0x55, 0xaa,那我们就用这个线索来分析img文件。 首先用ultraedit来打开img文件,如果没有img文件就用winimage或者什么其它的工具建一个,然后直接查找 "55 aa",查找的结果如下图,就在200h的上面。。。
如果你算一下,就知道200h刚好是512,那就很清楚了,img文件的前512个字节就是磁盘里的引导扇区。那我们就只要把写好的代码的16进制(转为二进制就是机器码了)填在前面的512字节就可以了。。。
assume cs:code data segment data ends stack segment stack ends code segment loop1: code ends end start
我们的目的是要知道代码的16进制格式(转为二进制就是机器代码了),那我们就可以使用DEBUG程序反汇编,反汇编出来,马上就知道对应的16进制代码,如下图,左边的什么B800B8就是代码对应的16进制格式:
那我们用 ultraedit 打开这个myOS.exe文件,查找一下这段16进制代码,如下图:
把这段查找到的代码复制到img文件的开头(注意字节数),如下图:
然后再保存img文件,我们的img文件就做好了。再用VMWARE把这个img文件load进来,启动虚拟机,那我们的系统就成功引导了,虽然什么都不干。图如下:
http://blog.csdn.net/dylgsy/archive/2009/03/26/4026231.aspx |
上一篇:嵌入式系统引导技术研究
下一篇:系统引导过程分析与编制