• GRUB2 分析 (二)


    上一篇

     

    实际上在512字节的MBR中,真正可用的空间并不多。除了一开始的跳转指令外,起始部分是一个被称为BPB的区域,即BIOS参数块(BISO Parameter Block)。主要是FAT和NTFS文件系统会使用这块区域。所以GRUB在安装时会避开BPB,这也是为什么一开始就跳转到偏移量0x65处,这里才是真正的开始代码。而MBR被装载到内存中后,BPB对应的内存区域就被GRUB利用来存放DAP,即磁盘地址数据包(Disk Address Packet),用于提供参数给BIOS中断0x13来读取磁盘数据。

     

    boot.S完成了对1号扇区的装载。而1号扇区安装的是bootdisk.img,也是正好512字节,由bootdisk.S编译生成。

     

    bootdisk.S的任务是加载GRUB余下的所有映像到内存。通常情况下GRUB安装时除了0号、1号扇区外还会使用2-62号扇区。这些扇区不被硬盘分区和文件系统使用,应该来说是GRUB最佳的安装地点。但是有一些特殊的软件会在这里记录一些数据,如需要存放加密或授权信息的一些私有软件。所以并不能说完全安全。

     

    GRUB使用的扇区号会记录在一系列列表里,每个列表12个字节记录了一段连续的扇区的起始号码和长度。这些列表在GRUB安装时会添加在bootdisk.img代码段的后面。在bootdisk.S中通过两个嵌套循环,来把这些扇区装载在地址0x70000开始的内存区域。然后同样使用copy_buffer复制这些数据到地址0x8200开始的内存区域。这里0x70000开始的内存区域是作为缓冲区来使用的。因为BIOS装载扇区时不能越过64K字节的边界,如果直接装载到0x8200就可能会超过0x10000。

     

    装载完成后,执行跳转指令ljmp $0, $(GRUB_BOOT_MACHINE_KERNEL_ADDR + 0x200)跳转到地址0x8200执行下一条指令。

    至此bootdisk.img的代码执行完毕。

    下一篇

  • 相关阅读:
    ubuntu更强大的包管理工具:aptitude
    ubuntu下载自带的java-1.8
    [机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)
    不能下载程序
    为什么你的电脑会变得越来越慢?
    win7常用键
    C# 遍历枚举(枚举是目的,遍历(获取)是手段)
    基于PCIe的高速接口设计
    Xilinx中的xapp1052理解
    把Xilinx的IPCORE解密成源代码的方法
  • 原文地址:https://www.cnblogs.com/silmerusse/p/3536132.html
Copyright © 2020-2023  润新知