Где находится код GRUB этапа 1.5 на диске и по какому адресу он загружен?
Я имею 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. Кажется, код пытается сделать то же самое, что и в MBR Windows 7, чтобы скопировать оригинальную MBR из 0x7c00
в 0x0600
кроме первого jmp
инструкция. Будут ли эти коды действительно выполнены? Если да, то когда здесь будут контролироваться скачки.(Я считаю, что ответ ДА, но меня смущает ведущая jmp
).
1 ответ
GRUB 1.98 - это версия GRUB 2. В версии 2 больше нет этапа 1.5. Стадия 1.5 имела фиксированное место между MBR и первым разделом. Это было (чаще всего) неиспользуемое место на жестком диске. Разделение GPT и другие (необычные) макеты не предоставляют это пространство.
В GRUB v2 этап 1 загружает core.img, который может храниться в любом месте LBA48, обычно между MBR и первым разделом, но также может храниться в разделе. В случае GPT, не относящегося к EFI, для него должен быть создан пользовательский раздел. Расположение встроено в этап 1.
Смотрите также: http://www.gnu.org/software/grub/manual/grub.html