ブートシグネチャ - BIOS


3

私はBIOSがROMに入っていることを理解しています、そして製造業者は「典型的には」「アクティブな」記憶装置の最初のセクターの最初のセクターまたはCHS(0,0,1)* physicalとCHS(0,0、 0)* logicalこれはパーティション分割の好みに基づくMBRかVBRのどちらかです。


ウィキペディア:

ブートセクタ内にx86-CPU用のIBM PC互換ブートローダが存在することは、通常、ブートセクタの末尾に2バイトの16進数シーケンス0x55 0xAA(ブートセクタシグネチャと呼ばれる)で示されています(オフセット0x1FEおよび0x1FF)。 。このシグネチャは、たとえ実際にオペレーティングシステムをロードできない場合でも、実行しても安全なダミーブートローダーが少なくとも存在することを示します。

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


MBR(1983) 述語 LBA(1986年) 数年で、MBRをLBAに依存させるのはかなり困難になります。
8bittree

はい、私はそれを理解していますが、BIOSが2バイトのみを使用してブートセクタを識別する方法は? BIOSが2バイトでそれを実行できるならば、なぜ私たちはBIOSがそうであるようにセクターを識別するためにCHSかLBAのために2バイトを使わないのですか。
Jordan Davis

より明確にするために質問を更新しました。
Jordan Davis

ブートセクタシグネチャは、ブートセクタがディスク上のどこにあるかを見つけるためには使用されず(最初のセクタであると仮定されるか、そうでなければ存在しない) 、ブートセクタ、またはBIOSが無視するべきであることがある謎のことなら。
8bittree

とった!そうそれを読んでいただけ identifies ブートローダとそれはデフォルトでセクタに行きます。
Jordan Davis

回答:


6

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

  1. 起動しようとしているデバイスの最初のセクタ(512バイト)(HDD、SSD、フロッピーディスク、光ディスクなど)をメモリにロードします
  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


ディスク全体をメモリにロードするわけではありませんが、511バイトと512バイトで何をチェックしているのでしょうか。ブートシグネチャがそこにあることを知っていますが、ブートシグネチャはBIOSに何を宣言していますか?
Jordan Davis

ところでそのリンクは本当に良いです。
Jordan Davis

BIOSは、ブートシグネチャがある場合、そのセクタの先頭にブートローダコードがあると単純に仮定します。これは仮定です。ちょうど0x55AAを適切な場所に配置するために偶然にゴミがランダムに存在するという1/65536の可能性がある。
8bittree

母:D kkはそれを手に入れました、そしてそれがセクターの一番最後にそれが正しいということであるということです(511,512)?
Jordan Davis

1
この答え on Stack Overflowは、これらの数字の背後にあるいくつかの推論を示唆しています(2進法でパターンを交互にする)。しかし、それはまだただであることに煮詰めているようです マジックナンバー
8bittree

0

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のオフセットではなく、実際のオフセットはゼロです。


それで、あなたの言っているのは、デバイスがゼロ充填よりもMBRを持っていないのであれば、55AAのシグネチャが欠けているということですか?
Jordan Davis
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.