インストールしてgrub v1.98
MBR を逆アセンブルした後、理解できない次のコード スニペットを見つけました。
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
MBR を から0x7c00
にコピーし0x0600
、次に に分岐するコードが含まれています。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 の先頭。最初の命令を除いて、コードは元の MBR を から0x7c00
にコピーするために Windows 7 の MBR と同じことをしようとしているようです。これらのコードは実際に実行されますか? はいの場合、ここでジャンプを制御するのはいつですか。0x0600
jmp
jmp