web-dev-qa-db-ja.com

ブート署名-BIOS

BIOSはROM内にあり、製造元は「通常」、「アクティブ」ストレージデバイスの最初のセクターの最初のセクターまたはCHS(0,0,1)*物理およびCHS(0,0、 0)*パーティショニングの好みに基づいてMBRまたはVBRのいずれかである論理。


ウィキペディア:

ブートセクター内のx86-CPU用のIBMPC互換ブートローダーの存在は、慣例により、ブートセクター(オフセット0x1FEおよび0x1FF)の最後にある2バイトの16進シーケンス0x55 0xAA(ブートセクター署名と呼ばれる)によって示されます。 。このシグニチャは、オペレーティングシステムを実際にロードできない場合でも、実行しても安全なダミーのブートローダーが少なくとも存在することを示します。

ブートシグネチャは、2バイトの16進シーケンスを使用してブートローダーを識別します、だから私は署名が同じセクターのオフセットでなければならないと思いますか?したがって、ブートローダーがこの同じセクターにある必要があると仮定しますか?

3
Jordan Davis

BIOSが起動するものを見つけようとしているときに発生する操作の基本的な順序は次のとおりです。

  1. 起動しようとしているデバイス(HDD、SSD、フロッピーディスク、光ディスクなど)の最初のセクター(512バイト)をメモリにロードします
  2. 511番目と512番目のバイトがそれぞれ0x55と0xAAであるかどうかを確認します。
    • そうでない場合は、手順1に戻って次のデバイスを試すか、それ以上ない場合はあきらめます。
    • はいの場合、このセクターの先頭からコードの実行を開始し、(うまくいけば)ブートローダー/マネージャーに制御を渡します。

ブートシーケンスのOSDev wikiページ が役立つ場合があります。 MBRページ には、その最初のセクターのレイアウトを説明する便利な表もあります。ここでいくつか簡略化して再作成しました。

Offset | Size (bytes) | Description
    0  | 436          | MBR Bootstrap (flat binary executable code) 
0x1b4  |  10          | Optional "unique" disk ID
0x1be  |  64          | MBR Partition Table, with 4 entries
0x1fe  |   2          | (0x55, 0xAA) "Valid bootsector" signature bytes

BIOSは、必ずしもディスクIDやパーティションテーブルに注意を払ったり、認識したりするわけではないことに注意してください。

enter image description here

6
8bittree

BIOSコードはROM(または最近はEEPROM)にあります。ディスクから最初のセクターをロードします(LBA表記では#0、CHS表記ではc = 0、h = 0、s = 1) 、最後の2バイトが0x55と0xAAであることを確認し、このセクターに制御を移します。

したがって、MBRは実際にはアドレス#0によって識別です。また、55 AA署名は検証専用です。最初のセクターがゼロで埋められている場合(新しいHDDの場合)、BIOSは55 AA署名がないことでこれを検出し、別のディスク、PXE、またはROM BASICなどから起動を試みます。

0x55 0xAAはMBRのオフセットではなく、実際のオフセットはゼロです。

0
Mikhail Kupchik