У меня установлено 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
?
Я имею в виду MBR для Windows 7, куда загружается последующий загрузочный код 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 Windows 7, чтобы скопировать исходную MBR из 0x7c00
в 0x0600
, за исключением первой инструкции jmp
. Будут ли эти коды на самом деле выполняться? Если да, то когда здесь будут контролировать прыжки. (Думаю, ответ ДА, но меня смущает ведущийjmp
).