私は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
によって混乱している)。
パーティション間の空きスペースにcore.imgを配置する最初の試みをGRUBインストールしてください。そこに十分なスペースがない場合、エラーが表示されます。 grubに、スイッチを使用している場合にのみ、パーティション内でcore.imgを強制的に書き込むことができます。あなたの答えは誤解を招きます。 – ZAB
MBRと最初のパーティションの間に十分なスペースがない場合、grub-installはエラーメッセージを表示します。 –
残念ですが、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