2012-07-06 19 views
6

私はgrub v1.98がインストールされているとMBRを分解した後、私は理解していない次のコードスニペットを見つける:GRUBステージ1.5のコードはどこにありますか?ディスクはどのディスクにロードされていますか?

xor ax,ax 
mov [si+0x4],ax 
inc ax 
mov [si-0x1],al 
mov [si+0x2],ax 
mov word [si],0x10 
mov ebx,[0x7c5c] 
mov [si+0x8],ebx 
mov ebx,[0x7c60] 
mov [si+0xc],ebx 
mov word [si+0x6],0x7000 
mov ah,0x42 
int 0x13 

コードのこの作品は、ステージ1.5のコードのディスクアドレスを設定しようとすると思われるが、その後、負荷それを実行します。しかし、どの物理ブロックが読み込もうとしているのか、どうすればわかるでしょうか?さらに、ステージ1.5のコードの目的地は何ですか? 0x7000

私はWindows 7のMBRを参照しています。その後のブートアップコードは0x7c00です。 MBRは最初にアドレス0x7c00にロードされ、0x7c00から0x0600までのMBRをコピーし、元のコードが破損した場合には0x0600に分岐します。ローディングステージ1.5コード0x7000に対処する元のコードが矛盾しますか?さらに、私はまた:

jmp short 0x65 
nop 
sar byte [si+0x7c00],1 
mov es,ax 
mov ds,ax 
mov si,0x7c00 
mov di,0x600 
mov cx,0x200 
cld 
rep movsb 
push ax 
push word 0x61c 
retf 

MBRの冒頭にあります。コードは、最初のjmp命令を除いて、元のMBRを0x7c00から0x0600にコピーするために、Windows 7のMBRと同じことを試みます。これらのコードは実際に実行されますか?はいの場合、ここでジャンプが制御されます(答えはYESだと思うが、先頭にあるjmpによって混乱している)。

答えて

4

GRUB 1.98はGRUBバージョン2です。バージョン2では、ステージ1.5がなくなりました。 ステージ1.5には、MBRと最初のパーティションの間に固定された場所がありました。それはハードドライブ上の(多くの場合)未使用のスペースでした。 GPTパーティショニングやその他の(珍しい)レイアウトは、このスペースを提供しません。

GRUB v2ステージ1では、core.imgがロードされます。これは、通常はMBRと最初のパーティションの間のLBA48の場所に格納できますが、パーティション内に格納することもできます。 GPTの非EFIの場合、カスタムパーティションを作成する必要があります。場所は、ステージ1

に配線接続されている参照:http://www.gnu.org/software/grub/manual/grub.html#Images

+0

パーティション間の空きスペースにcore.imgを配置する最初の試みをGRUBインストールしてください。そこに十分なスペースがない場合、エラーが表示されます。 grubに、スイッチを使用している場合にのみ、パーティション内でcore.imgを強制的に書き込むことができます。あなたの答えは誤解を招きます。 – ZAB

+0

MBRと最初のパーティションの間に十分なスペースがない場合、grub-installはエラーメッセージを表示します。 –

+1

残念ですが、Grub 2はまだMBRギャップにcore.imgを入れることを推奨しています(ディスクがGPTでない限り): "このパーティションテーブルフォーマット[MBR]では、GRUBをインストールするには2通りの方法があります。 MBRと最初のパーティションの間の領域... GRUB開発チームは、特別な要件がない限り、最初のパーティションの前にGRUBを組み込むことを一般的に推奨しています。 [Grub 2.02](https://www.gnu.org/software/grub/manual/grub.html#BIOS-installation)。 – antonio

関連する問題