2012-07-06 11 views
6

я grub v1.98 установлен и после разборки MBR я нашел следующий фрагмент кода, который я не понимаю:Где код GRUB stage 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?

Я имею в виду 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).

ответ

4

GRUB 1.98 - версия GRUB 2. В версии 2 нет стадии 1.5. Сцена 1.5 имела фиксированное место между MBR и первой секцией. Это было (чаще всего) неиспользуемое пространство на жестком диске. Разделение GPT и другие (необычные) макеты не предоставляют это пространство.

В GRUB v2 stage 1 загружается core.img, который может быть сохранен в любом месте LBA48, обычно между MBR и первым разделом, но также может быть сохранен в разделе. В случае не-EFI для GPT для него должен быть создан пользовательский раздел. Расположение замонолично в стадию 1.

Смотрите также: http://www.gnu.org/software/grub/manual/grub.html#Images

+0

личинки установить первую попытку поставить core.img в свободном пространстве между разделами. Вы увидите ошибку, если там не хватает места. Вы можете заставить grub писать core.img внутри раздела только с помощью переключателя. Ваш ответ вводит в заблуждение. – ZAB

+0

grub-install дает сообщение об ошибке, если между MBR и первым разделом недостаточно места. –

+1

Извините, но Grub 2 по-прежнему рекомендует помещать 'core.img' в пробег MBR (если, конечно, на диске нет GPT):« В этом формате таблицы разделов [MBR] есть два способа установки GRUB: он может быть встроен в области между MBR и первым разделом ... Команда разработчиков GRUB обычно рекомендует внедрять GRUB до первого раздела, если у вас нет особых требований ». [Grub 2.02] (https://www.gnu.org/software/grub/manual/grub.html#BIOS-установка). – antonio

 Смежные вопросы

  • Нет связанных вопросов^_^