郁闷自虐ing----深度挖掘boot。。。学习篇

    最近点被到极点,郁闷ing。。。本来想折腾下wrk来自虐下,发现windbg进入的忒晚了,都到啥时候了才来啊

 

nt!RtlpBreakWithStatusInstruction+0x1 (FPO: [1,0,0]) [E:/WRK/base/ntos/rtl/i386/debug2.asm @ 48]
nt!ExpInitializeExecutive+0x38b (FPO: [Non-Fpo]) (CONV: stdcall) [e:/wrk/base/ntos/init/initos.c @ 687]
nt!KiInitializeKernel+0x4be (FPO: [Non-Fpo]) (CONV: stdcall) [e:/wrk/base/ntos/ke/i386/kernlini.c @ 888]
nt!KiSystemStartup+0x2d6 [E:/WRK/base/ntos/ke/i386/newsysbg.asm @ 547]

 

唉这种没头没尾的东西看着折寿的,所以导致了我下面的想法

电脑启动阶段如下划分:

BIOS -> 硬盘MBR -> 活动分区DBR -> 操作系统


依我的习惯总是从最基本的开始,应该先搞bios,无奈功力实在不够,根本不知道咋搞bios,只能先从硬盘MBR开始了。。

 

硬盘知识太少,今天先补习下基本知识,下面抄来的知识,在后面我自己验证:

 

----------------------------------------------- 科普开始 -----------------------------------------------


硬盘结构
硬盘有很多盘片组成,每个盘片的每个面都有一个读写磁头。如果有N个盘片。就有2N个面,对应2N个磁头(Heads),从0、1、2开始编号。每个盘片 的半径均为固定值R的同心圆再逻辑上形成了一个以电机主轴为轴的柱面(Cylinders),从外至里编号为0、1、2……。每个盘片上的每个磁道又被划 分为几十个扇区(Sector),通常的容量是512byte,并按照一定规则编号为1、2、3……形成Cylinders×Heads×Sector个 扇区。


 

主引导扇区
主引导扇区位于整个硬盘的0柱面0磁头1扇区{(柱面,磁头,扇区)|(0,0,1)},bios在执行自己固有的程序以后就会jump到MBR中的第一 条指令。将系统的控制权交由mbr来执行。主引导扇区主要由三部分组成:主引导记录 MBR(Master Boot Record或者Main Boot Record)、硬盘分区表 DPT(Disk Partition Table)和结束标志字三大部分组成。



对于硬盘而言,一个扇区可能的字节数为128×2n (n=0,1,2,3)。大多情况下,取n=2,即一个扇区(sector)的大小为512字节。在总共512byte的主引导记录中,MBR的引导程序 占了其中的前446个字节(偏移0H~偏移1BDH),随后的64个字节(偏移1BEH~偏移1FDH)为DPT(Disk PartitionTable,硬盘分区表),最后的两个字节“55 AA”(偏移1FEH~偏移1FFH)是分区有效结束标志。

主引导记录MBR(master boot record)
主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分 区上的操作系统,并将控制权交给启动程序。MBR是由分区程序(如Fdisk)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而能 够实现多系统引导。

硬盘分区表DPT(Disk Partition Table)
硬盘分区表占据MBR扇区的64个字节(偏移01BEH--偏移01FDH),可以对四个分区的信息进行描述,其中每个分区的信息占据16个字节。具体每个字节的定义可以参见硬盘分区结构信息。





结束标志字
结束标志字55,AA(偏移1FEH- 偏移1FFH)是MBR扇区的最后两个字节,是检验主引导记录是否有效的标志。

 

电脑启动过程

  • 系统开机或者重启。
  • BIOS 加电自检 ( Power On Self Test -- POST )。BIOS执行内存地址为 FFFF:0000H 处的跳转指令,跳转到固化在ROM中的自检程序处,对系统硬件(包括内存)进行检查。
  • 读取主引导记录(MBR)扇区。当BIOS检查到硬件正常并与 CMOS 中的设置相符后,按照 CMOS 中对启动设备的设置顺序检测可用的启动设备。BIOS将相应启动设备的第一个扇区(也就是MBR扇区)读入内存地址为0000:7C00H 处。
  • 检查0000:7DFEH-0000:7DFFH(MBR的结束标志位)是否等于 AA55H,若不等于则转去尝试其他启动设备,如果没有启动设备满足要求则显示"NO ROM BASIC"然后死机。
  • 当检测到有启动设备满足要求后,BIOS将控制权交给相应启动设备。启动设备的MBR将自己复制到0000:0600H处, 然后继续执行。
  • 在主分区表中搜索标志为活动的分区,也就是检验磁盘分区表DPT的首字节是不是80H。如果检测到80H,则表示该分区为活动分区,将该活动分区的第一个扇区(操作系统引导记录区,Dos Boot Recorder,DBR)读入内存地址 0000:7C00H 处
  • 检查0000:7DFEH-0000:7DFFH(DBR的结束标志位)是否等于 AA55H, 若不等于则显示 : "Missing Operating System" 然后停止。
  • 当检测到有分区满足要求后,MBR将控制权交给相应的活动分区。

主引导扇区与硬盘分区
从主引导扇区的结构可以知道,它仅仅包含一个64个字节的硬盘分区表。由于每个分区信息需要16个字节,所以对于采用MBR型分区结构的硬盘(其磁盘卷标 类型为MS-DOS),最多只能识别4个主要分区。所以对于一个采用此种分区结构的硬盘来说,想要得到4个以上的主要分区是不可能的。这里就需要引出扩展 分区了。扩展分区也是Primary partition的一种,但它与主分区的不同在于可以划分为无数个逻辑分区。

扩展分区中逻辑驱动器的引导记录是链式的。每一个逻辑分区都有一个和MBR的分区表结构类似的扩展引导记录(EBR),其分区表的第一项指向该逻辑分区本 身的引导扇区,第二项指向下一个逻辑驱动器的EBR。对于Windows系统而言,一般都是只划分一个主分区给系统,剩余的部分全部划为扩展分区。

 

蓝色是主分区;绿、红、紫是逻辑分区;灰色包含着逻辑分区是扩展分区;

 

 

 

 

 

 

  扩展分区表项的内容

扩展分区表项 分区表项的内容
第一个项 包括数据的开始地址在内的与扩展分区中当前逻辑驱动器有关的信息
第二个项 有关扩展分区中的下一个逻辑驱动器的信息,包括包含下一个逻辑驱动器的EBR的扇区的地址。如果不存在进一步的逻辑驱动器的话,该字段不会被使用
第三个项 未用
第四个项 未用

 

 

--------------------------------------- 科普结束 -------------------------------------------------------


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭