Где находится код 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

Другие вопросы по тегам