2012-07-06 43 views
6

मैं grub v1.98 स्थापित किया है और एमबीआर वियोजन के बाद मैं निम्नलिखित कोड का टुकड़ा है कि मुझे समझ नहीं आता लगता है:डिस्क पर जीआरयूबी चरण 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?

मैं विंडोज 7 के लिए एमबीआर का संदर्भ देता हूं, जहां बाद में बूट अप कोड 0x7c00 लोड किया जाता है। दिए गए एमबीआर को सबसे पहले पता 0x7c00 पर लोड किया गया है, इसमें 0x7c00 से 0x0600 से एमबीआर कॉपी करने के कोड का एक टुकड़ा शामिल है और फिर मूल कोड दूषित होने पर 0x0600 पर शाखा। 0x7000 को संबोधित करने के लिए चरण 1.5 कोड लोड कर देगा मूल कोड? और भी, मुझे यह भी लगता है:

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 

एमबीआर की शुरुआत में। ऐसा लगता है कि कोड jmp निर्देश को छोड़कर, विंडोज 7 के एमबीआर में मूल एमबीआर को 0x7c00 से 0x0600 पर कॉपी करने की कोशिश करता है। क्या इन कोडों को वास्तव में निष्पादित किया जाएगा? यदि हां, तो यहां कूदने पर नियंत्रण कब होगा। (मेरा मानना ​​है कि जवाब हाँ है, लेकिन अग्रणी jmp द्वारा उलझन में है)।

उत्तर

4

GRUB 1.98 GRUB संस्करण 2. संस्करण 2 में, अब कोई चरण 1.5 नहीं है। चरण 1.5 में एमबीआर और पहले विभाजन के बीच एक निश्चित स्थान था। हार्ड ड्राइव पर यह (अक्सर) अप्रयुक्त स्थान था। जीपीटी विभाजन और अन्य (असामान्य) लेआउट इस स्थान को प्रदान नहीं करते हैं।

GRUB v2 चरण 1 में core.img लोड होता है, जिसे किसी भी LBA48 स्थान पर संग्रहीत किया जा सकता है, आमतौर पर एमबीआर और पहले विभाजन के बीच, लेकिन इसे विभाजन के भीतर भी संग्रहीत किया जा सकता है। जीपीटी के गैर-ईएफआई मामले में, इसके लिए एक कस्टम विभाजन बनाया जाना चाहिए। स्थान चरण में hardwired है 1.

यह भी देखें: http://www.gnu.org/software/grub/manual/grub.html#Images

+0

विभाजन के बीच एक मुक्त अंतरिक्ष में core.img डाल करने के लिए grub-install पहली कोशिश। यदि वहां पर्याप्त जगह नहीं है तो आपको एक त्रुटि दिखाई देगी। आप केवल स्विच का उपयोग करके विभाजन के भीतर core.img लिखने के लिए grub को मजबूर कर सकते हैं। आपका जवाब भ्रामक है। – ZAB

+0

ग्रब-इंस्टाल एक त्रुटि संदेश देता है यदि एमबीआर और पहले विभाजन के बीच पर्याप्त जगह नहीं है। –

+1

क्षमा करें, लेकिन ग्रब 2 अभी भी एमबीआर अंतराल में 'core.img' डालने की सिफारिश करता है (जब तक डिस्क निश्चित रूप से जीपीटी नहीं है): "इस विभाजन तालिका प्रारूप [एमबीआर] के साथ, GRUB को स्थापित करने के दो तरीके हैं: इसे एम्बेड किया जा सकता है एमबीआर और पहले विभाजन के बीच के क्षेत्र में ... GRUB विकास टीम आम तौर पर पहले विभाजन से पहले GRUB को एम्बेड करने की अनुशंसा करती है, जब तक कि आपके पास विशेष आवश्यकता न हो। " [ग्रब 2.02] (https://www.gnu.org/software/grub/manual/grub.html#BIOS- स्थापना)। – antonio